【nagios简介】 首先我们先知道这个是个什么东西。 Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。(我承认我是从百度百科上拷贝的,不过这个解释的已经很好了。) nagios应用在linux操作系统中,那么基础的linux操作就不再多说。 Nagios的强大主要在于其插件所提供的各种监控功能以及web形式的友好交互,nagios对于linux和windows服务器都可以很好的进行监控,这里主要说明对linux服务器的监控。 【准备工作】 Naigos必须运行在有C语言编辑器的Linux平台上,并且需要一个web服务器(通常来说apache即可)来提供友好的交互界面,否则你监控到的内容只是一堆日志毫无乐趣可言。下面我将按照最小化安装的裸机来进行安装。 我使用的centos5.6版本,用ubuntu的注意版本及配置文件习惯即可 监控主机A地址:192.168.0.10 被监控主机B地址:192.168.0.20 首先下载3个文件: nagios-3.3.1.tar.gz nagios主程序 nagios-plugins-1.4.15.tar.gz nagios插件 nrpe-2.12.tar.gz 监控linux主机所需插件 #yum install –y httpd php gcc* gd* glibc* 安装nagios所需的库,这里为了方便后面操作apache 和php都是yum安装的,如果编译安装的朋友注意下路径即可。 #groupadd nagios 新建一个nagios组 #useradd nagios –g nagios 新建一个nagios用户并将其加入到nagios组中 【安装nagios】
- # tar zxvf nagios-3.3.1.tar.gz
- # cd nagios
- # ./configure --prefix=/usr/local/nagios --with-nagios-user=nagios 最好还是制定目录
- # make all
- # make install
- # make install-commandmode
- # make install-config
- # make install-init
- # make install-webconf
这里nagios的编译不同于其他的软件,需要好几步才能完成,我们来解释一下make这几步的意思 make install 安装主要的程序、CGI、HTML文件等等。 make install-commandmode 赋予外部命令访问nagios配置文件的权限 make install-config 将nagios的配置文件的例子复制到nagios的安装目录下 make install-init 将nagios做成一个运行脚本,放入init.d中,使nagios可以随系统的开机而启动 make install-webconf配置apache的web接口,如果运行出错,是因为你的apache是自己编译安装的 不是yum安装的,webconf生成的文件会放在/etc/httpd/conf.d/下,因为找不到这个目录,所以出错 编译安装完成后: # ls /usr/local/nagios bin etc include libexec share 查看是否有上面的文件,如果有到此nagios就算是安装完了。 那么我们来看看这上面几个目录下的文件都有什么意义。 bin nagios执行程序所在目录,这个目录只有一个文件nagios etc nagios配置文件位置,初始安装完成后,只有几个*.cfg-sample文件 sbin nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录 share nagios网页文件所在的目录 var nagios日志文件、spid等文件所在的目录 nagios的主程序安装完毕后,为了以防万一我们来检查一下/usr/local/nagios的目录权限 如果不是nagios的属主那么要将属主进行修改,否则nagios没有权限来运行。 我们在进行下一步插件的安装 【安装nagios插件】 插件对于nagios来说是非常重要的,插件的版本对于nagios主程序之间的关联并不大 各个版本基本都可以使用。 # tar zxvf nagios-plugins-1.4.15.tar.gz # cd nagios-plugins # ./configure --prefix=/usr/local/nagios nagios-plugins是安装到nagios的主目录下的 # make # make install 安装完成后/usr/local/nagios生成目录libexec,这就是nagios所需要的插件 检查工作: 再次检查nagios主目录的属主,一定要是nagios,不能是root 如果属主不正确 #chown -R nagios.nagios /usr/local/nagios nagios的用户不需要登录shell 所以如果为了安全 vi /etc/passwd nagios :500:500::/home/nagios:/bin/bash 修改为: nagios :500:500::/home/nagios:/bin/nologin 那么nagios用户则不能够登录shell 【配置apache】 yum 装的apache本身不需要太多的配置,在nagios的编译过程中的make install-webconf就是在/etc/httpd/conf.d/下生成nagios.conf的配置文件。会自动帮你配置apache的nagios部分。 #vi /etc/httpd/conf/httpd.conf 修改apache的运行用户为nagios user nagios group nagios 在末尾加上apache的nagios部分
- ScriptAlias /nagios/cgi-bin "/usr/local/nagios/sbin"
- <Directory "/usr/local/nagios/sbin">
- # SSLRequireSSL
- Options ExecCGI
- AllowOverride None
- Order allow,deny
- Allow from all
- # Order deny,allow
- # Deny from all
- # Allow from 127.0.0.1
- AuthName "Nagios Access"
- AuthType Basic
- AuthUserFile /usr/local/nagios/etc/htpasswd.users
- Require valid-user
- </Directory>
- Alias /nagios "/usr/local/nagios/share"
- <Directory "/usr/local/nagios/share">
- # SSLRequireSSL
- Options None
- AllowOverride None
- Order allow,deny
- Allow from all
- # Order deny,allow
- # Deny from all
- # Allow from 127.0.0.1
- AuthName "Nagios Access"
上面文本的作用是对nagios的目录进行用户验证,只有合法的授权用户才可以访问nagios的页面文件 生成用户验证文件 # htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin 命令交互执行需要输入2次密码,然后会再/usr/local/nagios/etc/htpasswd.users中写入一行字段是 刚才生成的用户名和密码 如需添加更多用户执行命令中去掉-c即可,否则会覆盖所有已经生成的行 配置完成后执行/usr/sbin/httpd -t 来验证apache 的配置文件压法 这里的httpd路径根据自己具体的路径来执行 #service httpd restart 在浏览器中输入nagios的访问地址: http://local/nagios 在登录框中输入你刚才设置的nagios用户和密码 到此我们的nagios服务器就已经搭建好了,但是现在还没有检测任何的主机也没有任何的信息,我们现在要做的就是来看一看nagios服务器到底需要怎么用。 【配置nagios】 好了 这里是我们的最重的重点了,我们来详细的分析一下nagios的配置文件。 首先来看一下nagios的etc目录下的配置文件有哪些
- -rw-rw-r-- 1 nagios nagios 11408 12-07 12:57 cgi.cfg
- -rw-r--r-- 1 nagios nagios 26 11-01 17:36 htpasswd.users
- -rw-rw-r-- 1 nagios nagios 43775 12-07 12:19 nagios.cfg
- drwxrwxr-x 2 nagios nagios 4096 12-07 14:44 objects
- -rw-rw---- 1 nagios nagios 1340 11-01 17:35 resource.cfg
PS: 如果是nagios2.6版本以前,etc下的文件名都是cgi.cfg-sample类型, 改名为cgi.cfg即可,2.6以后版本都不需要修改配置文件名 由于我的nagios是最新的版本这里会有一个objects的目录,那么来看一下目录下有哪些文件 commands.cfg 定义了各项功能命令及说明 localhost.cfg 监控的主机配置文件 printer.cfg 监控打印配置文件 templates.cfg 这里会给你提供一些配置文件的模板供参考 windows.cfg 监控windows主机的配置文件 contacts.cfg 定义联系人的文件 switch.cfg 这个基本不用,是一个假定您使用的示例配置文件得到安装Nagios的快速入门指南。 timeperiods.cfg 监视时段配置文件 这里的object不同于老版本将一些对具体监控的配置放置在了统一的object目录下,以方便管理。 # /usr/local/nagios/bin/nagios -v /usr/local/nagos/etc/nagios.cfg 来验证程序能否正常运行 # vi /usr/local/nagios/etc/localhost.cfg 把下面的几行注释去掉 cfg_file=/usr/local/nagios/etc/objects/contactgroups.cfg //联系组配置文件路径 cfg_file=/usr/local/nagios/etc/objects/contacts.cfg //联系人配置文件路径 cfg_file=/usr/local/nagios/etc/objects/hostgroups.cfg //主机组配置文件路径 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/timeperiods.cfg //监视时段配置文件路径 将check_external_command=0修改为1 作用是允许执行web界面下重启nagios,停止主机/服务检查鞥操作 cgi.cfg文件 控制相关的cgi脚本 #vi /usr/local/nagios/etc/cgi.cfg 确保use_authentication=1 其中的各项authorized_for_都是定义登录的用户权限 全部设置为nagiosadmin即可,也可设置你自己htpasswd生成设置的用户名 【安装nrpe】
- # tar zxvf nrpe-2.12.tar.gz
- # cd nrpe
- # .configure
- # make all
- # make install-plugin
commands.cfg定义外部构建nrpe
- # vi /usr/local/nagios/etc/objects/commands.cfg
- #check nrpe
- define command{
- command_name check_nrpe
- command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
- }
设置要监控的Linux主机 vi /usr/local/nagios/etc/nagios.cfg cfg_file=/usr/local/nagios/etc/objects/localhost.cfg 设置localhost.cfg内容 vi /usr/loca/nagios/etc/objects/locaohost.cfg address 修改为被监控的IP 其他设置:
- chkconfig --add nagios 配置开机启动
- chkconfig nagios on
- /usr/loacal/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg 检查nagios配置文件
- vi /etc/selinux/config 关闭SELINUX
- SELINUX=disabled
- service iotables stop
- serivce nagios start
【配置被监控端】 一、安装nagios-plugin
- # useradd nagios
- # tar zxvf nagios-plugins-1.4.15.tar.gz
- # cd nagios-plugins
- # ./configure --with-nagios-user=nagios --with-nagios-group=nagios --enable-redhat-pthread-workaround
- # make
- # make install
- chown -R nagios.nagios /usr/local/nagios
二、安装被监控端nrpe
- # tar zxvf nrpe-2.12.tar.gz
- # cd nrpe
- # .configure
- # make all
- # make install-plugin
- # make install-daemon
- # make install-daemon-config
- 配置nrpe
- vi /usr/local/nagios/etc/nrpe.cfg
- allowed_hosts=192.168.0.1,127.0.0.1
启动nrpe /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d 也可讲其写入到/etc/rc.d/rc.local中开机运行 验证nrpe
- # netstat -anpl |grep 5666
- tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN 11750/nrpe
- # /usr/local/nagios/libexec/check_nrpe -H 127.0.0.1
- NRPE v2.12
然后服务端测试 /usr/local/nagios/libexec/check_nrpe -H 被监控机IP NRPE v2.12 配置监控对象(重要)
- # vi /usr/local/nagios/etc/nrpe.cfg
- 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_swap]=/usr/local/nagios/libexec/check_swap -w 20% -c 10%
这一步是关键,如果nagios服务器想要监控客户机swap分区,但客户机nrpe.cfg文件 没有swap监控对像,这时监控服务器就是报错(NRPE command ‘check_swap’no defined). 平时自己写脚本,也是主要配这个地方 至此就可以监控linux客户机的disk,swap,users,memory了 那么到了这里还不够,如果我们需要邮件报警或者短信报警的功能那么就要进行更加负责的操作 【邮件报警】 我们首先看一下邮件报警的功能事怎么定义的:
- vi /usr/local/nagios/etc/objects/commands.cfg
- #'notify-host-by-email' command definition
- define command{
- command_name notify-host-by-email
- command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotific
- ation Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddre
- ss: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bi
- n/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **"
- $CONTACTEMAIL$
- }
- # 'notify-service-by-email' command definition
- define command{
- command_name notify-service-by-email
- command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotific
- ation Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$
- \nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME
- $\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIO
- NTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONT
- ACTEMAIL$
- }
这里定义了host和server两个模块的email发送方式, 可以看到nagios默认的是使用linux系统自带的/bin/mail 来发送邮件的, 这里nagios已经帮我们配置好了,不出意外的话不需要进行太多修改。但是如果你需要用sendmail的话,可以自己修改命令。
- 下面来看看联系人的配置文件
- vim /usr/local/nagios/etc/objects/contacts.cfg
定义一个发送邮件的地址和选项
- define contact{
- contact_name nagiosadmin //定义联系人的名字
- use generic-contact //这个名字是默认的,没有进行修改 做修改
- alias Nagios Admin //别名
- service_notification_period 24x7 //服务出现状况通知的时间段,这个时间段是objects中的timeperiod.cfg中定义的
- host_notification_period 24x7 //主机出现状况通知的时间段,这个时间段同样是timeperiod.cfg中定义的
- service_notification_options w,u,c,r //当服务器出现w(warning),u(unkown),c(critical),或者r(恢复)这几种情况下通知联系人
- host_notification_options d,u,r //与service差不多,d的意思是down
- service_notification_commands notify-service-by-email // 定义服务出现问题,使用命令notify-service-by-email通知
- host_notification_commands notify-host-by-email //主机出现问题使用notify-host-by-email 通知
- email xxx@xx.com //通知人的邮件地址
- }
这里顺便也讲contact组也定义了 如下:
- define contactgroup{
- contactgroup_name admins
- alias Nagios Administrators
- members nagiosadmin
- }
下面来看监控主机的配置文件,我这里的配置文件为localhost.cfg 你可以选择起任何的名字,只需要在nagios.cfg中重新定义即可。
- vi /usr/local/nagios/etc/objects/localhost.cfg
定义主机如下:
- define host{
- host_name linux-20 //为被监控的主机起个名字
- alias linux20 //起个别名
- address 192.168.0.20 //IP地址
- contact_groups admins //联系人的组,在contacts.cfg中定义
- check_command check-host-alive //检查主机状态的命令,commands.cfg中定义
- check_period 24x7 //检查的时间段24*7,来自timeperiod.cfg中定义的
- max_check_attempts 3 //检查失败后的重试次数
- notification_interval 10 //提醒的间隔,单位是分钟
- notification_period 24x7 //提醒周期,来自timeperiod.cfg中定义
- notification_options d,u,r //报警的选项
- }
主机检查命令行一般选择检查主机存活check-host-alive 最大尝试次数最好不要设置为“1”,一般来说3-4次比较合理,否则你的邮箱估计会爆掉 顺便将host组也定义下
- define hostgroup{
- hostgroup_name linux-servers
- alias Linux Servers
- members linux-20 //可以在此添加linux主机,以逗号分离
- }
下面来编辑service 的配置还是在localhost.cfg下,以Ping和apache服务为例子
- define service {
- host_name linux-20 #被监控的主机,hosts.cfg中定义的
- service_description PING #定义的是监控这个主机是不是存活,描述是PING
- check_period 24x7 #监控的时间段,是timeperiods.cfg中定义的
- notification_interval 10 #重复发送提醒信息的最短间隔时间。默认间隔时间是
- "60"分钟。如果这个值设置为 "0" ,将不会发送重复提醒
- normal_check_interval 3 #检查间隔3分钟
- max_check_attempts 3 #最大重试次数,重新检查3次 3次都失败就报警
- retry_check_interval 2 #重试检查间隔时间2分钟
- check_command check_ping!100.0,20%!500.0,60% #使用ping来做健康检查
- contact_groups admins #联系人组,是contactgroups.cfg中定义的
- }
- define service {
- host_name linux-20
- max_check_attempts 5
- check_period 24x7
- notification_interval 10
- normal_check_interval 1
- retry_check_interval 1
- service_description HTTP
- check_command check_http
- notification_period 24x7
- notification_options w,u,c,r
- contact_groups admins
- }
- 主机名 host_name,必须是主机配置文件hosts.cfg中定义的主机。检查用的命令check_command,在命令配置文件中定义或在nrpe配置文件中有定义。最大重试次数max_check_attempts 一般设置为3-4次比较好,这样不会因为网络闪断片刻而发生误报。检查间隔和重试检查间隔的单位是分钟。通知间隔指探测到故障以后,每隔多少时间发送一次报警信息。 它的单位是分钟。通知选项跟服务定义配置文件相同。联系组contact_groups由配置文件contactgroup.cfg定义。最后我们检查下配置文件是否正确/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfgservice nagios restart 通过破坏测试,看看你能不能收到邮件吧。PS:关于收不到邮件有很多可能1.本地mail命令没有权限给nagios用或者mail本身就无法使用2.本地防火墙阻止3.commands.cfg中的mail功能定义错误4.你定义的收件邮箱阻止了nagios的邮件想查看你的邮件到底有没有发送出去,还是要看/var/log/maillog的日志吧一般来说配置的过程中会出现很多问题 多用/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg验证,多查看各个日志是能找到关键性的错误点的,祝大家好运。