小Q:有一种孤独,心里真正的画的是一串又一串的省略号;而在外人面前时时为这事标
上句号,其实挺好的,成熟,只是要付出代价;
总结了最近的状况,学的时间更长了,却进度慢了,但学到的多了也更深了;每天控制不住的向了解得更多,即使一直在克制自己,现在不用学太深不用学太深,适当就好。但是这节是有点多了。
=====================================================================================================
一:简介 二:安 装 1.服务端安装 2.nagios目录下简介 3.检测启动 三:添加客户端服务监控 1.服务端安装 2.host文件配置详解 3.添加需要监测的服务简介 4.检测启动 四:配置告警文件 1.配置联系人文件 2.配置监控客户端的文件 五:配置短信告警 1.编写脚本 2.添加到控制commands文件 3.告警配置完也要重启nagios 六:配置图形显示--pnp4nagios 1.修改主配置文件 2.修改控制commands文件 3.修改模块templates文件 4.修改监控客户端的文件 5.检测重启访问测试
一:简介
是一个开源软件,可以监控系统运行状态和网络信息Linux/windows主机状态,甚至可以监控打印机,
而且有自己的存储数据库;
可以运行在Linux上或windows上同时提供浏览器的web界面方便运维人员查看监控项目的状态及日志等
支持自定义脚本实现监控
支持通过手机查看系统监控信息
支持方便地扩展自己服务的检测方法
支持web界面配置管理・邮件・短信通知
Nagios官网 http://www.nagios.org
运行条件:Linux:平台,php:解析,gcc:编译c,Apache:web服务(nginx不支持yum安装)
关于cacti・nagios・zabbix安装方式:
yum在线安装:极力推荐,简单快捷,不易出错;版本低,不能自己制定;
rpm包安装 : 会依赖几十个包,极易出错,想体验一下依赖包的可以试验一下;
源码包安装: 可以实现自定义功能,版本可选;编译时间长,配置稍麻烦;
二:安 装服务端 192.168.0.11
1.服务端安装
Centos6默认的yum源里没有nagios相关的rpm包,我们可以网上找一个epel的扩展源安装:
rpm -ivh http://www.aminglinux.com/bbs/data/attachment/forum/month_1211/e
pel-release-6-7.noarch.rpm
然后安装nagios相关的包
yum install -y httpd nagios nagios-plugins nagios-plugins-all nrpe nagios-plugins-nrpe
设置登录nagios后台的用户和密码:htpasswd -c /etc/nagios/passwd nagiosadmin
vim /etc/nagios/nagios.cfg
nagios -v /etc/nagios/nagios.cfg 检测配置文件
启动服务:service httpd start; service nagios start
浏览器访问: http://ip/nagios
2.nagios目录下简介
三:添加客户端服务监控客户端 192.168.0.12
1.配置客户端
在客户端机器上
rpm -ivh http://www.aminglinux.com/bbs/data/attachment/forum/month_1211/epel-release-6-7.noarch.rpm
yum install -y nagios-plugins nagios-plugins-all nrpe nagios-plugins-nrpe
nrpe是nagios一个扩展,用于被监控的服务器,为监控平台提供本地的情况;
yum install -y httpd
vim /etc/nagios/nrpe.cfg
找到“allowed_hosts=127.0.0.1” 改为 “allowed_hosts=127.0.0.1,192.168.0.11”
后面的ip为服务端ip;
找到”dont_blame_nrpe=0”改为 “dont_blame_nrpe=1” 1表示可以传递函数;
启动客户端 /etc/init.d/nrpe start
/etc/init.d/httpd start
2.host配置文件详解
进入服务端配置文件:cd /etc/nagios/conf.d/
vim 192.168.0.12.cfg #加入: define host{ use linux-server host_name 192.168.0.12 #监控的IP alias 0.12 address 192.168.0.12 } define service{ use generic-service host_name 192.168.0.12 service_description check_ping #监控ping服务 check_command check_ping!100.0,20%!200.0,50% #检查丢包率,0%是ok,20%waring,50%是critical max_check_attempts 5 #每一分钟ping一次 normal_check_interval 1 } define service{ use generic-service host_name 192.168.0.12 service_description check_ssh check_command check_ssh contact_groups 3106 #定义出现问题邮件短信联系的组 max_check_attempts 5 #当nagios检测到问题时,一共尝试检测5 #次都有问题才会告警,如果该数值为1, #那么检测到1次问题就立即告警 normal_check_interval 1 #重新检测间隔,单位是分钟,默认3分钟 notification_interval 60 #在服务出现异常后,故障一直没有解决, #再次对使用者发出通知的时间。单位分 #钟如果你认为,所有的事件只需要一次通 #知就够了,可以把这里的选项设为0 notifications_enabled 1 #是否开启提醒功能。1为开启,0为禁用 #一般,选项会在主配置文件nagios.cfg #中定义,效果相同。 notification_period 24x7 #发送提醒的时间段。非常重要的主机, #我定义为7×24,一般的主机(服务) #就定义为上班时间。如果不在定义的 #时间段内,无论什么问题发生,都不会 #发送提醒。 notification_options:w,u,c,r #这个是service的状态。w为waning, u #为unknown, c为critical严重, r为 # recover恢复了,类似的还有一个host #对应的状态d,u,r d = 状态为DOWN, # u = 状态为UNREACHABLE , r = 状态恢复 # 为OK,需要加入到host的定义配置里。 } define service{ use generic-service host_name 192.168.0.12 service_description check_http check_command check_http max_check_attempts 5 normal_check_interval 1 contact_name teng #出问题联系teng,联系方式是下面有介绍 max_check_attempts 5 normal_check_interval 1 notification_period 8:00-18:00x7 notification_options:w,c,r notifications_enabled 1 }
检测:nagios -v /etc/nagios/nagios.cfg
重启:service httpd restart ; service nagios restart
以上服务不依赖于客户端nrpe服务,我们可以想象,我们在自己电脑上可以使用ping或者telnet探测远程任何一台机器是否存活、是否开启某个端口或服务。 而当我们想要检测客户端上的某个具体服务的情况时,就需要借助于nrpe了,比如想知道客户端机器的负责或磁盘使用情况。
3.添加不能自动检测的服务
以上是本不需要添加的监控服务对象,举例添加需要配置的监控服务
服务端vim /etc/nagios/objects/commands.cfg
增加:define command{ command_name check_nrpe #自定义的与客户端通信的名字 command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ #通过这条命令获得客户机状态 }
继续编辑 vim /etc/nagios/conf.d/192.168.0.12.cfg #增加如下内容:
define service{ use generic-service host_name 192.168.0.12 service_description check_load check_command check_nrpe!check_load max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 192.168.0.12 service_description check_disk_hda1 check_command check_nrpe!check_hda1 max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 192.168.0.12 service_description check_disk_hda2 check_command check_nrpe!check_hda2 max_check_attempts 5 normal_check_interval 1 }
check_nrpe!check_load :这里的check_nrpe就是在commands.cfg刚刚定义的,check_load是远程主机上的一个检测脚本在远程主机上vim /etc/nagios/nrpe.cfg 搜索check_load,这几行就是在服务端上要执行的脚本了,我们可以手动执行这个脚本,即
我们也可以加一行command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1 -w=超过20% warning -c=超10%critical严重的
或者把check_hda1更改一下:/dev/hda1 改为 /dev/sda1,只要服务端的check_command与客户端对应即可;就是说我们可以在客户端自定义想要检测的服务脚本,然后添加在服务端;
4.检测启动
检测:nagios -v /etc/nagios/nagios.cfg
客户端上重启一下nrpe服务: service nrpe restart
服务端也重启一下nagios服务: service nagios restart
查看日志:tail /var/log/nagios/nagios.log
四:配置告警文件
1.配置联系人文件
vim /etc/nagios/objects/contacts.cfg 增加如下:
define contact{ contact_name teng #联系人名字 use generic-contact #联系人属性 alias teng #别名 email [email protected] #发送邮件地址 } define contact{ contact_name 456 use generic-contact alias aaa email [email protected] pager 13931900000,13838143434 #短信通知,下面会有详解,只单独这样配置是没用的 } define contactgroup{ contactgroup_name common # 群组名字 alias common members teng,456 #发警告给这两个人 }
保存退出;
2.配置监控客户端的文件
将联系人或联系人组添加到监控客户端服务文件中(/etc/nagios/conf.d/192.168.0.12.cfg)的define service模块内; 我们对上面的ssh和http服务已经设置了邮件提醒,可以去上面参考;
其实我们还可以对任何服务进行配置,参考上面模块即可;
检测:nagios -v /etc/nagios/nagios.cfg
重启:service nagios restart
五:配置短信告警
正常情况下,没有任何服务器能向手机发送短消息的,要到达这个目的,得花钱购买短信服务,当你付费成功后,短信服务商会给你提供入口及加密关键字;然后我们自己写个脚本就可以发送短信。
首先在上面联系人文件的模块中添加短信提醒方式:pager 手机号
1.编写脚本文件
编写一个短信接口的脚本,可以用shell・perl・python等语言写,网上也有很多,可以调用一下,我是还没有学到,所以copy了一份perl的;
vi /root/duanxin.sh
#!/usr/bin/perl -w use strict; use LWP::Simple; use URI::Escape; use Digest::MD5; my ($mobile, $content) = @ARGV; my $log_control = 1; my $key = 'Ysdbyhd6T'; #短信服务商给的验证关键字 my $souce_content = substr($mobile, 0, 8) . substr($mobile, -10, 10) . $key; my $md5 = Digest::MD5->new; $md5->add($souce_content); my $result_conent = uc($md5->hexdigest); my $url = "http://http.asp.sh.cn/MT.do?Username=sery&Password= ([-BVG'0&Mobile=$mobile&Content=$content&Keyword=$result_conent"; #短信服务商给的用户名、密码以及短信服务商的访问接口(url)全包括在这里了 my $result = get $url; if($log_control) { my $fh; open($fh, '>> /var/log/sms.log') or die "can't open log: $!"; print $fh join(' ', time, $result, "\n"); close $fh; }
来自一个叫田逸老师的博客
更改权限:chmod a+x /root/duanxin.sh
验证:bash /root/duanxin.sh 13800138000 "It is a test" ,
回车后数秒钟,这个手机应该能收到带有“It is a test”的短信;为保证短信的可靠性,
我做了一个策略:每天下午6点定时给我发一个通知短信,成功就可以放心了;
crontab �Ce //文件中添加
00 18 * * * /bin/bash /root/duanxin.sh 13800138000 "It is Ok” 。
2.添加到配置文件中
修改commands.cfg配置文件vim /etc/nagios/objects/commands.cfg
这个文件已经包含了发送邮件报警的部分,因此只需要再把短信报警的部分加上就可以了
# 'notify-host-by-sms' command definition define command{ command_name host-notify-by-sms command_line /root/duanxin.sh $CONTACTPAGER$ "*** $NOTIFICATIONTYPE$ Host Alert: $HOSTNAME$ IP: $HOSTADDRESS$ is $HOSTSTATE$ ***" } # 'notify-service-by-sms' command definition define command{ command_name service-notify-by-sms command_line /root/duanxin.sh $CONTACTPAGER$ "*** $NOTIFICATIONTYPE$ Service Alert: $HOSTNAME$ IP: $HOSTADDRESS$ / $SERVICEDESC$ is $SERVICESTATE$ ***" }
第一个块定义主机报警的内容,即主机发生死机、恢复等情况发送手机短信报警;第二个块定义服务报警内容,Nagios规定,如果探测到被监控的主机停机或不可达,它就不再探测这个停机主机上的服务;
其接受者和发送内容由"***...***"内"$..$"定义的宏来决定;
另外一个需要注意的地方是命令行(command_line)路径一定要用全路径,这里调用的命令就是我们在全面编写的那个脚本duanxin.sh;
检测:nagios -v /etc/nagios/nagios.cfg
重启:service nagios restart
六:配置图形显示--pnp4nagios
我们用的nagios命令简单,但只能输出单调的几种结果,没有绚丽的类似cacti的图形界面;为了解决这个问题,我们可以用PNP插件来实现nagios监控的图形显示。
安装:yum install pnp4nagios rrdtool
1.修改主配置文件
vim /etc/nagios/nagios.cfg //修改如下配置
process_performance_data=1 host_perfdata_command=process-host-perfdata service_perfdata_command=process-service-perfdata enable_environment_macros=1
2.修改控制commands文件
修改commands.cfg
vim /etc/nagios/objects/commands.cfg
//注释掉原有对process-host-perfdata和process-service-perfdata,重新定义 define command { command_name process-service-perfdata command_line /usr/bin/perl /usr/libexec/pnp4nagios/process_perfdata.pl } define command { command_name process-host-perfdata command_line /usr/bin/perl /usr/libexec/pnp4nagios/process_perfdata.pl -d HOSTPERFDATA }
3.修改模块templates文件
vim /etc/nagios/objects/templates.cfg
define host { name hosts-pnp register 0 action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_ process_perf_data 1 } define service { name srv-pnp register 0 action_url /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$ process_perf_data 1 }
???????????????
4.修改监控客户配置
vim /etc/nagios/conf.d/192.168.0.12.cfg 修改对应的service,比如把
define service{ use generic-service host_name 192.168.0.12 service_description check_disk_hda1 check_command check_nrpe!check_hda1 max_check_attempts 5 normal_check_interval 1 } 改为: define service{ use generic-service,srv-pnp host_name 192.168.0.12 service_description check_disk_hda1 check_command check_nrpe!check_hda1 max_check_attempts 5 normal_check_interval 1 }
重启服务:
service nagios restart
service httpd restart
service npcd start
5.浏览器测试
ip/nagios/
ip/pnp4nagios/
好文章:http://www.cnblogs.com/mchina/archive/2013/02/20/2883404.html