Nagios监控平台搭建

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

Nagios和cacti有什么区别呢?简单的来说cacti主要监控流量,服务器状态页面展示;nagios主要监控服务,邮件及短信报警灯,当然也有简单的流量监控界面,二者综合使用效果更好。(附Nagios工作简单逻辑图)

Nagios监控客户端需要借助插件及NRPE软件来实现,NRPE作为中间的代理程序,接收Nagios服务器端发来的请求,另一端在远程主机上指定的相关的监控信息。

1)     Nagios服务端安装

同样安装nagios服务需要安装LAMP环境,这里省略,可以参考之前的cacti PHP环境安装方法:官网下载nagios相应版本和插件:

wget http://sourceforge.net/projects/nagios/files/nagios-3.x/nagios-3.2.1/nagios-3.2.1.tar.gz/download

http://sourceforge.net/projects/nagios-cn/files/latest/download

http://down1.chinaunix.net/distfiles/nagios-plugins-1.4.14.tar.gz

http://nchc.dl.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.14/nrpe-2.14.tar.gz

/usr/sbin/useradd nagios

tar zxvf nagios-3.2.1.tar.gz

cd nagios-3.2.1

./configure  --prefix=/usr/local/nagios  --with-command-group=nagios

make all

make install //来安装主程序,CGI和HTML文件

make install-init //在/etc/rc.d/init.d安装启动脚本

make install-config //来安装示例配置文件,安装的路径是/usr/local/nagios/etc

make install-commandmode //来配置目录权限

make install-webconf // 配置nagios跟apache整合

make install ;make install-init;make install-config;make install-commandmode ;make install-webconf

2)     安装Nagios-plugins

tar zxvf nagios-plugins-1.4.14.tar.gz

cd nagios-plugins-1.4.14

./configure --prefix=/usr/local/nagios --with-nagios-user=nagios --with-nagios-group=nagios

make && make install

3)     nagios访问控制设置

htpasswd  -c  /usr/local/nagios/etc/htpasswd.users nagiosadmin

输入两次密码即可,登录页面的时候会用到这个密码.

4)     Nagios测试访问

重启nagios ,/etc/init.d/nagios restart ;/etc/init.d/httpd restart ;

http://localhost/nagios/ 如下图:

点击左侧的Hosts可以看到右侧默认localhost主机的监控,UP表示主机目前运行正常:

1)     Nagios案例配置

默认安装完nagios,配置文件主目录在/usr/local/nagios/下,目录各种的功能如下:

bin

Nagios 可执行程序所在目录

etc

Nagios 配置文件所在目录

sbin

Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

share

Nagios网页文件所在的目录

libexec

Nagios 外部插件所在目录

var

Nagios 日志文件、lock 等文件所在的目录

var/archives

Nagios 日志自动归档目录

var/rw

用来存放外部命令文件的目录

这里先来了解etc/objects目录主要包括监控主机的配置、模板、监控时间段等配置文件。

简单来添加一个客户端监控的步骤:

Cp   localhost.cfg  192.168.33.10.cfg

把默认配置文件里面的locahost、127.0.0.1、check_local替换成最新

sed -i 's#localhost#192.168.33.10#g;s#127.0.0.1#192.168.33.10#g;s#check_local#check#g;s#linux-servers#192.168.33.10#g ' 192.168.33.10.cfg

在nagios.cfg 36行后加入cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.cfg

sed -i '36a cfg_file=/usr/local/nagios/etc/objects/192.168.33.10.cfg' /usr/local/nagios/etc/nagios.cfg

最后执行: /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg没有报错即可。

默认有报错,因为没有在客户端安装nagios插件及NRPE,需删掉配置文件里disk、swap、process、user、cpu等监控配置段:

define service{

        use                             local-service        

        host_name                       192.168.33.10

        service_description             Swap Usage

        check_command                   check_swap!20!10

        }

这里注意* 如果没有配置check_nrpe监控,默认不能监控客户端例如swap、disk、CPU、process等状态,需要在配置文件里删除或者注释掉。

如下是刚刚添加的默认的客户端监控图:

3.1. 1      配置文件详解

安装路径/usr/local/nagios/下存在etc、bin、sbin、share、var 这五个目录。Nagios 各个目录用途说明如下:

bin    Nagios 可执行程序所在目录

etc   Nagios 配置文件所在目录

sbin  Nagios CGI 文件所在目录,也就是执行外部命令所需文件所在的目录

share        Nagios网页文件所在的目录

libexec      Nagios 外部插件所在目录

var   Nagios 日志文件、lock 等文件所在的目录

var/archives     Nagios 日志自动归档目录

var/rw      用来存放外部命令文件的目录

ls /usr/local/nagios/etc/objects/

commands.cfg contacts.cfg  localhost.cfg  printer.cfg switch.cfg  templates.cfg  timeperiods.cfg  windows.cfg

每个文件或目录含义如下表所示:

文件名或目录名     用途

cgi.cfg           控制CGI访问的配置文件

nagios.cfg         Nagios 主配置文件

resource.cfg    变量定义文件,又称为资源文件,在些文件中定义变量,以便由其他配置文件引用,如$USER1$

objects     objects 是一个目录,在此目录下有很多配置文件模板,用于定义Nagios 对象

objects/commands.cfg    命令定义配置文件,其中定义的命令可以被其他配置文件引用

objects/contacts.cfg        定义联系人和联系人组的配置文件

objects/localhost.cfg       定义监控本地主机的配置文件

objects/printer.cfg  定义监控打印机的一个配置文件模板,默认没有启用此文件

objects/switch.cfg   定义监控路由器的一个配置文件模板,默认没有启用此文件

objects/templates.cfg     定义主机和服务的一个模板配置文件,可以在其他配置文件中引用

objects/timeperiods.cfg  定义Nagios 监控时间段的配置文件

objects/windows.cfg        监控Windows 主机的一个配置文件模板,默认没有启用此文件。

我们要成功配置出一台nagios监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系。

最重要的有四点:

第一:定义监控哪些主机、主机组、服务和服务组;

第二:定义这个监控要用什么命令实现;

第三:定义监控的时间段;

第四:定义主机或服务出现问题时要通知的联系人和联系人组。

nagios.cfg内容详解:

log_file=/usr/local/nagios/var/nagios.log                  # 定义nagios日志文件的路径 

cfg_file=/usr/local/nagios/etc/objects/commands.cfg        # “cfg_file”变量用来引用对象配置文件,如果有更多的对象配置文件,在这里依次添加即可。 

cfg_file=/usr/local/nagios/etc/objects/contacts.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 

cfg_file=/usr/local/nagios/etc/objects/templates.cfg 

cfg_file=/usr/local/nagios/etc/objects/localhost.cfg       # 本机配置文件 

cfg_file=/usr/local/nagios/etc/objects/windows.cfg         # windows 主机配置文件 

object_cache_file=/usr/local/nagios/var/objects.cache      # 该变量用于指定一个“所有对象配置文件”的副本文件,或者叫对象缓冲文件 

precached_object_file=/usr/local/nagios/var/objects.precache 

resource_file=/usr/local/nagios/etc/resource.cfg           # 该变量用于指定nagios资源文件的路径,可以在nagios.cfg中定义多个资源文件。 

status_file=/usr/local/nagios/var/status.dat               # 该变量用于定义一个状态文件,此文件用于保存nagios的当前状态、注释和宕机信息等。 

status_update_interval=10                                  # 该变量用于定义状态文件(即status.dat)的更新时间间隔,单位是秒,最小更新间隔是1秒。 

nagios_user=nagios                                         # 该变量指定了Nagios进程使用哪个用户运行。 

nagios_group=nagios                                        # 该变量用于指定Nagios使用哪个用户组运行。 

check_external_commands=1                                  # 该变量用于设置是否允许nagios在web监控界面运行cgi命令; 

                                                           # 也就是是否允许nagios在web界面下执行重启nagios、停止主机/服务检查等操作; 

                                                           # “1”为运行,“0”为不允许。 

command_check_interval=10s                                 # 该变量用于设置nagios对外部命令检测的时间间隔,如果指定了一个数字加一个"s"(如10s); 

                                                           # 那么外部检测命令的间隔是这个数值以秒为单位的时间间隔; 

                                                           # 如果没有用"s",那么外部检测命令的间隔是以这个数值的“时间单位”的时间间隔。 

interval_length=60                                         # 该变量指定了nagios的时间单位,默认值是60秒,也就是1分钟; 

# 即在nagios配置中所有的时间单位都是分钟。

timeperiods.cfg文件详解:

define contact{ 

        name                            generic-contact    ; 联系人名称 

        service_notification_period     24x7               ; 当服务出现异常时,发送通知的时间段,这个时间段"24x7"在timeperiods.cfg文件中定义 

        host_notification_period        24x7               ; 当主机出现异常时,发送通知的时间段,这个时间段"24x7"在timeperiods.cfg文件中定义 

        service_notification_options    w,u,c,r            ; 这个定义的是“通知可以被发出的情况”。w即warn,表示警告状态,u即unknown,表示不明状态; 

                                                           ; c即criticle,表示紧急状态,r即recover,表示恢复状态; 

                                                           ; 也就是在服务出现警告状态、未知状态、紧急状态和重新恢复状态时都发送通知给使用者。 

        host_notification_options       d,u,r                   ; 定义主机在什么状态下需要发送通知给使用者,d即down,表示宕机状态; 

                                                                ; u即unreachable,表示不可到达状态,r即recovery,表示重新恢复状态。 

        service_notification_commands   notify-service-by-email ; 服务故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 

                                                                ; 其中“notify-service-by-email”在commands.cfg文件中定义。 

        host_notification_commands      notify-host-by-email    ; 主机故障时,发送通知的方式,可以是邮件和短信,这里发送的方式是邮件; 

                                                                ; 其中“notify-host-by-email”在commands.cfg文件中定义。  

        register                        0                    ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL CONTACT, JUST A TEMPLATE! 

        } 

define host{ 

        name                            generic-host    ; 主机名称,这里的主机名,并不是直接对应到真正机器的主机名; 

                                                        ; 乃是对应到在主机配置文件里所设定的主机名。 

        notifications_enabled           1               ; Host notifications are enabled 

        event_handler_enabled           1               ; Host event handler is enabled 

        flap_detection_enabled          1               ; Flap detection is enabled 

        failure_prediction_enabled      1               ; Failure prediction is enabled 

        process_perf_data               1               ; 其值可以为0或1,其作用为是否启用Nagios的数据输出功能; 

                                                        ; 如果将此项赋值为1,那么Nagios就会将收集的数据写入某个文件中,以备提取。 

        retain_status_information       1               ; Retain status information across program restarts 

        retain_nonstatus_information    1               ; Retain non-status information across program restarts 

        notification_period             24x7            ; 指定“发送通知”的时间段,也就是可以在什么时候发送通知给使用者。 

        register                        0               ; DONT REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE! 

        }

1)      Nagios客户端插件安装

Nagios客户端安装需要安装两个软件,nagios-plugins-1.4.14.tar.gz和nrpe-2.14.tar.gz,安装方法如下:

useradd nagios ;tar -xzf  nagios-plugins-1.4.14.tar.gz &&cd nagios-plugins-1.4.14 &&./configure –prefix=/usr/local/nagios &&make &&make install

tar -xzf nrpe-2.14.tar.gz && cd nrpe-2.14 &&./configure --enable-ssl --with-ssl-lib &&make all && make install-plugin && make install-daemon && make install-daemon-config

chown -R nagios:nagios /usr/local/nagios/ ;cd .. ;cp nrpe.cfg /usr/local/nagios/etc/nrpe.cfg

启动nrpe客户端命令:/usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d

2)     Nrpe客户端配置

修改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_disk]=/usr/local/nagios/libexec/check_disk -w 20 -c 10 -p /dev/sda2

command[check_procs]=/usr/local/nagios/libexec/check_procs -w 50 -c 100

command[check_swap]=/usr/local/nagios/libexec/check_swap -w 20 -c 10

3)     Nagios服务器Nrpe配置

Nagios 服务器端也需要安装nrpe,同时需要定义Nrpe监控命令,写command.cfg末尾即可:

define command{

     command_name check_nrpe

      command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$

  }

4)     Nagios监控端客户机配置

在192.168.33.10.cfg加入如下配置段,引用客户端nrpe.cfg里面配置的check_load命令,命令一般格式为:check_nrpe!command

define service{

        use                              local-service     

        host_name                        192.168.33.10

        service_description               Current Load

        check_command                   check_nrpe!check_load

        }

其他同理,添加的方法一样。只要在客户端nrpe.cfg里面添加的监控命令,都可以在服务端引用。

监控客户端5个步骤:

 1、在服务器端和客户端都安装nrpe,在客户端安装nagios-plugins

2、在客户端定义监控的具体项目,修改allow允许的ip(服务器的ip)

3、分别启动客户端、服务器nrpe。

4、在服务器端commands.cfg中定义check_nrpe命令:

define command{

        command_name    check_nrpe

        command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$       

        }

5、在服务器端对应IP的配置文件中,加入需要监控的项目:

define service{

        use                             local-service         ; Name of service template to use

        host_name                       192.168.1.12

        service_description                 Sda1_Monitor

        check_command                   check_nrpe!check_u

        notifications_enabled             1

        }

1)     Nagios监控端HTTP关键词

在真实的线上环境中,如果要监控HTTP、web、tomcat某个URL关键词,监控网站关键词是否被篡改,如果来实现呢?

      这里可以使用默认监控命令check_http命令+相关的参数来实现,如下:

在command.cfg添加如下关键词监控命令:check_http_word,参数解析:-I指定IP或者主机名,-u指定URL,-p指定端口,-s指定关键词。

define command{

        command_name    check_http_word

        command_line    $USER1$/check_http -I $HOSTADDRESS$ -u $ARG1$ -p $ARG2$ -s $ARG3$

        }

然后在服务器端监控主机的配置文件里面引用即可,引用的方法如下:

也可以在服务器端命令行执行如下命令来做测试,例如监控页面不存在ATM关键词,但82端口web服务可以访问,依然会发送报警。

/usr/local/nagios/libexec/check_http -I 192.168.33.11 -u /index.html -p 82 -s "ATM"

如上截图表示,关键词ATM不存在,则nagios在监控页面上会显示CRITICAL紧急。

1)      Nagios监控Mysql主从报警

监控Mysql可以用个nagios mysql插件,首先在command.cfg中定义如下配置:

define command{

        command_name   check_mysql_slave

        command_line  $USER1$/check_mysql -H $HOSTADDRESS$ -S -uroot -p123456

 }

然后在主机配置文件中定义监控项目:

define service{

        use                             local-service        

        host_name                       localhost

        service_description             MYSQL_Slave_Monitor

        check_command               check_mysql_slave

}

配置完毕后,监控界面如下图:

1)     Nagios邮件及短信报警

使用nagios报警,以前可以用飞信发送报警,但是自从飞信更改接口后,就不方便了,那我们要发短信报警怎么办呢,我们可以139邮箱,机制是nagios给139邮箱发送信息,然后信息会自动发到我们绑定的手机。提前在139上绑定好手机即可。除此之外还可以使用短信猫(收费)设备来发送报警。

默认command.cfg里面已经配置好了邮件报警设置,可以使用默认的配置,使用系统默认的mail发送邮件;还可以自己定义发送的内容格式及发送的邮件smtp服务器端软件。

这里使用默认的配置文件,要能收到短信报警,除了在139.com界面绑定139邮箱之外,还需要在nagios服务器端配置文件修改邮件收件人如下:

修改配置文件:

vi /usr/local/nagios/etc/objects/contacts.cfg内容如下:

同样也可以使用sed命令修改:cd  /usr/local/nagios/etc/objects/ ;

sed  -i  's#nagios@localhost#wgkgood@139.com#g'  contacts.cfg

 如上配置完毕后,重启nagios服务,可以测试关闭某个服务,过一会就会收到nagios发来的报警邮件。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菩提树下的杨过

docker学习(4) 一些常用操作

继续docker的学习之旅,今天练习一些常用的命令: 一、镜像相关 1.1 列出本机所有镜像 docker images ? 后面的操作,都以ubuntu做为练...

2327
来自专栏大闲人柴毛毛

Linux系统服务——Daemon

什么是Daemon? Daemon是Linux的一些系统服务,它们是一些常驻内存的进程。 Daemon分类 Daemon拥有两种分类方式,按照“daemon是...

2944
来自专栏haley的分享

Ubuntu16.04安装PowerNSX (install PowerNSX on ubuntu16.04)

curl https://packages.microsoft.com/keys/microsoft.asc > MS.key

681
来自专栏FreeBuf

挖矿恶意程序纪实分析之 Windows 篇

近期接到客户反馈,其网络中有部分 Windows 系统终端机器异常,安全团队经过分析,发现其仍旧是一起网络挖矿事件。

953
来自专栏云知识学习

Windows Server 2008 用户管理

”用户”是计算机的使用者在计算机系统中的身份映射,不同的用户身份拥有不同的权限,每个用户包含一个名称和一个密码;

33912
来自专栏Python、Flask、Django

Elasticsearch 集成到项目中记录(现阶段已完成)

1192
来自专栏北京马哥教育

lamp平台 php解析器基于模块和php-fpm

首先,我先介绍一下实验环境: http服务器:192.168.236.128(php解析器基于modules) mysql服务器:192.168.236.129...

2708
来自专栏北京马哥教育

大家好,我给大家介绍一下,这是我的Linux故障排查思路

国庆和中秋放假回来后,相信或多或少你的Linux服务器都会遇到一些问题,为了帮助大家回来后在遇到问题时找到合适的解题思路,特地给大家找到了一个Linux运维工程...

2523
来自专栏小狼的世界

20个Linux服务器安全强化建议(二)

当我们使用 useradd、usermod 命令创建或维护用户账号时,确保始终应用强密码策略。例如,一个好的密码至少包括8个字符,包含了字母、数字以及特殊字符串...

1213
来自专栏FreeBuf

搭建开源入侵检测系统Snort,并实现与防火墙联动

之前做入侵检测与防火墙联动时,发现这方面资料较少,研究成功后拿出来和大家分享一下。 Snort作为一款优秀的开源主机入侵检测系统,在windows和Linux平...

3535

扫码关注云+社区