百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

监控工具之Nagios,搭建和使用 nacos监控

liebian365 2024-10-19 08:08 18 浏览 0 评论

这是我整理的第四篇关于监控工具的文章,前三篇分别介绍了Prometheus、Zabbix和Cacti,这次再整理一篇关于Nagios的,算是把主流监控工具做了个阶段性梳理,希望能帮助到需要的朋友。

一、简介

1.1 Nagios监控框架工具介绍

Nagios是一款开源软件,能有效监控 Windows 、Linux、VMware 和 Unix 主机状态,交换机、路由器等网络设置等。当监控出异常时提醒系统管理员,当异常恢复时也会通知。Nagios提供一个基于浏览器的web界面,方便管理人员查看系统的运行状态,网络状态、服务状态、日志信息,以及其他异常现象。

2. 安装

说明:安装机器为CentOS系统

2.1更新yum源

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum clean all && yum makecache fast #安装epel源 yum install -y epel-release yum makecache fast

2.2安装依赖包

由于Nagios提供了Web界面,因此需要安装Apache;由于配置Web界面需要PHP模块支持,所以需要安装PHP,还需要其他插件。

sudo yum install httpd php php-cli gcc glibc glibc-common gd gd-devel net-snmp

2.3创建用户和分组

sudo useradd -m nagios #新建用户
sudo passwd nagios
#修改密码
sudo groupadd nagcmd
#新建分组
sudo usermod -a -G nagcmd nagios
#添加用户到分组

2.4安装Nagios

1、下载

wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-4.0.8.tar.gz

2、安装

tar xzf nagios-4.0.8.tar.gz #解压
cd nagios-4.0.8
sudo ./configure --with-command-group=nagcmd
sudo make all
sudo make install
sudo make install-init
sudo make install-config
sudo make install-commandmode
#安装 Web界面
sudo make install-webconf

3、为web界面创建登录账号

sudo htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

其中nagiosadmin为账号名可更改,同时会提示添加密码。 重启Apache服务

sudo service httpd restart

目录说明:

bin:Nagios 可执行程序所在目录

etc:Nagios 配置文件目录

sbin:Nagios cgi 文件所在目录, 也就是执行外部 命令所需要文件所在的目录

share:Nagios 网页存放路径

libexec:Nagios 外部插件存放目录

var:Nagios 日志文件、Lock 等文件所在的目录

var/archives:agios 日志自动归档目录

var/rw:用来存放外部命令文件的目录

2.5安装plugins

下载
wget http://nagios-plugins.org/download/nagios-plugins-2.0.3.tar.gz
安装
tar xzf nagios-plugins-2.0.3.tar.gz
cd nagios-plugins-2.0.3
sudo ./configure --with-nagios-user=nagios --with-nagios-group=nagios

sudo make
sudo make install

安装目录:/usr/local/nagios/ 安装完毕,web界面

3. 基本配置

[root@zz lib64]# cd /usr/local/nagios/
[root@zz nagios]# ls
bin etc include libexec sbin share var
[root@zz nagios]# ll
总用量 12
drwxrwxr-x. 2 nagios nagios 38 6月 1 11:42 bin
#nagios相关命令
drwxrwxr-x. 3 nagios nagios 96 6月 1 11:42 etc
#nagios配置文件及目录信息
drwxr-xr-x. 2 root root 6 6月 1 12:13 include
#包含文件目录
drwxrwxr-x. 2 nagios nagios 4096 6月 1 12:13 libexec
#插件目录路径
drwxrwxr-x. 2 nagios nagios 4096 6月 1 11:42 sbin
#nagios的cgi程序,将来换web的时候需要支持cgi。
drwxrwxr-x. 11 nagios nagios 4096 6月 1 12:13 share
#界面展示的php程序等内容目录
drwxrwxr-x. 5 nagios nagios 45 6月 1 11:42 var
#日志文件和数据目录
[root@zz nagios]# cd etc/
[root@zz etc]# ll

总用量 64
-rw-rw-r--. 1 nagios nagios 12015 6月 1 11:42 cgi.cfg
-rw-r--r--. 1 root root 50 6月 1 11:43 htpasswd.users
-rw-rw-r--. 1 nagios nagios 44475 6月 1 11:42 nagios.cfg
drwxrwxr-x. 2 nagios nagios 167 6月 1 11:42 objects
-rw-rw----. 1 nagios nagios 1312 6月 1 11:42 resource.cfg
[root@zz etc]# cd objects/
[root@zz objects]# ll
总用量 48
-rw-rw-r--. 1 nagios nagios 7688 6月 1 11:42 commands.cfg
-rw-rw-r--. 1 nagios nagios 2138 6月 1 11:42 contacts.cfg
-rw-rw-r--. 1 nagios nagios 5375 6月 1 11:42 localhost.cfg
-rw-rw-r--. 1 nagios nagios 3096 6月 1 11:42 printer.cfg
-rw-rw-r--. 1 nagios nagios 3265 6月 1 11:42 switch.cfg
-rw-rw-r--. 1 nagios nagios 10621 6月 1 11:42 templates.cfg
-rw-rw-r--. 1 nagios nagios 3180 6月 1 11:42 timeperiods.cfg
-rw-rw-r--. 1 nagios nagios 3991 6月 1 11:42 windows.cfg

3.1 配置文件列表配置文件作用

配置文件说明:

cgi.cfg: 控制CGI访问的配置文件

nagios.cfg:Nagios的主配置文件

resource.cfg:变量定义文件,在此定义的变量,用于其它配置文件中使用,如USER1USER1

objects:objects为目录,内部含有大量的配置文件

objects/command.cfg:命令定义配置文件

objects/contacts.cfg:联系人和联系人分组配置文件

objects/localhost.cfg:定义监控本机的配置文件

objects/printer.cfg:监控打印机的配置文件,默认不启用此文件

objects/switch.cfg:监控路由器的配置文件,默认不启用此文件

objects/templates.cfg:定义主机和服务的配置文件

objects/timeperiods.cfg:定义监控时间段的配置文件

objects/windows.cfg:监控Windows机器的配置文件,默认没有启动此文件

注:在以后修改配置文件后,可以利用以下命令行检测配置文件是否正确,可以根据错误提示修改

sudo /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

修改完配置文件后web界面不会立马修改,需要重新加载、启动nagios服务。

sudo service nagios reload
sudo service nagios restart

3.2 命令配置文件

文件名称:commands.cfg 文件定义格式:

define command{
command_name *******
command_line *******

例如,查看本地负载的命令

# 'check_local_load' command definition
define command{
command_name check_local_load
command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
}

其中,变量USER1USER1在resource.cfg中定义

# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec

USER1USER1中自带很多可执行的文件,可在命令行使用-v,查看具体的用法,这里ARG1是发出警告(w)的条件,ARG1是发出警告(w)的条件,ARG2是发出严重警告(c)的条件。可以用命令执行,命令执行,如

[master@usr]$ /usr/local/nagios/libexec/check_load -w 5.0,4.0,3.0 -c 10.0,6.0,4.0
OK - load average: 0.00, 0.01, 0.05|load1=0.000;5.000;10.000;0; load5=0.010;4.000;6.000;0; load15=0.050;3.000;4.000;0;

3.3 监控本地主机

确认nagios.cfg中有对localhoast.cfg文件的引用

# Definitions for monitoring the local (Linux) host
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg

localhost.cfg自带了对HTTP、ROOTPartition、SSH等服务的定义。 在localhost.cfg定义主机

define host{
use linux-server
host_name localhost
alias localhost
address 127.0.0.1
}

其中host_name是对被监控机器的名称,alias是被监控机器名称的别称,address是被监控机器的ip(127.0.0.1表示本地机器),use指明的是被监控机器继承的模板(定义模板的位置在templates.cfg,具体含义参考报警部分)。

然后在localhost.cfg里完成对服务(service)的定义

define service{

use local-service

host_name localhost

service_description 磁盘空间

check_command check_local_disk!20%!10%!/

}

use指被监控机器集成的服务模板(定义模板的位置在templates.cfg,具体含义参考报警部分)

host_name指主机名,与上面定义的host_name所指含义相同

service_description指要显示在web界面的内容

check_command指明要执行的命令名称(命令定义的位置是commands.cfg),示例中的参数20%表示,磁盘剩余空间少于20%(ARG1)时开始报警,10ARG1)时开始报警,10ARG2$)表示,磁盘剩余空间少于10)时开始报警。

对本机其他的监控的配置一样。配置完成后可以在浏览器上浏览效果(地址:部署nagios所在机器的ip/nagios)监控主机页面

3.4 监控远程Linux/UNIX主机

1、原理

监控远程的Linux/UNIX由两部分组成:运行在监控主机上的check_nrpe,运行在被监控主机上的NRPE守护进程。其中check_nrpe不是nagios自带的可执行文件,是安装plugins时带的可执行文件(位置在: /usr/lib64/nagios/plugins/)。 当监控远程的Linux/UNIX时,工作流程如下:

  • nagios运行check_nrpe这个插件,并告诉它要执行什么命令
  • check_nrpe连接到被监控端的NRPE守护进程,告诉它命令
  • 被监控端的NRPE守护进程执行具体的操作
  • 被监控端的NRPE守护进程把执行的结果返回给Nagios做后处理

2、被监控端的插件安装与配置

(1)CentOS系统

yum install epel-release

yum install nrpe nagios-plugins-all openssl

(2)Debian/Ubuntu系统

apt-get install epel-release

sudo apt-get install nagios-nrpe-server nagios-plugins

安装完后进行配置 打开/etc/nagios/nrpe.cfg文件,在allowed_hosts后面添加上监控机器的ip

## Find the following line and add the Nagios server IP ##

allowed_hosts=127.0.0.1 192.168.1.150

3、开启NRPE服务

(1)CentOS系统

systemctl start nrpe

chkconfig nrpe on

(2)Debian/Ubuntu系统

sudo /etc/init.d/nagios-nrpe-server restart

回到监控主机,新建目录servers

sudo mkdir /usr/local/nagios/etc/servers

创建监控远程Linux/UNIX主机的脚本

sudo touch /usr/local/nagios/etc/servers/clients.cfg

在nagios.cfg中添加上目录servers,这样目录中的文件都会被引入到监控中来。

cfg_dir=/usr/local/nagios/etc/servers

举例

以“监控远程Linux/UNIX主机的CPU负载”为例 被监控端 进入目录cd /etc/nagios/nrpe.cfg 添加命令行:

command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20

修改后重启服务

service nagios-nrpe-server restart

监控端 打开servers/clients.cfg文件 定义主机

define host{

use linux-server

host_name 10.61.88.23

alias 10.61.88.23

address 10.61.88.23

}定义服务

define service {

use generic-service,srv-pnp

host_name 10.61.88.23

service_description CPU负载

check_command check_nrpe!check_load

notifications_enabled 1

}

其中check_command中check_nrpe!后面的命令check_load对应被监控端的command[check_load]对应的命令。

4、监控远程windows

说明

nagios对windows进行监控需要在被监控端安装NSClient,NSClient++来监控windows主机有三种方式:check_nt、check_nrpe、nsca。check_nt自带很多功能,可以完成很多基本的需求,但是扩展性差;check_nrpe可以通过执行自己定义的脚本做到很好地扩展。为了满足自己的需求,可以以上几种方式结合使用。 在objects目录下创建文件windows.cfg,添加主机和服务。

check_nt

添加主机和服务

define host{

use windows-server

host_name ruanxi

alias My Windows Server

address 192.168.0.5

}

#监控 windows 主机的开机运作时间

define service{

use generic-service

host_name ruanxi

service_description Uptime

check_command check_nt!UPTIME

}

#监控 windows 主机的内存使用状况

define service{

use generic-service

host_name ruanxi

service_description Memory Usage

check_command check_nt!MEMUSE!-w 80 -c 90 #内存使用到达80%则warn,到达90%则Critical

}

check_nrpe

原理


使用check_nrpe监控windows的原理与监控linux主机的原理一致,这样可以根据特定的需求自己写脚本。 以监控某个进程是否运行为例 编辑NSClient配置文件NSC.ini,去掉以下几行前面的“;”号(去掉注释,使其生效)

NRPEListener.dll

script_dir=scripts\

CheckExternalScripts.dll

在NSClient安装目录下的scripts文件夹下,新建一个check_run.bat批处理文件,如下

@echo off

tasklist |find "%1" >NUL

IF ERRORLEVEL 1 GOTO err

IF ERRORLEVEL 0 GOTO ok

:err

echo CRITICAL: Process does not exist

exit /B 1

:ok

echo OK: The process of normal

exit /B 0

说明:脚本的退出值与nagios的报警提示对应关系为:0--正常,1--警告,2--严重警告 在NSC.ini文件中[External Scripts]下面添加如下行:

check_run=scripts\check_run.bat chrome.exe

重启NSClinet 可以在被监控端check_nrpe所在的目录(CentOs默认的安装目录为:/usr/lib64/nagios/plugins/)

./check_nrpe -H hostip -c check_run

注:-H后写刚才脚本所在的机器,-c后写命令,这里对应配置文件中的check_run

如果结果与预期的一致,那么就可以继续配置监控端了

配置监控端 修改commands.cfg,增加命令

define command{

command_name check_run

command_line /usr/lib64/nagios/plugins/check_nrpe -H yourip -c check_run

}

修改windows.cfg,增加服务

define service{

use generic-service-urgent,srv-pnp

host_name youip ;要展示信息的机器的ip

service_description check_fileexistspan

check_command check_run

}

4. 报警

4.1 报警配置文件

修改联系人

配置文件是contacts.cfg. 联系人定义方式为:

define contact{

contact_name nagiosadmin ; 用户名称

use generic-contact ;

alias Nagios Admin ; 用户别称

email ****@**** ;修改为需要通知的邮箱

}

该contact继承了templates.cfg中的genetic-contact,如下

define contact{

name generic-contact ; The name of this contact template

service_notification_period 24x7 ; service notifications can be sent anytime

host_notification_period 24x7 ; host notifications can be sent anytime

service_notification_options w,u,c,r,f,s ; send notifications for all service states, flapping events, and scheduled downtime events

host_notification_options d,u,r,f,s ; send notifications for all host states, flapping events, and scheduled downtime events

service_notification_commands notify-service-by-email ; send service notifications via email

host_notification_commands notify-host-by-email ; send host notifications via email

register 0 ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE!

}

host_notification_commands指定的方式为notify-host-by-email,如果是微信或短信等其他方式,用逗号隔开写在后面即可。其中命令notify-host-by-email的定义在commands.cfg中默认已定义,如下

# 'notify-host-by-email' command definition

define command{

command_name notify-host-by-email

command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$

}

联系人分组定义方式为:

define contactgroup{

contactgroup_name admins

alias Nagios Administrators

members nagiosadmin ;这里填写刚才定义的contact_name

}

4.2 修改报警时间周期

define host{

use linux-server

host_name server_10.61.91.37

alias server_10.61.91.37

address 127.0.0.1

contact_groups admins ;这里添加报警组名称(上面刚定义的)

}

要使主机或服务能够发邮件,必须在定义主机或服务时添加说明,以服务为例。修改localhost.cfg中本机的修改。这样主机出现异常时会发送异常到报警组,报警组把异常分配给组里的成员,然后成员按照自己预先设定的报警方式进行报警。主机继承了linux-server模板,模板的定义在templates.cfg文件,文件中存在着主机和服务的继承关系,可以根据需要自己定制参数,以linux-server模板为例:

define host{

name linux-server ; 主机模板名称

use generic-host ; 继承通用模板

check_period 24x7 ; 监控的时间段为一周七天,每天24小时,具体定义详见timeperiods.cfg

check_interval 5 ; 对主机每5分钟检测一次(注:这里的数值单位默认为分钟)

retry_interval 1 ; 重试检测时间为1分钟

max_check_attempts 1 ; nagios对主机的最大检查次数,即nagios在检查发现某主机异常时,并不马上下定论

check_command check-host-alive ;指定检查主机状态的命令,其中“check-host-alive”在commands.cfg文件中定义

notification_period workhours ; 主机故障时,发送通知的时间范围,其中“workhours”在timeperiods.cfg中进行了定义;

notification_interval 30 ; 故障出现,没有修复,每30分钟再发一次告警

notification_options d,u,r ; 定义主机在什么状态下可以发送通知给使用者,d即down,表示宕机状态;

register 0 ;指明这非真正主机,这只是模板而已

}注:这里的时间是时间片的含义,定义在nagios.cfg中command_check_interval=60,默认单位是s 。30即30*60s

4.3 邮件报警

上面是以邮件报警为例说明的,但是前提是系统可以往外发邮件,配置如下(以CentOs为例) 打开/etc/mail.rc文件 添加 其中 set from=[发送人邮箱地址] set smtp=[smtp服务器地址] set smtp-auth-user=[邮箱用户名] set smtp-auth-password=[邮箱密码] set smtp-auth=login 测试: mail -s [邮件主题] [邮件地址] 回车,然后输入邮件内容,最后按“Ctrl + D”。如果发送成功表明配置成功。

5. 分组

完成了以上的配置,已经完成了nagios的基本配置,但是当有多个机器时,所有的机器显示在一起会显得很乱,并且和自己无关的主机也会对自己报警。为了作区分可以对主机和服务进行分组,这样管理人员就可以只关注自己管理的主机和服务。

5.1 主机分组

定义分组的位置放哪都行,只要引入到nagios.cfg中即可,为了方便找,这里把分组放到localhost.cfg和windows.cfg里。

define hostgroup{

hostgroup_name linux-servers ; The name of the hostgroup

alias Linux Servers ; Long name of the group

members server_10.61.91.37,172.16.41.211,10.61.88.23 ; 主机名

}点击web界面左边导航条中主机组的表格,分组示例

5.2 服务分组

define servicegroup{

servicegroup_name dbservices

alias Database Services

members 进程CPU与内存,10.61.88.23,监控端口状态 ;这里写service中的service_description

}

点击web界面左边导航条中服务组的表格,分组示例

6. 界面美化

6.1 汉化

可以根据自己的需求对web界面的显示选项进行定制和修改。 对左边导航条的修改文件是/usr/local/nagios/share/side.php 修改后,需要重新加载、启动nagios。简易修改效果如下:

相关推荐

看黑客是如何获取你电脑最高权限的,一定要看

在渗透过程中,通过各种方式获取到一枚cmdshell,但是这个shell的权限比较低,无法让我们做我们想要做的一些操作,比如说获取系统密码,获取数据库信息,又或者比如说拿到服务器中的另一个站点的权限,...

是50个常用的Visual Basic代码示例:

以下是50个常用的VisualBasic代码示例:1.声明变量```vb...

电脑系统型号怎么看版本(如何看电脑系统型号)

有时候我们会需要进行查看电脑上安装的windows系统版本及系统版本号,但对于不懂电脑知识的小白来说要怎么查看电脑系统版本信息呢?别着急,有小编在接下来,就将查看电脑系统版本的教程来分享给你们,希望对...

dos命令systeminfo,查看系统启动时间。电脑卡慢,win10怎么了?

最近一段时间,有几个反应电脑卡慢的,都是windows10的系统。询问得知每天电脑有关机,打开任务管理器,内存使用量达到百分之九十多,而程序只打开微信、wps、360浏览器。cmd窗口运行命令syst...

systeminfo命令:全面解析系统信息!

你是否曾想过,仅凭一条简单的命令,就能深入了解计算机的"内心世界"?是不是有点不可思议?那么,让我们一起探寻这个神奇的命令,揭开它背后的奥秘吧!它能提供的信息超乎你的想象,从操作系统到硬件配置,再到驱...

电脑序列号怎么查询?只需两行命令一键查询

当我们的电脑出问题需要保修的时候,需要查询到电脑的型号和序列号才更便于进行下一步的操作,有包装盒的朋友还可以在包装盒上查询,笔记本用户可以在电脑底部标签上查询,没有包装盒和标签破损的用户就无从下手了。...

快速显示系统信息:Systeminfo命令详解

Systeminfo命令是windows系统中显示系统信息的命令,此命令可以显示出计算机的操作系统的详细配置信息,包括操作系统配置、安全信息、产品ID和硬件属性(如RAM、磁盘空间和网卡)。使用...

dos命令systeminfo图文教程,显示操作系统配置信息msinfo32

大家好,我是老盖,首先感谢观看本文,本篇文章做的有视频,视频讲述的比较详细,也可以看我发布的视频。今天我们学习systeminfo命令,该工具显示本地或远程机器(包括服务包级别)的操作系统配置的信息,...

基于uniapp+vue3跨端仿制chatgpt实例uniapp-chatgpt

#夏日生活打卡季#...

原创新作uniapp+vue3+pinia2高仿微信App聊天

前段时间有给大家分享一个flutter3.x桌面端os系统。今天再分享一款最新原创之作uniapp-vue3-wechat聊天实例。uni-vue3-wechat采用...

UniApp开发的设备适配(uniapp服务器配置)

UniApp是一个跨平台开发框架,支持多端应用(如H5、小程序、iOS、Android等)。由于不同设备的屏幕尺寸、分辨率、操作系统等存在差异,设备适配是开发过程中需要重点关注的问题。以下是Uni...

如何用服务器搭建自己的个人网站(自己服务器怎么做网站)

这篇教程主要是告诉大家如何利用TCP和HTTP协议来完成网站的搭建。首先你需要有C/C++语言基础,且有服务器、客户端概念,如果你了解TCP或者HTTP协议的话,那么将会帮助你更快的学会如何搭建个人网...

大话C语言:字符数组(c语言字符数组教学视频)

1字符数组概述C语言中没有字符串这种数据类型,可以通过char的数组来替代。数字0(和字符'\0'等价)结尾的char数组就是一个字符串,字符串是一种特殊的char的数组。...

源码分享:在pdf上加盖电子签章(pdf怎么加电子签章)

在pdf上加盖电子签章,并不是只是加个印章图片,。而是要使用一对密钥中的私钥对文件进行签字。为啥要用私钥呢?很简单,因为公钥是公开的,其他人才可以用公钥为你证明,这个文件是你签的。这就是我们常说的:私...

C语言wcstombs函数详解:宽字符字符串到多字节的「翻译官」

核心定位wcstombs是C语言中用于将宽字符字符串转换为多字节字符串的「翻译官」,它能将宽字符(wchar_t)转换为多字节字符(如UTF-8编码的中文)。就像一位翻译官,它能将一种语言(宽字符...

取消回复欢迎 发表评论: