首页 Linux基础正文

Nagios的配置及监控

Jean Linux基础 2018-12-17 809 0 nagios

1.本地资源

(1) 负载:uptime;
(2) CPU:top,sar,cpu温度;
(3) 磁盘:df;
(4) 内存:free;
(5) IO:iostat;
(6) RAID
(7) passwd文件的变化(本地所有文件指纹识别)。

2.网络服务

端口、URL、ping丢包、进程数、IDC网络流量

3.其他设备

路由器、交换机端口流量、打印机、windows等

4.业务数据

用户登录失败次数,用户登录网站次数,输入验证码失败次数、某个API接口流量并发,电商网站订单,支付交易的数量等。这个获取的过程可能是开发或者架构师完成的,但添加的过程就是运维;


监控软件本身仅仅是一个平台,我们想监控的内容,理论上只要在服务器命令行可以获取到就可以被监控软件监控。

1.1 Nagios简介

Nagios又被称为难够死,因为很难。Nagios是一款开源的网络及服务的监控工具,其功能强大、灵活性强。能有效监控windows、LinuxUnix等系统的主机各种状态信息,交换机、路由器等网络设备,以及主机端口URL服务等。根据不同业务故障级别发出告警信息(邮件、微信、短信、语音报警、飞信、MSN)给管理员,当故障恢复时也会发出恢复消息给管理员。 
Nagios服务端可以在Unix及类Unix系统上运行,目前无法运行在windows。Windows可以作为被监控的主机,但是无法作为监控服务器。

1.2 Nagios构成

Nagios不好的地方在于它只做核心,很多其他功能都是通过插件来实现的。Nagios一般由一个主程序(Nagios),一个插件程序(Nagios-plugins)和一些可选的附加程序(NRPE,NSClient++,NSCA,NDOUtils)等。Nagios本身就是一个监控的平台而已,其具体的监控工作都是通过插件(Nagios-plugins,也可自己编写)来实现的。因此,Nagios主程序和Nagios-plugins插件都是Nagios服务端必须安装的程序组件,并且Nagios-plugins一般也要安装于被监控端。几个附加程序的描述如下: 
1. NRPE:半被动模式 
(1) 存在位置:工作在被监控端,操作系统为Linux/Unix; 
(2) 作用:用于在被监控的远程Linux/Unix主机上执行脚本插件获取数据回传给服务器端,以实现对这些主机资源的监控。主要用于监控本地资源; 
(3) 存在形式:守护进程(agent)模式,开启的端口为5666
2. NSClient++:半被动模式 
(1) 存在位置:监控Windows主机; 
(2) 作用:相当于Linux下的NRPE; 
3. NDOUtils:不推荐使用 
(1) 存在位置:Nagios服务器端; 
(2)作用:用于将Nagios的配置信息和各event产生的数据存入数据库以实现对这些数据的检索和处理。但是存入数据库还不如存放在磁盘上,因此推荐使用; 
4. NSCA:纯被动模式的监控 
(1)存在位置:同时安装在Nagios的服务器端和客户端; 
(2) 作用:用于让被监控的远程Linux/Unix主机主动将监控到的信息发送给Nagios服务器。在分布式监控集群模式中要用到,300台服务器以内可以不考虑;

1.3 原理

1.png-34.9kB

2.png-90kB

1.4 安装

三台虚拟机: 
3.png-5.5kB

1.4.1 服务端

调整字符集,如果不安装后面安装一些插件会有错误:

[root@nagios ~]# echo 'export LC_ALL=C' >>/etc/profile
[root@nagios ~]# . /etc/profile

关闭防火墙:

[root@nagios ~]# /etc/init.d/iptables stop
[root@nagios ~]# chkconfig iptables off

关闭selinux:

[root@nagios ~]# setenforce 0
[root@nagios ~]# sed -ri 's#^(SELINUX=).*#\1disabled#g' /etc/selinux/config

时间同步,监控的时间同步很重要:

echo '# time sync' >>/var/spool/cron/root
echo '*/10 * * * * /usr/sbin/ntpdate pool.ntp.org &>/dev/null' >>/var/spool/cron/root

需要安装web展示相关软件:(可以在博客搜索"lamp",以源码编译安装方式)

[root@nagios ~]# yum install -y gcc glibc glibc-common gd gd-devel httpd php php-gd mysql*

gcc glibc glibc-common gcc编译器 
gd gd-devel画图用的 
httpd php \php-gd php环境,官方推荐LAMP,不要改成Nginx 
mysql* 生成MySQL的插件,MySQL不需要启动 

软件下载:

nagios-soft.zip

  1. [root@nagios hadoop]# tree
    .
    |-- Class-Accessor-0.31.tar.gz # iostat监控插件所需
    |-- Config-Tiny-2.12.tar.gz # 同上
    |-- Math-Calc-Units-1.07.tar.gz # 同上
    |-- Nagios-Plugin-0.34.tar.gz # 同上
    |-- Params-Validate-0.91.tar.gz # 同上
    |-- Regexp-Common-2010010201.tar.gz # 同上
    |-- check_iostat # 用于监控的插件
    |-- check_memory.pl # 用于监控的插件
    |-- check_mysql # 用于监控的插件
    |-- libart_lgpl-2.3.17.tar.gz # iostat监控插件所需
    |-- nagios-3.5.1.tar.gz # 主程序
    |-- nagios-plugins-1.4.16.tar.gz # 插件管理
    |-- nrpe-2.12.tar.gz # agent
    |-- pnp-0.4.14.tar.gz # 画图的web程序,这个是展示
    `-- rrdtool-1.2.14.tar.gz # pnp的辅助程序,这个才是画图的

创建所需用户,并将apachenagios同属于一个组,方便一起管理:

useradd -m nagios
groupadd nagcmd
usermod -a -G nagcmd nagios
usermod -a -G nagcmd apache

安装:

[root@nagios hadoop]# tar xf nagios-3.5.1.tar.gz
[root@nagios hadoop]# cd nagios
[root@nagios nagios]# ./configure --with-command-group=nagcmd
[root@nagios nagios]# make all
[root@nagios nagios]# make install
…
  make install-init
     - This installs the init script in /etc/rc.d/init.d
  make install-commandmode
     - This installs and configures permissions on the
       directory for holding the external command file
  make install-config
     - This installs sample config files in /usr/local/nagios/etc
make[1]: Leaving directory `/admin/hadoop/nagios'

这是编译后出现的信息提示,可以时候以上三种编译方式生成启动脚本、命令和配置文件样例

[root@nagios nagios]# make install-init && make install-config && make install-commandmode
[root@nagios nagios]# make install-webconf # 生成了如何在httpd中显示Nagios的配置文件
/usr/bin/install -c -m 644 sample-config/httpd.conf /etc/httpd/conf.d/nagios.conf # 就是这个文件

配置web认证:

htpasswd -cb /usr/local/nagios/etc/htpasswd.users shnne 123456

# -b:非交互 
安装插件:

yum install -y perl-devel
tar xf nagios-plugins-1.4.16.tar.gz
cd nagios-plugins-1.4.16
./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-perl-modules
make && make install
cd ..
ls /usr/local/nagios/libexec/|wc -l # 插件有61个,多比少好

安装NRPE,之所以服务端也安装NRPE,一是是因为要在…/nagios/libexec/目录下生成check_nrpe命令;二是服务端也要通过NRPE进行监控:

tar xf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
cd ..

最后启动,Nagios是不会监听端口的,因为不会有程序发数据给它。

/etc/init.d/httpd start
/etc/init.d/nagios start
lsof -i :80
ps aux |grep nagios

1.4.2 被监控端

调整字符集,如果不安装后面安装一些插件会有错误:

echo 'export LC_ALL=C' >>/etc/profile
. /etc/profile

关闭防火墙:

/etc/init.d/iptables stop
chkconfig iptables off

时间同步,监控的时间同步很重要:

echo '# time sync' >>/var/spool/cron/root
echo '*/10 * * * * /usr/sbin/ntpdate pool.ntp.org &>/dev/null' >>/var/spool/cron/root

创建用户:

[root@lamp ~]# useradd -m nagios -s /sbin/nologin

安装perl


yum install -y perl-devel perl-CPAN openssl*
yum install -y mysql-server # 这是为了解决报错,如果已经安装过mysql可以跳过

安装插件:

tar xf nagios-plugins-1.4.16.tar.gz
cd nagios-plugins-1.4.16
./configure --prefix=/usr/local/nagios --enable-perl-modules --enable-redhat-pthread-workaround --with-mysql=/usr/bin/mysql
# --enable-redhat-pthread-workaround:如果redhat系统不加这个会很慢
# --with-mysql是为了解决make: *** [all] Error 2
make && make install
cd ..

安装NRPE:

tar xf nrpe-2.12.tar.gz
cd nrpe-2.12
./configure
make all
make install-plugin
make install-daemon
make install-daemon-config
cd ..

安装iostat:

tar xf Params-Validate-0.91.tar.gz
cd Params-Validate-0.91
perl Makefile.PL
make
make install
cd ..
tar xf Class-Accessor-0.31.tar.gz
cd Class-Accessor-0.31
perl Makefile.PL
make && make install
cd ..
tar xf Config-Tiny-2.12.tar.gz
cd Config-Tiny-2.12
perl Makefile.PL
echo $?
make && make install
cd ..
tar xf Math-Calc-Units-1.07.tar.gz
cd Math-Calc-Units-1.07
perl Makefile.PL
make && make install
cd ..
tar xf Regexp-Common-2010010201.tar.gz
cd Regexp-Common-2010010201
perl Makefile.PL
make && make install
cd ..
tar xf Nagios-Plugin-0.34.tar.gz
cd Nagios-Plugin-0.34
perl Makefile.PL
make
make install
cd ..
yum install -y sysstat
cp /root/tools/check_memory.pl /usr/local/nagios/libexec/
cp /root/tools/check_iostat /usr/local/nagios/libexec/
chmod 755 /usr/local/nagios/libexec/check_memory.pl
chmod 755 /usr/local/nagios/libexec/check_iostat
yum install -y dos2unix
dos2unix /usr/local/nagios/libexec/check_iostat
dos2unix /usr/local/nagios/libexec/check_memory.pl

修改客户端的配置文件:

cd /usr/local/nagios/etc/
cp nrpe.cfg{,.bak}
sed -ri 's@^allowed_hosts.*@&,10.0.0.1@g' nrpe.cfg # 允许10.0.0.1监控
sed -ri '199,203d' nrpe.cfg

# 以下是用来告诉NRPE这个守护进程怎么去监控

echo "command[check_load]=/usr/local/nagios/libexec/check_load -w 15,10,6 -c 30,25,20" >>nrpe.cfg
echo "command[check_mem]=/usr/local/nagios/libexec/check_memory.pl -w 6% -c 3%" >>nrpe.cfg
echo "command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 8% -p /" >>nrpe.cfg
echo "command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%" >>nrpe.cfg
echo "command[check_iostat]=/usr/local/nagios/libexec/check_iostat -w 6 -c 10" >>nrpe.cfg

[check_load]:相当于模块名 
/usr/local/nagios/libexec/check_load:获取资源的命令 
# 也就是说通过调用check_load就相当于执行/usr/local/nagios/libexec/check_load这个命令 
启动NRPE:

/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

# -c:指定配置文件 
# -d:daemon

echo "# nagios nrpe process cmd" >>/etc/rc.local # 开机自启
echo "/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d" >>/etc/rc.local
ss -lnt|grep 5666
1.5 开始监控
监控之前也要在服务器端安装客户端软件。 
Nagios安装生成的文件:

[root@nagios nagios]# pwd
/usr/local/nagios
[root@nagios nagios]# tree -L 1
.
|-- bin
|-- etc
|-- libexec # 插件
|-- sbin # CGI程序
|-- share # Nagios界面展示的php程序等内容的目录,被Nagios在httpd配置文件目录生成的配置文件所调用 
`-- var # 日志和数据
6 directories, 0 files
配置文件目录:

[root@nagios nagios]# tree etc/
etc/
|-- cgi.cfg # 被主配置文件包含
|-- nagios.cfg # 主配置文件
|-- objects # 被主配置文件包含
|   |-- commands.cfg # 存放Nagios命令相关配置(也可指定commands目录),这里的命令不是系统命令
|   |-- contacts.cfg
|   |-- localhost.cfg # 对本机的监控,我们不使用它进行监控,而是将本机当成客户端来监控
|   |-- printer.cfg # 打印机
|   |-- switch.cfg # 交换机
|   |-- templates.cfg # 模板配置文件
|   |-- timeperiods.cfg
|   `-- windows.cfg # windows
`-- resource.cfg # 被主配置文件包含,这里面是Nagios内置变量的定义,如$USER1$,$USER2$,$USER3$等
内容解释:

#commands.cfg:存放Nagios命令相关配置(也可指定commands目录),这里的命令不是系统命令,
而是实现把Nagios中定义的命令和Linux系统中的插件命令关联的一个文件。
如shnne=/bin/cat,shnne就是Nagios命令,而/bin/cat则是系统命令; 
services.cfg:存放具体被监控的服务相关的配置内容(对哪些服务进行监控),上百台以上可指定services目录,默认不存在; 
hosts.cfg:存放具体被监控的主机相关配置,上百台以上可指定hosts目录,默认不存在; 
contacts.cfg:存放报警联系人相关配置的文件; 
timeperiods.cfg:存放报警周期时间等相关配置; 
template.cfg:模板配置文件,模板的存在是为了方便的配置服务器配置,类似shell里的函数功能
编辑主配置文件: 
# 主配置文件是通过cfg_file来包含其他配置文件的,我们可以让其包含上述两个并不存在的配置文件:

[root@nagios etc]# sed -ri '33acfg_file=/usr/local/nagios/etc/objects/hosts.cfg' nagios.cfg
[root@nagios etc]# sed -ri '33acfg_file=/usr/local/nagios/etc/objects/services.cfg' nagios.cfg
# 注释掉localhost

[root@nagios etc]# sed -ri 's@cfg_file=/usr/local/nagios/etc/objects/localhost.cfg@#&@g' nagios.cfg
# 主配置文件还可以包含目录,只要目录下面存在以.cfg结尾的文件都会被包含进来。在配置文件很多时还是可以使用的:

[root@nagios etc]# sed -ri 's@#(cfg_dir=/usr/local/nagios/etc/servers)@\1@g' nagios.cfg #去掉井号
创建目录和文件:

mkdir servers
chown -R nagios.nagios servers/
cd objects/
head -51 localhost.cfg >hosts.cfg
chown nagios.nagios hosts.cfg
touch services.cfg # 暂时留空
chown nagios.nagios services.cfg
加入被监控主机: 
# 编辑hosts.cfg配置文件,也就是head localhost文件生成的

[root@nagios objects]# vim hosts.cfg
define host{
        use                                 
        host_name               02-client1
        alias                 02-client1
        address                10.0.0.2
        }
define host{ # 将本机也加入监控
        use                  linux-server
        host_name               01-nagios
        alias                 01-nagios
        address                10.0.0.1
        }
解释:

这一个标签就是一个被监控的主机 
use表示一个使用名为linux-server的模板,该模板就是和hosts.cfg在同一个目录下的timeperiods.cfg,
在该文件中可以搜索到linux-server定义的属性。可以也可以将该模板中定义的熟悉写在define 
host{}标签内,如果在该标签中定义了,那么就以该标签中的内容为准;如果没定义就会模板配置文件中找。
使用模板配置文件的好处就在于在现在这个标签内只需定义四行即可。
define hostgroup{ # 再将两个客户端加入一个组
        hostgroup_name  linux-servers
        alias           Linux Servers
        members         02-client1,01-nagios
        }
检查配置文件: 
# 检查配置文件的方法有两种,第一种为:

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
# 第二种:

/etc/init.d/nagios checkconfig
# 其实第二种就是调用第一种的命令,但是它将信息都定义到了/dev/null中了,根本看不出来什么地方出错了,因此我们可以修改启动脚本中的内容:

[root@nagios objects]# vim /etc/init.d/nagios +183
    checkconfig)
        printf "Running configuration check..."
        $NagiosBin -v $NagiosCfgFile # 将后面的重定向去掉
# 执行命令

[root@nagios objects]# /etc/init.d/nagios checkconfig
...
Error: There are no services defined! # 这就是错误,没有定义服务。下面就是统计的
...
Total Warnings: 2 # 警告无所谓
Total Errors:   1 # 但是错误一定要解决
...
# 既然没有定义服务,那我们就定义一个:
在hosts.cfg添加下面内容,(当然也可以放在services.cfg配置文件下,如果按照服务器来分,define host和define service可以放一个cfg文件下)

#service check
define service {
    use               generic-service # 模板
    host_name            02-client1,01-nagios #被监控主机
    service_description          Disk Partition # 检查磁盘分区
    check_command          check_nrpe!check_disk
}
# check_nrpe:Nagios的命令,需要在commands.cfg文件中定义,定义如下 
# check_disk:调用客户端配置文件nrpe.cfg中[check_disk]标签后面的命令

command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 8% -p / 

放到services.cfg
vi services.cfg
define service{
        use                             generic-service
        host_name                       web101,web102
        service_description             Swap Usage
        check_command                   check_nrpe!check_swap
        }
define service{
        use                             generic-service
        host_name                       web101,web102
        service_description             Disk Partition
        check_command                   check_nrpe!check_disk
        }
define service{
        use                             generic-service
        host_name                       web101,web102
        service_description             MEM Useage
        check_command                   check_nrpe!check_mem
        }
define service{
        use                             generic-service
        host_name                       web101,web102
        service_description             Current Load
        check_command                   check_nrpe!check_load
        }


# 编辑commands.cfg配置文件,在配置文件的结尾加入以下几行:
# 'check_nrpe' command definition
define command{
    command_name    check_nrpe
    command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
    }
# -c:指定一个参数,这个参数就是check_disk

# 其实定义这么多的参数无非就是为了执行这一条命令:

[root@nagios objects]# /usr/local/nagios/libexec/check_nrpe -H 10.0.0.2 -c check_disk
DISK OK - free space: / 57841 MB (95% inode=97%);| /=2760MB;51080;58742;0;63851
# 再次检查配置文件,结果ok:

[root@nagios objects]# /etc/init.d/nagios checkconfig(或/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg)

1.png-74.6kB


然后在Apache的配置文件httpd.conf末尾添加如下内容:(这一步之前安装服务端的似乎还生成过)

ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
 <Directory "/usr/local/nagios/sbin">
  AuthType Basic
  Options ExecCGI
  AllowOverride None
  Order allow,deny
  Allow from all
  AuthName "Nagios Access"
  AuthUserFile /usr/local/nagios/etc/htpasswd.users #注意文件是否存在
  Require valid-user
 </Directory>

Alias /nagios "/usr/local/nagios/share"
 <Directory "/usr/local/nagios/share">
  AuthType Basic
  Options None
  AllowOverride None
  Order allow,deny
  Allow from all
  AuthName "nagios Access"
  AuthUserFile /usr/local/nagios/etc/htpasswd.users #注意文件是否存在
  Require valid-user
 </Directory>

启动服务并访问web界面:

/etc/init.d/nagios start
/etc/init.d/httpd start

2.png-116.7kB


我们点击左边的services,会出现报错信息,解决办法就是编辑cgi.cfg: 

3.png-9.1kB

[root@nagios etc]# pwd  
/usr/local/nagios/etc
[root@nagios etc]# grep nagiosadmin cgi.cfg
authorized_for_system_information=nagiosadmin
authorized_for_configuration_information=nagiosadmin
authorized_for_system_commands=nagiosadmin
authorized_for_all_services=nagiosadmin
authorized_for_all_hosts=nagiosadmin
authorized_for_all_service_commands=nagiosadmin
authorized_for_all_host_commands=nagiosadmin
# 从以上信息可以看出nagiosadmin就是Nagios的管理员,我们现在是没有权限,
因此我们可以将nagiosadmin改为我们一开始添加的认证的用户shnne。当然也可以使用nagiosadmin作为认证用户:

[root@nagios etc]# sed -i 's/nagiosadmin/shnne/g' cgi.cfg
[root@nagios etc]# grep shnne cgi.cfg
authorized_for_system_information=shnne
authorized_for_configuration_information=shnne
authorized_for_system_commands=shnne
authorized_for_all_services=shnne
authorized_for_all_hosts=shnne
authorized_for_all_service_commands=shnne
authorized_for_all_host_commands=shnne
重启服务:

[root@nagios etc]# /etc/init.d/nagios reload

4.png-13kB

错误整理
1)错误1
[root@nagios-server objects]#/etc/init.d/nagios checkconfig

Running configuration check...CONFIG ERROR! Check your Nagiosconfiguration.

[root@nagios-server objects]#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg


Checking services...

Error: There are no servicesdefined!

	 Checked 0 services.

Total Warnings: 2

Total Errors:1

处理方法:

[root@nagios-server objects]# vim/etc/init.d/nagios +178

status)

pid_nagios

printstatus_nagios nagios # /dev/null 2>&1; 这部分去掉;

;;

checkconfig)


2)错误2:
[root@nagios-server objects]#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

问题2:

Checking services...

Error: There are no servicesdefined!

	 Checked 0 services.

处理方法:

[root@nagios-serverobjects]# vi services.cfg 

defineservice {

	 use generic-service

	 host_name 18-client01

	 service_description Disk Partition

	 check_command check_nrpe!check_disk

}

"services.cfg"8L, 138C written

[root@nagios-server objects]# /etc/init.d/nagioscheckconfig


3)问题3
问题3:

Checking services...

Error: Service check command'check_nrpe' specified in service 'Disk Partition' for host '18-client01' notdefined anywhere!

	 Checked 1 services.

处理方法:

[root@nagios-serverobjects]# vi commands.cfg

#'check_nrpe' command definition

definecommand{

	 command_name	 check_nrpe

	 command_line	 $USER1$/check_nrpe -H $HOSTADDRESS$ -c$ARG1$

	 }

4)问题4

打开网页会出现

It appears as though you do not have permission toview information for any of theservices you requested...

解决方法

[root@nagiosserver objects]#cd/usr/local/nagios/etc

[root@nagiosserver objects]#vi cgi.cfg +119

#把在1.6 节建立的用户shnne 加到后面,注意用逗号隔开。

#default_user_name=shnne

authorized_for_system_information=nagiosadmin,shnne

authorized_for_configuration_information=nagiosadmin,shnne

authorized_for_system_commands=nagiosadmin,shnne

authorized_for_all_services=nagiosadmin,shnne

authorized_for_all_hosts=nagiosadmin,shnne

authorized_for_all_service_commands=nagiosadmin,shnne

authorized_for_all_host_commands=nagiosadmin,shnne


记得reload nagios 命令为:/etc/init.d/nagios reload

1.5.1 刷新时间的定义

status_update_interval=3 # 默认10s刷新状态之类的数据
[root@nagios etc]# sed -ri 's/(^status_u.*=).*/\13/g' nagios.cfg
max_service_check_spread=10 # 最大的服务检查间隔
[root@nagios etc]# sed -ri 's/(^max_s.*=).*/\110/g' nagios.cfg
auto_rescheduling_interval=5 # 尝试自动检查的时间间隔
[root@nagios etc]# sed -ri 's/(^auto_rescheduling_i.*=).*/\15/g' nagios.cfg
command_check_interval=-1 # -1的意思是尽可能的经常检查,但这不是我们想要的
[root@nagios etc]# sed -ri 's/(^command_c.*=).*/\12s/g' nagios.cfg # 改为2s
retention_update_interval=10
[root@nagios etc]# sed -ri 's/(^rete.*=).*/\110/g' nagios.cfg
interval_length=10
[root@nagios etc]# sed -ri 's/(^in.*=).*/\110/g' nagios.cfg
service_freshness_check_interval=10
[root@nagios etc]# sed -ri 's/(^service_f.*=).*/\110/g' nagios.cfg
host_freshness_check_interval=10
[root@nagios etc]# sed -ri 's/(^host_f.*=).*/\110/g' nagios.cfg

1.5.2 一些排错的思路

(1) 客户端获取值失败:

[root@client1 ~]# /usr/local/nagios/libexec/check_nrpe -H 10.0.0.2 -c check_disk
CHECK_NRPE: Error - Could not complete SSL handshake. # 握手失败

# 这种问题的解决办法很简单,只需要执行下面这条命令即可:

[root@client1 ~]# /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c check_disk

# 如果能够获得值,那就是没有添加网卡地址,在nrpe.cfg中修改allowed_hosts=127.0.0.1这一行 
(2) 状态为CRITICAL 

{<code>[}EO</code>GAYB~UR{2PXBZ80O.png-4.3kB

# 这种问题就是连接失败,要么是务没起,要么就是防火墙没关。我们可以现在本地执行:

/usr/local/nagios/libexec/check_nrpe -H 10.0.0.2 -c check_disk

# 当然ip和参数都可以改,通过该命令就能得到答案,因为改命令就是Nagios获取监控值的过程 
(3) 命令行执行能够获取数值,但是web界面去获取不到。

define service {
    use                    generic-service
    host_name              02-client1,01-nagios
    service_description    Disk Partition
    check_command          check_nrpe!check_disk # 肯定是这个参数定义错了
}

(4) Unable to read output

1.png-3.7kB

  1. command[check_mem]=/usr/local/nagios/libexec/check_memory.pl -w 6% -c 3% # check_memory.pl就是插件

  2. [root@nagios libexec]# chmod +x check_memory.pl # 执行该命令,如果还是不行,那就是插件本身的问题了

总结,当web界面显示出现问题时: 

(1) Nagios自身和配置文件; 
(2) 在服务器端执行: 
/usr/local/nagios/libexec/check_nrpe -H 被监控主机地址-c 获取值的命令 
(3) 在客户端本地执行: 
/usr/local/nagios/libexec/check_nrpe -H 127.0.0.1 -c获取值的命令 
(4) 执行nrpe.cfg配置文件中的获取值的命令:

command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 8% -p / # 执行该命令

注意:

(1) 检查客户端系统自带的防火强,是否drop了5666端口; 
(2) nrpe添加完命令后,有没有真正重启; 
(3) nrpe.cfg配置文件中的allow_hosts这行的ip千万不要加错了。

1.5.3 添加其他监控项

[root@nagios objects]# cat services.cfg
define service {
    use                    generic-service
    host_name              02-client1,01-nagios
    service_description    Disk Partition
    check_command          check_nrpe!check_disk
}
define service {
    use                    generic-service
    host_name              02-client1,01-nagios
    service_description    Memory Partition
    check_command          check_nrpe!check_mem
}
define service {
    use                    generic-service
    host_name              01-nagios,02-client1
    service_description    load
    check_command          check_nrpe!check_load
}
define service {
    use                    generic-service
    host_name              01-nagios,02-client1
    service_description    swap
    check_command          check_nrpe!check_swap
}
define service {
    use                    generic-service
    host_name              01-nagios,02-client1
    service_description    iostat
    check_command          check_nrpe!check_iostat
}

邮件报警设置

  1. 安装sendmail
    yum install -y sendmail* mailx

  2. 修改防火墙设置,添加25端口到防火墙
    vi /etc/sysconfig/iptables

  3. 重启 iptables、sendmail 服务
    service iptables restart
    service sendmail restart

  4. 测试发邮件功能是否正常

    设置发件人vi /etc/mail.rc, 添加如下设置:

    set from=nagios@163.com smtp=smtp.163.com smtp-auth-user=nagios smtp-auth-password=****** smtp-auth=login
    echo "Nagios Test Email " | mail -s "Alert" nagios@163.com
    此时查看163邮箱是否有收到邮件

  5. 修改vim /usr/local/nagios/etc/nagios.cfg
    enable_notifications=1          //开启后也就是nagios装的所有插件,出现问题都会报警

  6. 修改监控机Nagios设置,vi /usr/local/nagios/etc/objects/contacts.cfg
    define contact 选项卡中,Email修改为自己的邮箱账号
    测试告警邮件是否能正常发送,将check_mem.sh文件临时修改为check_mem.bk, 当监控无法正确执行,即会发送告警邮件。






评论