Nagios

学习目标和内容

  1. 能够理解监控的作用
  2. 能够实现Nagios的安装和配置
  3. 能够实现单机本地监控
  4. 能够实现远程监控

监控介绍

监控的必要性

无论从事运维行业处于哪一个阶段 , 监控都是最重要的核心工作内容之⼀,说监控是运维的第一核心也不过分,因为系统的稳定运行决定了运维的最高价值,而监控是保证系统稳定的第一步 。

如果真的把监控做到100%到位了,什么样的问题都能即时的发现并预警

常见的监控软件

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

zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix server与可选组件zabbix agent。

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。

Nagios介绍

概述

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

  Nagios原名为NetSaint,由Ethan Galstad开发并维护至今。NAGIOS是一

个缩写形式: "Nagios Ain't Gonna Insist On Sainthood" Sainthood 翻译为圣徒,而"Agios"是"saint"的希腊表示方法。Nagios被开发在Linux下使用,但在Unix下也工作得非常好。

主要功能

网络服务监控(SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)

主机资源监控(CPU load、disk usage、system logs),也包括Windows主机(使用NSClient++ plugin)

可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)

可以通过配置Nagios远程执行插件远程执行脚本

远程监控支持SSH或SSL加通道方式进行监控

简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell、C++、Perl、ruby、Python、PHP、C#等)

包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)可并行服务检查

能够定义网络主机的层次,允许逐级检查,就是从父主机开始向下检查

当服务或主机出现问题时发出通告,可通过email, pageduty, sms 或任意用户自定义的plugin进行通知

能够自定义事件处理机制重新激活出问题的服务或主机自动日志循环

支持冗余监控包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等

监控流程

Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

  启动Nagios后,它会周期性自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列,Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

  Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。

每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。

Nagios可以识别4种状态返回信息,即

0(OK)表示状态正常/绿色
1(WARNING)表示出现警告/黄色
2(CRITICAL)表示出现非常严重的错误/红色
3(UNKNOWN)表示未知错误/深黄色

Nagios根据插件返回来的值,来判断监控

对象的状态,并通过web显示出来,以供管理理员及时发现故障。

软件组成

NSCA : Nagios Service Check Acceptor

NDOUtils:从一个或多个Nagios实例导出当前和历史数据到Mysql数据库

Nagios 通过NRPE 来远端管理服务

  1. Nagios 执行安装在它里面的check_nrpe 插件,并告诉check_nrpe 去检测哪些服务。
  2. 通过SSL,check_nrpe 连接远端机子上的NRPE daemon
  3. NRPE 运行本地的各种插件去检测本地的服务和状态(check_disk····)
  4. 最后,NRPE把检测的结果传给主机端的check_nrpe,check_nrpe 再把结果送到Nagios状态队列中
  5. Nagios 依次读取队列中的信息,再把结果显示出来

监控案列实现

基本安装描述

监控服务器 Nagios-Server(server) Apache php Nagios-core Nagios-plugins

目标服务器 Nagios-Linux(client) Nagios-plugins nrpe

Server 安装了nagios软件,对监控的数据做处理,并且提供web界面查看和管理。当然也可以对本机自身的信息进行监控。

Client 安装了NRPE等客户端,根据监控机的请求执行监控,然后将结果回传给监控机

监控主机端安装

可以通过虚拟机的添加硬件光驱的方式,挂载多个光盘,在yum光盘源的配置中使用多个

地址。

Tip:同时使用多个光盘

linux下光盘的挂载使用,注意要提前先创建对应挂载目录,挂载点目录要预先存在

移除base源地址,开启media源

在主机使用前,应该配置好ntp、FQDN、关闭防火墙(iptables、selinux)

shell > yum install wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp unzip openssl-devel

#添加nagios相关权限用户

shell > useradd nagios

shell > groupadd nagcmd

shell > usermod -a -G nagcmd nagios

shell > usermod -a -G nagios,nagcmd apache

#编译安装nagios-core和plugins

shell > tar xvf nagios-4.4.2.tar.gz

shell > tar xvf nagios-plugins-2.2.1.tar.gz

shell > cd nagios-4.4.2/

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

shell > make all

shell > make install

shell > make install-init

shell > make install-config

shell > make install-commandmode

shell > make install-webconf

#外部插件所在目录

shell > cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/

shell > chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers/

shell > /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

shell > service nagios start

shell > service httpd start

#设置web界面密码

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

编译插件

shell > cd ../nagios-plugins-2.2.1/

shell > ./configure --with-nagios-user=nagios --with-nagios-group=nagios

shell > make && make install

插件文档地址:http://nagios-plugins.org/doc/man/index.html

配置文件介绍

Nagios 主要用于监控一台或者多台本地主机及远程的各种信息,包括本机资源及对外的服务等。默认的Nagios 配置没有任何监控内容,仅是⼀些模板文件。若要让Nagios提供服务,就必须修改配置文件,增加要监控的主机和服务。

配置文件目录:

①/usr/local/nagios/etc

②/usr/local/nagios/etc/objects

cgi.cfg文件 默认不修改

此文件用来控制相关cgi脚本,如果想在nagios的web监控界面执行cgi脚本,例如重启nagios进程、关闭nagios通知、停止nagios主机检测等,这时就需要配置cgi.cfg文件了

nagios.cfg文件 改一点

nagios.cfg默认的路径为/usr/local/nagios/etc/nagios.cfg,是nagios的核心配置文件,所有的对象配置文件都必须在这个文件中进行定义才能发挥其作用,这里只需将对象配置文件在Nagios.cfg文件中进行引用即可。

resource.cfg 文件 默认不修改

resource.cfg是nagios的变量量定义文件

其中,变量量$USER1$指定了安装nagios插件的路径,如果把插件安装在了其它路

径,只需在这里进行修改即可。需要注意的是,变量必须先定义,然后才能在其它配置文件中进行引用。

/usr/local/nagios/etc/objects下

timeperiods.cfg文件

此文件只要用于定义监控的时间段。

contacts.cfg文件

contacts.cfg是一个定义联系人和联系人组的配置文件,当监控的主机或者服务出现故障,nagios会通过指定的通知方式(邮件或者短信)将信息发给这里指定的联系人或者使用者。文件中引用generic-contact的属性信息,其中“generic-contact”在templates.cfg文件中进行定义

commands.cfg文件

此文件默认是存在的,无需修改即可使用,当然如果有新的命令需要加入时,在此文件进行添加即可。

hosts.cfg文件

此文件默认不存在,需要手动创建,hosts.cfg主要用来指定被监控的主机地址以及相关属性信息

services.cfg文件

此文件默认也不存在,需要手动创建,services.cfg文件主要用于定义监控的服务

和主机资源,例如监控http服务、ftp服务、主机磁盘空间、主机系统负载等等。

配置实现

①定义主机配置文件

shell> vim objects/hosts.cfg

②定义服务检查文件

shell > vim objects/services.cfg

③在主配置文件引入新的配置文件

④检测配置文件语法,并重启nagios服务

shell > /usr/local/nagios/bin/nagios -v

/usr/local/nagios/etc/nagios.cfg

shell > service nagios restart

⑤查看添加的主机效果

简单监控流程图示

监控远程主机公共资源

以上操作已经对于主机是否存活进行了检测。但是实际情况中需要更多的细项的服务检测。满足实际业务可用稳定性检测。例如:ftp,ssh,http,mysql等对外公开的服务。

shell > vim /usr/local/nagios/etc/objects/services.cfg

shell > /usr/local/nagios/bin/nagios -v

/usr/local/nagios/etc/nagios.cfg

shell > service nagios restart

Tip:增加新的被监控的主机

①在hosts.cfg定义新主机,注意分组

②在services.cfg给新被监控的主机添加监控项(服务)

配置修改之后,注意检查语法问题和重启生效

shell > service nagios checkconfig

shell > service nagios restart

监控远程主机私有资源

利用NRPE监控远程Linux上的“本地信息”

对于像磁盘容量,cpu负载这样的“本地信息”,Nagios只能监测自己所在的主机,而对其他的机器器则显得有点无能为力。毕竟没得到被控主机的适当权限是不可能得到这些信息的。为了解决这个问题,nagios有这样一个附加组件NRPE,用它就可以完成对Linux 类型主机"本地信息”的监控。

NRPE 工作原理

NRPE 总共由两部分组成:

check_nrpe 插件,位于监控主机上

NRPE daemon,运行在远程的Linux主机上(通常就是被监控机)

当Nagios 需要监控某个远程Linux 主机的服务或者资源情况时:

  1. Nagios 会运行check_nrpe 这个插件,告诉它要检查什么;
  2. check_nrpe 插件会连接到远程的NRPE daemon,所用的方式是SSL;
  3. NRPE daemon 会找到相应的Nagios 插件来执行检查;
  4. NRPE daemon 将检查的结果返回给check_nrpe 插件,插件将其递交给

nagios做处理。

注意:NRPE daemon 需要Nagios 插件安装在远程的Linux主机上,否则,daemon不能做任何的监控。

案例操作步骤:

①在被监控机器安装插件

shell > useradd nagios

shell > passwd nagios

shell > tar xvf nagios-plugins-2.2.1.tar.gz

shell > cd nagios-plugins-2.2.1/

shell > ./configure --prefix=/usr/local/nagios

shell > make && make install

shell > chown nagios.nagios /usr/local/nagios/

shell > chown -R nagios.nagios /usr/local/nagios/libexec/

②安装依赖软件xinetd和nrpe

shell > yum install -y net-snmp

shell > yum install xinetd

shell > tar xvf nrpe-3.2.1.tar.gz

shell > cd nrpe-3.2.1

shell > ./configure

shell > make all

shell > make install-plugin

shell > make install-daemon

shell > make install-config

shell > make install-inetd

③在xinetd下配置nrpe服务并启动

shell > vim /etc/xinetd.d/nrpe

shell > vim /etc/services

shell > service xinetd start

shell > netstat -lntp | grep 5666

Tip:查看check_nrpe命令用法

check_nrpe –H 被监控的主机 -c 要执行的监控命令

注意:-c 后面接的监控命令必须是nrpe.cfg 文件中定义的。也就是NRPE

daemon只运行nrpe.cfg中所定义的命令

查看命令检测语法

shell > vim /usr/local/nagios/etc/nrpe.cfg

以上部分就是命令名称,也就是check_nrpe 的-c 参数可以接的内容,等号 “=” 后面是实际执行的插件程序。也就是说check_users 就是等号后面/usr/local/nagios/libexec/check_users -w 5 -c 10 的简称。

这5行定义的命令分别是检测登陆用户数,cpu负载,hda1的容量,僵尸进程,总进程数。

④在监控主机上安装nrpe

shell > tar xvf nrpe-3.2.1.tar.gz

shell > cd nrpe-3.2.1

shell > ./configure

shell > make all

shell > make install-plugin

检测连接被检测主机

shell > /usr/local/nagios/libexec/check_nrpe -H 192.168.17.114

在commands.cfg中增加对check_nrpe的定义

shell > vim /usr/local/nagios/etc/objects/commands.cfg

-c 后面带的$ARG1$ 参数是传给nrpe daemon 执行的检测命令,它必须是nrpe.cfg 中所定义的那5条命令中的其中⼀条。在services.cfg 中使用check_nrpe 的时候要用 “!” 带上这个参数。

⑤定义被监控机的监控服务

shell > vim /usr/local/nagios/etc/objects/services.cfg

可以参考定义好的配置文件

⑥重启nagios服务,查看效果

报警案例实现

报警的作用

监控是为了发现问题,实际问题没有得到解决。

为了能够及时到了解到监控的信息,warring通知,一般使用短信、邮件、电话、微信的发送到处理人员手中(运维人员、测试人员、开发人员、部门经理、top)

nagios邮件报警配置

默认nagios报警的定义

①定义接收到邮箱

contacts.cfg

通过查看命令发现发送邮件,实际使用的sendmail命令。故安装软件

②安装sendmail

shell > yum install sendmail

shell > service sendmail start

shell > a+rwx /var/spool/clientmqueue

如果配置后查看日志,遇到以下问题

实际收到的报警邮件信息

实际公司业务环境,会使用更加智能和多元的报警方式。

调用付费的API 发送短信和400电话。