第1章 nagios监控工具介绍及原理
1.1nagios监控工具介绍与优势
Nagios是一款开源的网络及服务的监控工具,其功能强大,灵活性强。能有效监控Window,Linux和Unix的主机各种状态信息,交换机、路由器等网络设置,主机端口及URL服务等。根据不同业务故障界别发出告警信息给管理员,当故障恢复时也会发出恢复消息。
Nagios服务端可以在linux和类unix的系统上运行,目前无法再windows上运行。
官方网站地址:http://www.nagios.org/
官方快速安装说明:http://nagios.sourceforge.net/docs/3_0/quickstart-fedora.html
Nagios的特点:
01)监控网络服务(SMTP、POP3、HTTP、TCP、PING等);
02)监控主机资源(CPU、负载、IP状况,虚拟及正式内存及磁盘利用率等);
03)简单的插件设计模式使得用户可以方便定制符合自己的服务的检测方法;
04)并行服务检查机制;
05)几倍定义网络分层结构的能力,用“parent”主机定义来表达网络主机间的关系,这种关系可被用来发现和明晰主机宕机或不可达状态;
06)当服务或主机问题产生于解决时将告警发送给联系人(mail/im/sms/sound);
07)具备定义时间句柄功能,它可以在主机或服务的时间发生时获取更多问题定位;
08)自动的日志回滚;
09)可以支持并实现对主机的冗余监控;
10)可选的WEB界面用于查看当前的网络状态、通知和故障历史、日志文件等。
1.2Nagios监控系统家族成员构成
Nagios监控一般由一个主程序(Nagios)、一个插件程序(Nagios-plugin)和一些可选的附加程序(NRPE、NSClient++、NSCA、和NDOUtils等)。
Nagios本身就是一个监控的平台而已,其具体的监控工作都是通过插件(也可以自己编写)来实现的,因此,Nagios主程序和Nagios-plugins插件都是Nagios服务端必须要安装的程序组件,Nagios-plugins一般也要安装于被监控端。几个附加程序的描述如下:
1、NRPE:
位置:此软件工作于被监控端,一般为linux/unix系统
用途:用于在被监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控。
2、NSClient++:
位置:此软件工作于windows系统的被监控端
作用:用于监控Window主机时安装在Windows主机上的组件,功能相当于linux下的NRPE。
3、NDOUtils:(不推荐用)
位置:此软件工作于服务器端
作用:用于将Nagios的配置信息和各event产生的数据存入数据库以实现对这些数据的检索和处理。
4、NSCA
位置:此软件需要同时安装在nagios服务器端和客户端
作用:用于被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(在分布式监控集群模式中会用到)
第2章 Nagios服务端安装
2.1 nagios准备部分
2.1.1 服务器规划表
Nagios服务器端 |
一台 |
监控服务器 |
NFS客户端 |
两台 |
被监控的服务端 |
说明:总共需要2台服务器完成本次搭建 |
2.1.2 主机IP规划表
服务器说明 |
IP地址 |
主机名称规则 |
Nagios服务器端 |
172.16.1.61/24 |
m01 |
Nagios客户端 |
172.16.1.31/24 |
nfs01 |
Nagios客户端 |
172.16.1.8/24 |
web01 |
2.1.3 主机名解析
172.16.1.61 m01
172.16.1.31 nfs01
172.16.1.8 web01
2.2 安装环境
2.2.1 系统版本
[ro[email protected] ~]# cat /etc/redhat-release CentOS release 6.5 (Final) [[email protected] ~]# uname -r 2.6.32-431.el6.x86_64 [[email protected] ~]# uname -m x86_64
2.2.2 NFS软件版本
2.3 服务端安装
2.3.1解决perl编译问题(均需要)
后面编译的软件有perl程序,这里要提前设置下环境变量(不修改安装PNP时会报错)
echo ‘export LC_ALL=C‘ >> /etc/profile tail -1 /etc/profile source /etc/profile echo $LC_ALL cd ~
2.3.2系统优化项(均需要)
关闭防火墙
/etc/init.d/iptables stop chkconfig iptables off
关闭selinux
setenforce 0 sed -i ‘s#SELINUX=enforcing#SELINUX=disabled#g‘/etc/selinux/config
时间同步
/usr/sbin/ntpdate pool.ntp.org echo ‘*/10 * * * * /usr/sbin/ntpdate pool.ntp.org &>/dev/null‘>> /var/spool/cron/root crontab -l
2.3.3安装nagios所需基础软件包
yum -y install gcc glibc glibc-common yum -y install gd gd-devel yum -y install mysql* yum -y install httpd php php-gd yum -y install openssl-devel
2.3.4创建nagios需要的用户及组
/usr/sbin/useradd -s /sbin/nologin nagios groupadd nagcmd /usr/sbin/usermod -a -G nagcmd nagios /usr/sbin/usermod -a -G nagcmd apache #<==yum安装自动创建apache,否则手动创建 id -n -G nagios id -n -G apache
2.3.5软件包下载地址
http://sourceforge.net/projects/nagios/files
2.3.6安装nagios
tar -zxvf nagios-3.2.1.tar.gz cd nagios-3.2.1 ./configure --with-command-group=nagcmd make all make install make install-init make install-commandmode make install-config
2.3.7安装nagios web配置文件及创建登录用户
安装nagios web配置文件
cd /usr/local/src/nagios-3.2.1 make install-webconf
创建nagios登录用户
[[email protected] nagios-3.2.1]# htpasswd -c/usr/local/nagios/etc/htpasswd.users oldboy New password: Re-type new password: Adding password for user oldboy [[email protected] nagios-3.2.1]# cat/usr/local/nagios/etc/htpasswd.users oldboy:mNNaAzgat77Sw
注:可使用htpasswd -bc /usr/local/nagios/etc/htpasswd.users oldboy 123456 不用交互式输入密码
2.3.8邮件报警地址修改
vim /usr/local/nagios/etc/objects/contacts.cfg +35行,修改如下:
email **********@qq.com
快速修改:
sed -i ‘s#[email protected]#**********@qq.com#g‘/usr/local/nagios/etc/cgi.cfg
开启邮件服务:
yum -y install sendmail /etc/init.d/sendmail start #<==如果启动慢,修改hosts的127.0.0.1对应主机 lsof -i :25 chkconfig sendmail --level 3 on
2.3.9启动apache服务
/etc/init.d/httpd start netstat -lntup |grep 80 echo ‘/etc/init.d/httpd start‘ >>/etc/rc.local
2.3.10安装服务端插件
cd /usr/local/src tar -zxvf nagios-plugins-2.2.1.tar.gz cd nagios-plugins-2.2.1 ./configure --with-nagios-user=nagios--with-nagios-group=nagios --enable-perl-moudles make #<==此编译遇到make:*** [all] Error 2, configure后加--with-mysql=/usr/local/mysql echo $? cd .. ls /usr/local/nagios/libexec/ | wc -l
2.3.11添加nagios服务开机自启动
chkconfig nagios --level 3 on echo ‘/etc/init.d/nagios start‘>> /etc/rc.local /etc/init.d/nagios checkconfig #<==可改/etc/init.d/nagios+177,去掉>/dev/null,打印输出 /usr/local/nagios/bin/nagios -v/usr/local/nagios/etc/nagios.cfg /etc/init.d/nagios start ps -ef |grep nagios
2.3.12安装NRPE
cd /usr/local/src tar -zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure make all make install-plugin make install-daemon make install-daemon-config cd .. ls -l /usr/local/nagios/libexec/check_nrpe
第3章 客户端安装
和nagios服务端相比,nagios客户端不需要安装如下内容:
1、nagios客户端无需安装lamp环境
2、客户端无需安装nagios包
3.1客户端添加用户
/usr/sbin/adduser -s /sbin/nologin -M nagios id nagios
3.2安装客户端插件
cd /usr/local/src tar -zxvf nagios-plugins-2.2.1.tar.gz cd nagios-plugins-2.2.1 ./configure --with-nagios-user=nagios --with-nagios-group=nagios--enable-perl-moudles make make install ls /usr/local/nagios/libexec/ | wc -l 55
3.3安装客户端NRPE
cd /usr/local/src tar -zxvf nrpe-2.12.tar.gz cd nrpe-2.12 ./configure make all make install-plugin make install-daemon make install-daemon-config cd .. ls -l /usr/local/nagios/libexec/check_nrpe
3.4配置nrpe.cfg
cd /usr/local/nagios/etc/ cp nrpe.cfg{,.ori}
修改文件的第79行为nagios监控服务器,如果有多台,那么用逗号隔开。
sed -i‘s#allowed_hosts=127.0.0.1#allowed_hosts=172.16.1.61#g‘ nrpe.cfg allowed_hosts=127.0.0.1 #<79行 allowed_hosts=172.16.1.61
修改配置文件的199-203行:
原:
command[check_users]=/usr/local/nagios/libexec/check_users-w 5 -c 10 command[check_load]=/usr/local/nagios/libexec/check_load-w 15,10,5 -c 30,25,20 command[check_hda1]=/usr/local/nagios/libexec/check_disk-w 20% -c 10% -p /dev/hda1 command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs-w 5 -c 10 -s Z command[check_total_procs]=/usr/local/nagios/libexec/check_procs-w 150 -c 200
修改后:
command[check_load]=/usr/local/nagios/libexec/check_load-w 15,10,5 -c 30,25,20 command[check_mem]=/usr/local/nagios/libexec/check_memory.pl-f -w 10% -c 3% command[check_disk]=/usr/local/nagios/libexec/check_disk-w 15% -c 7% -p / command[check_swap]=/usr/local/nagios/libexec/check_swap-w 20% -c 10% command[check_users]=/usr/local/nagios/libexec/check_users-w 5 -c 10
注意:以上均为对负载,内存,硬盘,缓存,用户的监控,这些都是本地的服务(我们一般通过nrpe去客户端执行脚本插件获取信息),这样的模式称为被动模式,由nagios服务器端通过nrpe插件定时去client的nrpe服务定期获取信息。
3.5启动NRPE
/usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d echo ‘#naigos nrpe process cmd by liutao at2017-11-14‘ >> /etc/rc.local echo ‘/usr/local/nagios/bin/nrpe -c/usr/local/nagios/etc/nrpe.cfg -d‘ >> /etc/rc.local tail -2 /etc/rc.local
检查启动结果
ps -ef |grep nrpe lsof -i :5666
第4章 配置服务器端
4.1nsgios主要配置文件说明
4.1.1nagios目录
[[email protected] ~]# ll /usr/local/nagios/ total 28 drwxrwxr-x 2 nagios nagios 4096 Nov 12 23:53 bin drwxrwxr-x 3 nagios nagios 4096 Nov 12 23:53 etc drwxr-xr-x 2 root root 4096 Nov 12 23:23 include drwxrwxr-x 2 nagios nagios 4096 Nov 12 23:53 libexec drwxrwxr-x 2 nagios nagios 4096 Nov 12 22:46 sbin drwxrwxr-x 10 nagios nagios 4096 Nov 12 23:23share drwxrwxr-x 5 nagios nagios 4096 Nov 14 10:33 var
4.1.2主配置文件nagios.cfg
nagios主配置文件为nagios.cfg,默认在/usr/local/nagios/etc/目录下。/usr/local/nagios/etc目录下有个objects目录,里面放的是主配置文件nagios.cfg包含的其他的nagios配置文件。
[[email protected] etc]# tree . ├── cgi.cfg ├── htpasswd.users ├── nagios.cfg ├── nrpe.cfg ├── objects │ ├──commands.cfg │ ├──contacts.cfg │ ├── localhost.cfg │ ├──printer.cfg │ ├──services.cfg │ ├──switch.cfg │ ├──templates.cfg │ ├──timeperiods.cfg │ └──windows.cfg └── resource.cfg
4.1.3多个配置文件
在nagios.cfg中,既可以指定单独包含一个cfg文件,也可以指定包含一个目录,即该目录下所有的cfg文件都会包含进来。
为了目录结构看起来更清晰和批量部署服务的需要,我们把主配置文件包含的配置文件修改如下:
配置文件名称 |
说明 |
commands.cfg |
存放命令相关配置(也可以执行commands目录) |
services.cfg |
存放服务的相关配置(默认不存在) |
hosts.cfg |
存放主机相关配置(默认不存在) |
contacts.cfg |
存放报警联系人相关配置 |
timeperiods.cfg |
存放报警周期时间等相关配置 |
templates.cfg |
模板配置文件 |
4.2配置前准备
4.2.1备份初始配置文件
cd /usr/local/nagios/ tar zcvf etc.tar.gz ./etc/
4.2.2配置nagios.cfg
vim nagios.cfg +34 增加如下两行
cfg_file=/usr/local/nagios/etc/objects/hosts.cfg cfg_file=/usr/local/nagios/etc/objects/services.cfg
注释如下一行:
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
4.2.3增加配置文件
hosts.cfg
cd /usr/local/nagios/etc/objects head -51 localhost.cfg > hosts.cfg chown -R nagios.nagios hosts.cfg
services.cfg
cd /usr/local/nagios/etc/objects touch services.cfg chown -R nagios.nagios services.cfg
4.3nagios的监控模式定义
按照监控的行为来看,可以吧Nagios的监控分为主动监控和被动监控。
主动监控:把对于像URL监控这样的一般由服务器端发出请求主动探测就可以得到数据的监控方式,定义为主动监控方式,也就是说不需要在客户端安装任何插件。当然,主动模式也可以配置成为被动模式。
被动监控:把对负载,内存,硬盘,虚拟内存,磁盘IP等的监控,这些都是本地的资源,非系统对外提供的服务,这种资源的监控是由nagios服务端通过nrpe插件定时去连接client的nrpe服务,然后定期获取信息发回到服务端。这样的监控模式称之为被动监控。
如何选择主动模式和被动模式?
1)对于本地资源性能等的监控,一般用被动模式,例如:对负载,内存,硬盘,虚拟内存,磁盘IO等的监控;
2)对于WEB服务这种能对外提供服务的监控,一般用主动模式,例如:http,ssh,mysql等的服务;
4.4hosts.cfg配置
添加主机和主机组
define host{ use linux-server host_name web01 alias web01 address 172.16.1.8 } define host{ use linux-server host_name nfs01 alias nfs01 address 172.16.1.31 } define hostgroup{ hostgroup_name linux-servers alias Linux Servers members web01,nfs01 }
4.5services.cfg配置
配置services.cfg
define service { use generic-service host_name web01,nfs01 service_description DiskPartition check_command check_nrpe!check_disk max_check_attempts 8 normal_check_interval 3 retry_check_interval 2 check_period 24x7 notification_interval 3 notification_period 24x7 notification_options w,u,c,r contact_groups admins process_perf_data 1 }
4.6check_nrpe!check_disk的说明
check_nrpe
是在配置文件/usr/local/nagios/etc/objects/commands.cfg里面定义的,默认不存在,需要自己定义。与其类似的还有check_tcp、check_http等。
check_disk
check_disk是在配置文件/usr/local/nagios/etc/nrpe.cfg里面定义的,定义如下:
command[check_disk]=/usr/local/nagios/libexec/ check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
注意:红色标记的check_disk其实是插件名
4.7commands.cfg配置
services.cfg配置完成之后,使用/etc/init.d/nagios chkconfig检查,会有报错,因为check_nrpe未定义,需要在commads文件里定义
在文件末尾填入如下内容
#‘check_nrpe‘ command definition define command{ command_name check_nrpe command_line $USER1$/check_nrpe-H $HOSTADDRESS$ -c $ARG1$ }
检查/etc/init.d/nagioschkconfig,未报错
平滑重启nagios服务端
/etc/init.d/nagios reload
4.8cgi.cfg配置
配置访问nagios用户的权限,共有7处:
cd /usr/local/nagios/etc vim cgi.cfg +119 authorized_for_system_information=nagiosadmin #<==默认配置(7处) :g/nagiosadmin/s//oldboy authorized_for_system_information=oldboy
4.9手动检测
通过如下命令,可以检测插件和nrpe命令是否可用。
/usr/local/nagios/libexec/check_nrpe-H 172.16.1.8 -c check_disk DISK OK - free space: / 15033 MB (88.26%inode=94%);| /=1999MB;15252;16687;0;17944
第5章 主动模式监控
5.1端口监控(rsync:873)
使用插件
/usr/local/nagios/libexec/check_tcp /usr/local/nagios/libexec/check_tcp -H 172.16.1.8-p 5666
配置监控
cd /usr/local/nagios/etc/objects/services cat rsync.cfg define service { use generic-service host_name web01,nfs01 service_description RSYNC_873 check_command check_tcp!873 }
5.2ping服务
使用插件
/usr/local/nagios/libexec/check_ping
配置监控
define service { use generic-service host_name web01,nfs01 service_description PING check_command check_ping!100.0,20%!500.0,60% }
5.3检测URL
使用插件
/usr/local/nagios/libexec/check_http /usr/local/nagios/libexec/check_http -H172.16.1.8 define service { use generic-service host_name web01 service_description check_url check_command check_http!-H 172.16.1.8 }
第6章 图形显示
pnp出图软件官方站点为:http://www.pnp4nagios.org
6.1安装依赖软件
软件:libart_lgpl-2.3.17.tar.gz,rrdtool-1.2.14.tar.gz
yum安装基础pnp软件需要的包
yum -y install cairo pango zlib zlib-develfreetype freetype-devel gd gd-devel
编译安装rrdtool依赖包libart
wget http://ftp.gnome.org/pub/gnome/sources/libart_lgpl/2.3/libart_lgpl-2.3.17.tar.gz cd /usr/local/src tar -zxvf libart_lgpl-2.3.17.tar.gz cd libart_lgpl-2.3.17 ./configure make make install
后面容易报错,还是直接yum安装吧!!
yum -y install libart_lgpl-devel yum -y install perl-ExtUtils-CBuilder perl-ExtUtils-MakeMaker #<==后面perl编译有问题再安装
编译安装rrdtools
wget http://oss.oetiker.ch/rrdtool/pub/rrdtool-1.2.14.tar.gz cd /usr/local/src tar -zxvf rrdtool-1.2.14.tar.gz cd rrdtool-1.2.14 ./configure --prefix=/usr/local/rrdtool--disable-python --disable-tcl make make install ls /usr/local/rrdtool/bin/
6.2安装出图软件pnp-0.4.14
软件:pnp-0.4.14.tar.gz
下载:
wget http://downloads.sourceforge.net/project/pnp4nagios/PNP/pnp-0.4.14/pnp-0.4.14.tar.gz--no-check-certificate cd /usr/local/src tar -zxvf pnp-0.4.14.tar.gz cd pnp-0.4.14 ./configure --with-rrdtool=/usr/local/rrdtool/bin/rrdtool --with-perfdata-dir=/usr/local/nagios/share/perfdata make all make install make install-config make install-init ll /usr/local/nagios/libexec/ | grep process
6.3出图的相关配置
配置nagios.cfg文件
vim /usr/local/nagios/etc/nagios.cfg +833 process_performance_data=1 #<==0改1 host_perfdata_command=process-host-perfdata #<==取消注释 service_perfdata_command=process-service-perfdata#<==取消注释
配置comnmand.cfg文件
vim /usr/local/nagios/etc/objects/commands.cfg+225,替换原来的配置如下
删除如下:
define command{ command_name process-host-perfdata command_line /usr/bin/printf"%b""$LASTHOSTCHECK$\t$HOSTNAME$\t$HOSTSTATE$\t$HOSTATTEMPT$\t$HOSTSTATETYPE$\t$HOSTEXECUTIONTIME$\t$HOSTOUTPUT$\t$HOSTPERFDATA$\n">> /usr/local/nagios/var/host-perfdata.out } # ‘process-service-perfdata‘ command definition define command{ command_name process-service-perfdata command_line /usr/bin/printf"%b" "$LASTSERVICECHECK$\t$HOSTNAME$\t$SERVICEDESC$\t$SERVICESTATE$\t$SERVICEATTEMPT$\t$SERVICESTATETYPE$\t$SERVICEEXECUTIONTIME$\t$SERVICELATENCY$\t$SERVICEOUTPUT$\t$SERVICEPERFDATA$\n">> /usr/local/nagios/var/service-perfdata.out }
替换结果
# ‘process-host-perfdata‘ command definition define command{ command_name process-host-perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl } # ‘process-service-perfdata‘ command definition define command{ command_name process-service-perfdata command_line /usr/local/nagios/libexec/process_perfdata.pl } /etc/init.d/nagios checkconfig /etc/init.d/nagios reload
6.4出图地址整合
****/nagios/pnp/index.php
是否出图的参数:
process_perf_data 1 #<==1表示出图,模板或服务里加
6.4.1配置服务记录抓取数据
服务出图记录数据设置
vi services.cfg process_perf_data 1 #<==1表示出图,模板或服务里加
主机里面也需要配置
vim /usr/local/nagios/etc/objects/hosts.cfg #<==linux-server
在模板配置文件里面的linux-server里面加如下内容:
process_perf_data 1
6.4.2配置主机出图
vim /usr/local/nagios/etc/objects/hosts.cfg
在host主机配置里增加如下配置(或者模板)
action_url /nagios/pnp/index.php?host=$HOSTNAME$
6.4.3配置服务出图
在服务的配置模板里面增加如下内容:
action_url /nagios/pnp/index.php?host=$HOSTNAME$&serv=$SERVICEDESC$