Nagios学习笔记之(一)最初搭建
2012-07-17 13:05:08
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
Nagios学习笔记之一最初搭建
一、简介:
Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
二、搭建过程:
OS: | CentOS 5.5 x86_64(最小化即可) |
Nagios主程序: | nagios-cn-3.4.1 |
Nagios插件: | nagios-plugins-1.4.15.tar.gz |
2.1安装前:
2.1.1安装依赖包,下载源程序包
1. #cd /etc/yum.repos.d/
2. #rm -fr ./*
3. #wget wget http://mirrors.163.com/.help/CentOS-Base-163.repo
4. #yum makecache
#删除系统自带的yum源,下载网易的网络源并更新缓存
1. #yum -y install gcc glibc glibc-common gd gd-devel httpd
#安装必须的依赖包
1. #wget http://prdownloads.sourceforge.net/sourceforge/nagios/nagios-3.4.1.tar.gz
2. #wget http://prdownloads.sourceforge.net/sourceforge/nagiosplug/nagios-plugins-1.4.15.tar.gz
#下载nagios主程序以及插件程序
2.1.2正式安装:
1. #groupadd nagcmd
2. #useradd -G nagcmd nagios
3. #usermod -G nagcmd apache
#创建一个用户组名为nagcmd用于从Web接口执行外部命令。将nagios用户和apache用户都加到这个组中。
1. #tar zxf nagios-3.4.1.tar.gz
2. #cd nagios
3. #./configure --prefix=/usr/local/nagios --with-command-group=nagcmd
4. #解压程序包,并进行预编译前的配置(默认用户就是nagios,所以只需指定组)
5. #make all #编译Nagios程序包源码
6. #make install #安装二进制运行程序
7. #make install-init #初始化脚本
8. #make install-config #配置文件样本
9. #make install-commandmode #设置运行目录权限
10. #make install-webconf #安装Nagios的WEB配置文件到Apache的conf.d目录下
#htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin
#创建一个nagiosadmin的用户用于登录Nagios的web界面。
#service httpd restart
#重启apache使服务生效
1. #tar zxf nagios-plugins-1.4.15.tar.gz
2. #cd nagios-plugins-1.4.15
3. #./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
4. #make && make install
5. #编译安装nagios插件
#chkconfig --add nagios
#chkconfig nagios on
#chkconfig httpd on
#添加系统服务并设开机自启
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
#验证配置文件是否正确,如下图则没问题:
#service nagios start
#启动服务
#vim /root/.bashrc
#添加一条:alias check='/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg'
#source /root/.bashrc
#在以后的配置和调试过程中,经常需要检查配置文件,所以加条别名为了方便
#备注:注意防火墙和Selinux(都关了即可)
输入http://IP/nagios,输入前面设置的用户名密码后,如下图即安装成功。
安装后:
问题1:打开http://ip/nagios,输入口令验证后出现“You don't have permission to access /nagios/ on this server”
解决方法:没装php导致,yum -y install php,装好,重启httpd和nagios
问题2:如果提示“Whoops! Error: Could not read object configuration data! ”,这是因为没有启动nagios后台进程,执行以下命令
解决方法:/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
问题3:Nagios显示类似错误:HTTP WARNING: HTTP/1.1 403 Forbidden - 5240 bytes in 0.002 second response time。该错误表明在apache web根目录没有index.html文件。
解决方法:在web根目录(如:/var/www/html/目录)建立index.html文件,重启apache和nagios即可。
问题4:安装nagios-plugins,make时出现如下报错:
make[2]: *** [check_http.o] Error 1
make[2]: Leaving directory `/mnt/nagios-plugins-1.4.13/plugins'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/mnt/nagios-plugins-1.4.13'
make: *** [all] Error 2
解决办法:yum -y install openssl openssl-devel,然后重新执行./configure,再编译安装。
Nagios学习笔记之(二)监控部署
2012-08-02 00:01:38
原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://xtony.blog.51cto.com/3964396/950826
Nagios学习笔记之(二)监控部署
前言:本篇致力于初涉Nagios的同学,老鸟绕行!
前面已经把最基本的Nagios以及插件安装好了,现在只能对本机进行监控,要想监控远程主机,就必须通过类似于NRPE的软件来实现。
监控端和被监控端都要装nrpe,因为靠此来通信,nrpe是通过ssl来通信的,所以比较安全。
用到ssl就得装相关支持的包:yum -y install openssl openssl-devel
现在开始来安装nrpe:
以下操作在监控端进行:
首先把下载下来的nrpe-2.12.tar解压(自行网上下载)
1. #tar zxf nrpe.2.12.tar
2. #cd nrpe-2.12
3. #./configure
4. #make all
5. #make install-plugin
安装完成后会在/usr/local/nagios/libexec/下生成check_nrpe文件
下面定义一个check_nrpe监控命令(默认装好以后没有被nagios调用)
顺带说下监控整体思想:
1.要定义监控的主机或服务
2.执行什么命令来监控
3.出现问题要通知的人
4.采用什么方式通知,邮件|短信 -----后续再细说
修改/usr/local/nagios/etc/commands.cfg(定义命令的文件),添加如下内容:
1. define command {
2. command_name check_nrpe
3. command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
4. }
至此监控端暂时完事。
以下操作在被监控端进行:
需要两个文件:
nagios-plugins-1.4.15.tar (nrpe依赖于这个插件)
nrpe-2.12.tar (远程通信)
首先创建安装用户:
useradd -s /sbin/nologin nagios
解压安装Nagios插件:
1. #tar xzf nagios-plugins-1.4.15.tar.gz
2. #cd nagios-plugins-1.4.15
3. #./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios
4. #make && make install
解压安装nrpe:
1. #tar zxf nrpe.2.12.tar
2. #cd nrpe-2.12
3. #./configure
4. #make all
5. #make install-plugin
6. #make install-daemon
7. #make install-daemon-config
8. #make install-xinetd
安装完毕。
接下来把nrpe交由xinetd来监听(好处:修改nrpe的配置文件不需要重启服务)
vim /etc/xinetd.d/nrpe
将only_from = 后面加上监控端的地址
确保/etc/services有nrpe 5666/tcp #NRPE这一行,没有则添加
重启xinetd服务,至此被监控端配置完毕。
接下来测试下连通性,在监控端执行:
/usr/local/nagios/libexec/check_nrpe -H 被监控端的地址
如能显示 “NRPE v2.12”,表明NRPE可以和被监控端正常通信。
部署前的工作基本OK了。
下面来说说,服务器上具体是怎么部署监控的。
首先来看下Nagios的目录结构
bin #存放执行文件,如nagios,以及后续安装的扩展程序
etc #存放配置文件,如nagios.cfg主配文件,平时部署维护操作最多的文件夹
include #存放引用文件,默认为空
libexec #存放执行命令,如check_load等,里面有很多命令,需要熟练掌握
sbin #存放一些cgi,平时一般不用动
share #存放一些网页文件,平时一般不用动
var #存放一些产生的数据文件,平时一般不用动
比较重要的就是etc和libexec。
下面说下如何定义一台主机以及主机上的服务:
首先修改:/usr/local/nagios/etc/nagios.cfg
去掉cfg_dir=/usr/local/nagios/etc/servers前面的注释
mkdir //usr/local/nagios/etc/servers
将来新建的主机以及服务都可以存放在这下面,建议把主机和服务写在一个配置文件中,按主机来划分,便于管理。
例如:
要监控一台http服务器
可以在servers下面新建一个以cfg结尾的文件
vim simple-http.cfg
1. define host{ #定义一个主机
2. use linux-server #引用etc/objects/templates.cfg中的linux-server配置(后续细说)
3. host_name http #定义一个主机名,并不是http的实际主机名,任意即可,但要继续,后面要调用
4. alias http #定义一个别名
5. address 192.168.1.1 #指定地址
6. }
7. define service{ #定义一个服务
8. use generic-service #引用etc/objects/templates.cfg中的generic-service配置(后续细说)
9. host_name http #引用主机名
10. service_description CPU Load #定义监控服务名,就是在web网页上显示的服务名
11. check_command check_nrpe!check_load #定义要执行的命令:让check_nrpe调用被监控端的check_load命令执行
12. } #以下类似(备注:每条定义的命令都必须在etc/nrpe.cfg中明确定义)
13. define service{
14. use generic-service
15. host_name http
16. service_description Current Users
17. check_command check_nrpe!check_users
18. }
19. define service{
20. use generic-service
21. host_name http
22. service_description Disk Free Space /
23. check_command check_nrpe!check_root
24. }
25. define service{
26. use generic-service
27. host_name http
28. service_description Total Processes
29. check_command check_nrpe!check_total_procs
30. }
31. define service{
32. use generic-service
33. host_name http
34. service_description Zombie Processes
35. check_command check_nrpe!check_zombie_procs
36. }
保存以后,check一下,没问题重载nagios的配置文件
service nagios reload
登录网页后就会看见定义监控的项目了。
后续:配置文件详解
Nagios学习笔记之(三)配置详解
2012-08-09 13:33:29
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
Nagios学习笔记之(三)配置详解
前言:
上篇先实现的监控部署,就是想先搭建起来,有点小成就,现在再来看配置文件中的详解。只有把其中配置文件中的联系都理解清楚了,才能方便日后自己自定义的检测。Nagios的配置文件还是有其鲜明的特点的。
网上也有很多零零闪闪的配置讲解,但大多都不够详解,此篇为自己整理,当然也参考了网络上的信息,有配置的解释还有自己的一些备注,可能还有很多不完善的地方,后续会慢慢补充,希望看的人能看懂,还有就是自己以后能看懂,呵呵。
好了,不多说了,开始!
一、目录层次:
Nagios以及其插件,安装并配置好了以后,目录层次如下:
1. bin #Nagios执行程序所在目录,包括nagios、npc、nrpe等;
2. etc #Nagios配置文件位置,重点;
3. libexec #Nagios插件目录,里面有具体监控的各种插件,重点;
4. sbin #Nagios Cgi文件所在目录,也就是执行外部命令所需文件所在的目录;
5. share #Nagios网页文件所在的目录,也就是web页面给我们展示的文件;
6. include #Nagioscgi文件的外部调用;
7. var #Nagios日志文件、spid 等文件所在的目录。
二、配置文件概览:
Nagios所有的配置文件以cfg为结尾,在默认装好以后会在etc/下生成一些,我们来逐个看下:
1. etc/nagios.cfg #Nagios主配置文件,所有的cfg文件(外部调用除外)必须都在此文件中引用才能生效;
2. etc/resource.cfg #定义$USER1$变量,设置插件路径;
3. etc/nrpe.cfg #定义nrpe检测命令的文件,在command中引用;
4. etc/objects下:
5. commands.cfg #定义命令执行的文件,比如check_tcp、check_local_disk等,由后面定义服务的配置文件来引用;
6. contacts.cfg #定义联系人的文件,比如服务down了通知的对象;
7. localhost.cfg #定义本机的监控条目,默认生成;
8. printer.cfg #定义打印机的文件,默认未启用,在生产环境中意义不大;
9. switch.cfg #定义监控路由器和交换机的配置文件,默认未启用;
10. templates.cfg #定义服务类型的文件,样本文件,比如定义的linux-server就是在此文件中预先定义好;
11. timeperiods.cfg #定义要监控时间段文件,比如24x7,workhours等;
12. windows.cfg #定义监控Windows的文件,默认未启用。
备注:这些文件的名字不是一定的,只要里面的内容正确就可以,Nagios可以自动识别,比如你把commands.cfg和localhost.cfg的文件名互换,都是没有问题的。
三、各配置文件详解:(考虑篇幅,只列举部分)
1.etc/nagios.cfg(主配置文件)
1. log_file=/usr/local/nagios/var/nagios.log
2. # 这个变量用于设定Nagios在何处创建其日志文件。
3. # OBJECT CONFIGURATION FILE(S)
4. # 对象的配置文件
5. # 可以指定单个对象的配置文件, 如下所示:
6. cfg_file=/usr/local/nagios/etc/objects/commands.cfg
7. #定义其命令文件
8. cfg_file=/usr/local/nagios/etc/objects/contacts.cfg
9. #定义联系人文件
10. cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg
11. #定义时间段文件
12. cfg_file=/usr/local/nagios/etc/objects/templates.cfg
13. #定义样本文件
14. cfg_file=/usr/local/nagios/etc/objects/localhost.cfg
15. # 定义监测本地( Linux )主机
16.
17. #cfg_file=/usr/local/nagios/etc/objects/windows.cfg
18. # 定义监测( windows )主机
19.
20. #cfg_file=/usr/local/nagios/etc/objects/switch.cfg
21. # 定义监测路由器或交换机
22.
23. #cfg_file=/usr/local/nagios/etc/objects/printer.cfg
24. # 定义监测打印机
25.
26. # 也可以告诉Nagios处理所有配置文件(带有.cfg扩展名)在特定的目录使用cfg_dir指令如下所示:
27. #cfg_dir=/usr/local/nagios/etc/servers
28. #cfg_dir=/usr/local/nagios/etc/printers
29. #cfg_dir=/usr/local/nagios/etc/switches
30. #cfg_dir=/usr/local/nagios/etc/routers
总结:配置文件里的变量:
日志文件:
格式: log_file=<file_name>
样例: log_file=/usr/local/nagios/var/nagios.log
说明:
这个变量用于设定Nagios在何处创建其日志文件。它应该是你主配置文件里面的第一个变量,当Nagios找到你配置文件并发现配置里有错误时会向该文件中写入错误信息。如果你使能了日志回滚,Nagios将在每小时、每天、每周或每月对日志进行回滚。
对象配置文件:
格式: cfg_file=<file_name>
样例:
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/servers.cfg
cfg_file=/usr/local/nagios/etc/commands.cfg
说明:
该变量用于指定一个包含有将用于Nagios监控对象的对象配置文件。对象配置文件中包括有主机、主机组、联系人、联系人组、服务、命令等等对象的定义。配置信息可以切分为多个文件并且用cfg_file=语句来指向每个待处理的配置文件.
对象配置目录:
格式: cfg_dir=<directory_name>
样例:
cfg_dir=/usr/local/nagios/etc/commands
cfg_dir=/usr/local/nagios/etc/servers
cfg_dir=/usr/local/nagios/etc/hosts
说明:
该变量用于指定一个目录,目录里包含有将用于Nagios监控对象的对象配置文件。所有的在这个目录下的且以.cfg为扩展名的文件将被作为配置文件来处理。另外,Nagios将会递归该目录下的子目录并处理其子目录下的全部配置文件。你可以把配置放入不同的目录并且用cfg_dir=语句来指向每个待处理的目录。
2.etc/objects/commands.cfg(命令配置文件)
1. #定义通知的方式,主机发生故障通知和服务发送故障通知
2. define command{
3. command_name notify-host-by-email
4. command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $H
5. OSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
6. }
7. #定义通知的方式,服务发生故障通知和服务发送故障通知
8. # 'notify-service-by-email' command definition
9. define command{
10. command_name notify-service-by-email
11. command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nS
12. tate: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n" | /bin/mail -s "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SE
13. RVICESTATE$ **" $CONTACTEMAIL$
14. }
15. #定义检测主机是否存活的命令,command_name是最后在服务中的引用名,而它是调用的check_ping命令来实现的
16. define command{
17. command_name check-host-alive
18. command_line $USER1$/check_ping -H $HOSTADDRESS$ -w 3000.0,80% -c 5000.0,100% -p 5
19. }
20. #定义检测主机cpu负载的命令
21. define command{
22. command_name check_local_load
23. command_line $USER1$/check_load -w $ARG1$ -c $ARG2$
24. }
25. #定义检测主机进程的命令
26. define command{
27. command_name check_local_procs
28. command_line $USER1$/check_procs -w $ARG1$ -c $ARG2$ -s $ARG3$
29. }
30. #定义检测主机tcp端口的命令
31. define command{
32. command_name check_tcp
33. command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$ $ARG2$
34. }
总结:
命令配置文件:
格式:
define command{
command_name 命令名
command_line 命令调用的实际插件路径以及阀值
}
样例:
cfg_file=/usr/local/nagios/etc/hosts.cfg
cfg_file=/usr/local/nagios/etc/servers.cfg
cfg_file=/usr/local/nagios/etc/commands.cfg
说明:
该变量用于指定一个包含有将用于Nagios监控命令的配置文件。对象配置文件中包括有命令名以及实际插件路径以及阀值的定义。
3./etc/objects/templates.cfg(样本配置文件)
1. 此定义的为类,也就是日后定义主机或者服务时指定的name引用
2. define service{
3. name generic-service #通过name来指定服务类名,这里的generice-service是一个类名
4. active_checks_enabled 1 #设定启用活动监测服务
5. passive_checks_enabled 1 #设定启用被动监测服务
6. parallelize_check 1 #设定启用并发活动监测服务
7. obsess_over_service 1 #设定启用服务防停滞
8. check_freshness 0 #设定关闭更新监测
9. notifications_enabled 1 #设定启用事件通知
10. event_handler_enabled 1 #设定启用事件处理程序
11. flap_detection_enabled 1 #设定启用状态抖动监测
12. failure_prediction_enabled 1 #设定启用故障预测
13. process_perf_data 1 #设定启用进程性能数据记录
14. retain_status_information 1 #设定启用状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的状态数据。
15. retain_nonstatus_information 1 #设定启用非状态信息保存功能。当Nagios重新启动的时候不会是空数据,而是先显示上次离线时最后保留的非状态数据
16. is_volatile 0 #设定服务非易失
17. check_period 24x7 #设定监控的时间段
18. max_check_attempts 3 #设定监测失败后最多尝试次数
19. normal_check_interval 10 #设定正常监测服务的间隔,单位分
20. retry_check_interval 2 #设定监测失败后尝试的间隔,单位分
21. contact_groups admins #定义通知联系人租
22. notification_options w,u,c,r ,d #设定监测指定服务产生的事件通知的条件选项。这里后面跟上一些级别类型参数:
23. w代表warning告警;
24. u代表unknown未知;
25. c代表critical严重;
26. r代表recover恢复;
27. d代表down奔溃。
28. notification_interval 60 #设定服务通知的间隔
29. notification_period 24x7 #设定服务通知运行时间
30. register 0 #设定register表明本段定义的是一个服务类,而不是具体的服务
31. }
4.etc/objects/localhost.cfg(本机监控文件)
1. define host{ #此定义的为监控主机的配置文件
2. use linux-server #引用类,在templates.cfg中预定义
3. host_name localhost #指定主机名,并不是实际机器的主机名,自己定义,方便以后在定义服务时调用
4. alias localhost #别名
5. address 127.0.0.1 #指定监控主机的地址
6. }
7. define service{ #此定义为监控主机服务的配置文件
8. use local-service #引用类,在templates.cfg中预定义
9. host_name localhost #指定主机名,在host段中预定义
10. service_description PING #监控服务的名称,也就是在web页面上显示的监控项目
11. check_command check_ping!100.0,20%!500.0,60% #具体监控的命令以及阀值
12. }
备注:以上定义的主机和服务,没有指定通知联系人,那是因为在其中引用了类,而templates.cfg中定义的类是有指定联系人的。
5.etc/objects/contacts.cfg(联系人配置文件)
1. define contact{
2. contact_name nagiosadmin #定义联系人的名称,方便以后在监控项目中调用
3. use generic-contact #引用类,在templates.cfg中预定义
4. alias Nagios Admin #别名
5. email test@abc.com #邮件地址
6. }
7. define contactgroup{
8. contactgroup_name admins #定义联系人组的名称,方便一次性发送多人
9. alias Nagios Administrators #别名
10. members nagiosadmin #定义组成员,这里nagiosadmin,也就是上面contact_name的值
11. }
6.etc/objects/timeperiods.cfg(时间段配置文件)
1. define timeperiod{ #定义时间段的配置文件
2. timeperiod_name 24x7 #指定时间段的名称,方便以后在服务里调用
3. alias 24 Hours A Day, 7 Days A Week #别名
4. sunday 00:00-24:00 #具体的时间段定义
5. monday 00:00-24:00 #一周24小时
6. tuesday 00:00-24:00
7. wednesday 00:00-24:00
8. thursday 00:00-24:00
9. friday 00:00-24:00
10. saturday 00:00-24:00
11. }
12. define timeperiod{ #定义时间段的配置文件
13. timeperiod_name workhours #指定时间段的名称,方便以后在服务里调用
14. alias Normal Work Hours #别名
15. monday 09:00-17:00 #具体的时间段定义
16. tuesday 09:00-17:00 #周一到周五的上班时间
17. wednesday 09:00-17:00
18. thursday 09:00-17:00
19. friday 09:00-17:00
20. }
四、总结:
看过了以上配置文件的详解,来总结下监控一台主机和主机上的服务,必要的条件。
1.首先定义其监控主机,其中注意的就是引用的类必须在templates.cfg中预定义(所有未指定的条目,都按照类的定义载入)
2.再就是监控主机中的资源以及服务,指定的name必须在主机配置文件中预定义,还有就是指定的命令必须在command.cfg中预定义
3.还有就是类中定义的联系人或者联系人组必须在contacts.cfg中预定义
4.再有的细节问题,就自己慢慢摸索了、
备注:以上所说的预定义,其实写在任意位置都是可以的,只是为了有条理,日后也方便查找问题。
五、示例:
新建一台监控远程192.168.1.1主机,以及cpu、内存、硬盘使用率、进程数以及僵尸进程的配置文件。
解:vim etc/objects/192..168.1.1.cfg
define host{
use linux-server
host_name test
alias test_1
address 192.168.1.1
}
define service{
use generic-service
host_name test
service_description CPU Load
check_command check_nrpe!check_load
}
define service{
use generic-service
host_name test
service_description Current Users
check_command check_nrpe!check_users
}
define service{
use generic-service
host_name test
service_description Disk Free Space /
check_command check_nrpe!check_root
}
define service{
use generic-service
host_name test
service_description Total Processes
check_command check_nrpe!check_total_procs
}
define service{
use generic-service,services-pnp
host_name Mailbak
service_description Zombie Processes
check_command check_nrpe!check_zombie_procs
}
具体检测的命令都在libexec/下,每条检测命令后面加--help来查看其用法。
定义好后,检查下配置文件,然后重载nagios服务,就可以在web页面上查看了。
记录到此,旨在详解!也为日后方便查看!
Nagios学习笔记之(四)外部扩展
2012-08-13 15:56:12
标签:监控 nagios rrdtool pnp sendEmail
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。
Nagios学习笔记之(四)外部扩展:
前言:上篇说了nagios的配置文件详解,相信都对其中的逻辑关系有了一些了解,其实这就行了,不可能一下子把它100%弄懂,我也是刚懂了60%左右吧,在日后的使用过程中,逐渐熟悉,慢慢消化。。
此篇为nagios安装配置实现以后的一些功能扩展以及技巧,玩监控的应该也知道cacti,没错,cacti以图形见长,那图绘的叫一个美观,羡慕?没事,只要安装些额外的插件,nagios迅速也可以绘出图来,没有cacti那么美观而已,不过看效果够用了,毕竟nagios不是专业看图的。
在这里再说下nagios的常用功能:
1.监控主机资源(处理器负载、磁盘使用情况等)
2.监控网络服务 (SMTP、POP3、HTTP、NNTP、PING 等)
3.在服务或主机产生问题和修复时获得通知(通过邮件、页面或用户定制的方式)
4.可以自定义写脚本来进行灵活的监控(nagios有监控脚本的固定格式)
好了,开始说下nagios安装pnp的过程吧!
一、nagios安装pnp图形插件
1.首先安装必要的软件包:
1. yum -y install php-gd rrdtool-perl rrdtool librrds-perl perl-Time-HiRes
(rrdtool这里采用的是yum直接安装,也可源码安装,但安装过程较繁琐,本人第一次是源码安装,后面全都采用yum装了,看个人爱好)
2.1.下载最新的pnp程序并安装:
1. wget http://cdnetworks-kr-1.dl.sourceforge.net/project/pnp4nagios/PNP-0.6/pnp4nagios-0.6.6.tar.gz
2. tar zxf pnp4nagios-0.6.6.tar.gz
3. cd pnp4nagios-0.6.6.tar.gz
4. ./configure --with-nagios-user=nagios --with-nagios-group=nagcmd #编译前的预配置,nagcmd为你安装nagios时指定的组
5. make all #编译
6. make install #安装
7. make install-webconf #安装web配置文件
8. make install-config #安装样例配置文件
9. make install-init #初始化服务
2.2.初始化配置并重启服务:
cd /usr/local/pnp4nagios/etc
rename .cfg-sample .cfg *.cfg-sample
cd pages
rename .cfg-sample .cfg *.cfg-sample
cd ../check_commands
rename .cfg-sample .cfg *.cfg-sample #意思就是把左右以.cfg-sample的样例文件直接变成.cfg
service npcd restart #最后重启npc服务
3.配置nagios以支持pnp绘图:
3.1.首先就是修改nagios的主配置文件,打开数据传输
vim nagios.cfg
process_performance_data=1 #默认是0,改为1
host_perfdata_command=process-host-perfdata
service_perfdata_command=process-service-perfdata #这两项默认注释,去掉注释即可
3.2.再就是修改nagios的命令配置文件,定义其使用的插件
vim commands.cfg
1. ##添加
2. # 'process-host-perfdata' command definition
3. define command{
4. command_name process-host-perfdata
5. command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl
6. }
7. # 'process-service-perfdata' command definition
8. define command{
9. command_name process-service-perfdata
10. command_line /usr/local/pnp4nagios/libexec/process_perfdata.pl
11. } #把原有的注释,添加即可,也可在其上直接修改
3.3.下面就是配置nagios的样本文件,定义后续要引用的类
vim templates.cfg
1. define host {
2. name hosts-pnp
3. action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=_HOST_
4. register 0
5. }
6. define service {
7. name services-pnp
8. action_url /pnp4nagios/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
9. register 0
10. } #在最后添加即可
4.最后就是在想看到图的主机或者服务的配置文件中引用类
在name那行,本身引用的类后面加上hosts-pnn或者services-pnp,以“,”隔开
示例:
主机类:
1. define host{
2. use linux-server,hosts-pnp #添加至此就ok了
3. host_name mail
4. alias mail
5. address 192.168.1.1
6. }
服务类:
1. define service{
2. use generic-service,services-pnp #添加至此就ok了
3. host_name mail
4. service_description CPU Load
5. check_command check_nrpe!check_load
6. contact_groups mailadm
7. }
最后检查nagios的配置文件,check(第一篇说过),没问题就重载nagios服务。
过一会会在/usr/local/pnp4nagios/var/perfdata/下生成以监控主机的cfg文件名的文件夹,里面会有.rrd和.xml的文件,那些就是收集的数据了。
在网页上的效果如下图:
二、nagios报警邮件技巧
我们在配置nagios邮件报警的时候,会发现是调用本机的sendmail或者postfix,没有的话还得装,最主要的就是有的服务需要smtp认证,这就导致告警邮件有可能被拒收!!!
其实有个小工具可以解决这个棘手的问题:sendEmail
sendEmail简介:
1.采用perl语言编写,小巧灵活
2.绿色软件,不需安装,直接可以执行
3.参数自定义,可多线程发送
4.可被任意程序所调用,方便
好了,介绍完了,那么就来说下怎么用它来实现nagios的报警邮件吧!
1.首先下载其软件:
1. wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.55.tar.gz
2.解压、给与执行权限并改变PATH
1. tar zxf sendEmail-v1.55.tar.gz
2. cd sendEmail-v1.55
3. cp sendEmail /usr/local/bin
4. chmod 755 /usr/local/bin/sendEmail
3.测试是否可以正常发送邮件
其用法如下:
-f 表示发送者的邮箱
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者ip
-u 表示邮件的主题
-xu 表示SMTP验证的用户名
-xp 表示SMTP验证的密码
-m 表示邮件的内容
1. /usr/local/bin/sendEmail –f nagios@test.com –t tony@test.com –s mail.test.com –u “nagios test” –xu nagios –xp abc123 –m test
4.下面是重头戏,怎么让nagios调用其来发送告警邮件
需要修改command.cfg文件,修改notify-host-by-email和notify-service-by-email对应的命令执行路径
示例如下:
1. define command {
2. command_name notify-host-by-email
3. command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\n
4. State: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" | /usr/sbin/sendEmail -f 邮箱名
5. -t $CONTACTEMAIL$ -s 邮件服务器地址 -u "** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ is $HOSTSTATE$ **" -xu smtp认证名 -xp 密码
6. register 1
7. }
8.
9. define command {
10. command_name notify-service-by-email
11. command_line /usr/bin/printf "%b" "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVIC
12. EDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/sbin/sendEmail -f
13. 邮箱名 -t $CONTACTEMAIL$ -s 邮件服务器地址 -u "** $NOTIFICATIONTYPE$ Service Alert: $HOSTALIAS$/$SERVICEDESC$ is $SERVI
14. CESTATE$ **" -xu smtp认证名 -xp 密码
15. register 1
16. }
备注:其实sendEmail是一个十分有用的程序,nagios可以调用,别的程序也可以,这样就不用装sendmail或者posfix浪费服务器资源了,也更方便了。
三、如何定义非默认的检测条目
在我们进行定义监控主机或者服务的时候,可能会遇到这样的问题,就是比如:要监控http服务,check_http默认是检测的80端口,而要监控的主机http不是80端口监听的,那么我们如何来监控呢?
这里要分机器,如果是linux的话,需要修改被监控端的nrpe.cfg配置文件;如果是Windows的话,需要在监控服务的配置文件中更改。
例如:要监控某机器的http服务,监控端口为8080
1.linux机器:
修改被监控端的nrpe.cfg文件
vim nrpe.cfg
command[check_http]=/usr/local/nagios/libexec/check_http -H 127.0.0.1 -p 8080 -w 5 -c 10 -4 (默认可能没有,需要手动添加)
备注:所以定义监控远程主机的命令,都必须在被监控端的nrpe.cfg文件中定义,否则不能监控!
2.windows机器:
直接修改监控端的定义服务的配置文件
例:
define service{
use generic-service
host_name server
service_description HTTP
check_command check_http!
}
假如被监控端http的监控端口不是80,那么nagios就会告警,合理利用--help。
/usr/local/nagios/libexec/check_http --help(贴出其中一部分)
1. Options:
2. -h, --help #显示帮助
3. Print detailed help screen
4. -V, --version #显示版本
5. Print version information
6. -H, --hostname=ADDRESS #指定要监控的主机名
7. Host name argument for servers using host headers (virtual host)
8. Append a port to include it in the header (eg: example.com:5000)
9. -I, --IP-address=ADDRESS #指定要监控主机的ip
10. IP address or name (use numeric address if possible to bypass DNS lookup).
11. -p, --port=INTEGER #指定要监控的端口,默认80
12. Port number (default: 80)
13. -4, --use-ipv4 #使用ipv4协议
14. Use IPv4 connection
15. -6, --use-ipv6 #使用ipv6协议
16. Use IPv6 connection
17. -S, --ssl=VERSION #使用ssl加密,默认端口就是443
18. Connect via SSL. Port defaults to 443. VERSION is optional, and prevents
19. auto-negotiation (1 = TLSv1, 2 = SSLv2, 3 = SSLv3).
20.
21. 所以假如监控的端口不是80的话,比如8080,改成下面:
22. define service{
23. use generic-service
24. host_name server
25. service_description HTTP
26. check_command check_nrpe!check_http -p 8080
27. }
其它监控插件也是类似,只要加上想要的参数,指定值就可以了。
这也是本人在部署的时候大意留下的。。
好了,先到这里,后续会补充。