小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/p_w_upload/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目录下简介

wKioL1YdAAvRLWD-AANuyssVxG8710.jpg

三:添加客户端服务监控客户端  192.168.0.12

1.配置客户端

在客户端机器上 

rpm -ivh http://www.aminglinux.com/bbs/data/p_w_upload/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了,比如想知道客户端机器的负责或磁盘使用情况。

wKioL1YdAN3zteCkAAPgnc-syCo432.jpg

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,这几行就是在服务端上要执行的脚本了,我们可以手动执行这个脚本,即

wKioL1Yc-uXS--yfAAGaTrK6-30133.jpg

我们也可以加一行command[check_sda1]=/usr/lib/nagios/plugins/check_disk -w 20% -c 10% -p /dev/sda1    -w=超过20% warning  -c=超10%critical严重的

wKiom1Yc-sbjEnp0AACGlri3_BI610.jpg

或者把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            1234567@139.com      #发送邮件地址
  }
define contact{
        contact_name           456
        use                    generic-contact
        alias                  aaa
        email                  3435435@139.com
        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 –e       //文件中添加

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;

wKiom1YdAHqD6HLZAAIKRXpR06U416.jpg

检测: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