在上面的章节中,只是简单介绍了Centreon的几个基础监控项,例如添加主机、服务等,这些对于一个监控系统来说是远远不够的,本节将重点介绍对一些扩展服务的监控,也就是对一些常见应用的监控。
一、 Nagios/centreon插件编写规范
作为运维人员,相信大家对脚本并不陌生,而Nagios插件就是可执行的一个脚本或程序,这个脚本可以用各种语言去实现,例如shell、perl、python都可以。对Nagios熟悉的读者肯定也编写过不少Nagios插件,虽然Nagios自带了很多常用的监控插件,但是由于监控环境的不同,往往需要运维人员根据需要编写适合自己的Nagios插件。这里先简单介绍下编写Nagios插件的一些规则。
Nagios插件必须完成以下两个功能:
脚本执行结果必须要返回几个可能返回值中的一个。
脚本执行结果至少返回一行文本输出。
Nagios插件作为一个向Nagios传递状态的工具,它并不关心程序的具体执行细节,读者可以根据自己的需要去监控web服务、数据库服务、网络服务和磁盘空间等,但是在监控脚本的输出结果中必须包含以下返回值之一,因为Nagios就是靠这些返回值来判断监控服务运行状态的。
Nagios插件的返回值如下表所示。
另外,Nagios脚本在输出结果时也是有规范的,基本要求是插件至少返回一行文本,从Nagios 3开始,插件可以返回多行文本数据了,这样可以输出更多有用的信息供监控查阅。
在开始监控之前,需要一些监控插件,其实nagios提供了很多现成的监控脚本,可直接使用,安装这些脚本,执行如下命令:
[root@localhost plugins]# yum install nagios-plugins-all
此命令执行以后,在系统的/usr/lib64/nagios/plugins目录下就会出现很多脚本。后面会用到这些脚本。
二、 监控Apache运行状态
2.1、获取Apache监控脚本
在介绍监控Apache的状态之前,需要一个监控Apache状态的插件,这里并不打算介绍插件如何编写,因为已经有很多编写好的插件供Nagios使用。在Nagios的官方网站 http://exchange.nagios.org/directory/Plugins 上有很多可供直接使用的插件分类,找到Web Servers分类,其中就有许多对Apache的监控脚本,这里选取一个以Python语言编写的Apache监控脚本,下载地址是: http://www.ixdba.net/jk/plugins.tar.gz , 下载到的脚本名称为check_apache2.py,然后将此脚本放到监控服务器上的/usr/lib64/nagios/plugins目录下,并授于可执行权限:
[root@centreon-server ~]#chmod 755 /usr/lib64/nagios/plugins/check_apache2.py
2.2、 修改被监控服务器Apache配置
监控Apache是通过Apache的mod_status模块实现的,因此需要在被监控的机器上打开mod_status模板,基本方法就是修改apache的配置文件,添加如下内容:
<Location /server-status>
SetHandler server-status
Order deny,allow
Deny from all
Allow from 127.0.0.1 172.16.213.229
</Location>
ExtendedStatus On
在上面的配置中“Allow from”表示允许访问“/server-status”页面的主机IP,将监控主机IP加入即可,如果有多个主机需要访问这个页面,以空格分开,依次添加IP地址。
2.3、 在监控服务器上配置Apache监控
在监控服务器的Centreon Web界面,选择 Configuration—>Commands—>Checks,然后点击Add新建一个Command,如下图所示。
在上图中,重点看“Command Line”的内容,其中,“$USER1$”就是监控服务器上Nagios监控插件的路径,这里是“/usr/lib64/nagios/plugins”,之前已经把Apache的监控脚本check_apache2.py放到了这个路径下,这里直接引用即可。在这个脚本对应的参数中,定义了三个参数变量“$ARG1$”、“$ARG2$”和“$ARG3$”,分别用于指定Apache server的端口、警告阀值和故障阀值,这里建议将每个参数变量的作用都在“Argument Descriptions”选项中做个描述,这样在添加服务时就不容易出错。
接着开始添加监控Apache的服务,选择Configuration—>Services—>Services by host,点击Add添加一个服务,如下图所示。
添加服务的方法,前面已经做过介绍,首先看“Service Configuration”标签中的几个重要选项,“Description”就是监控服务的名称,这里定义为check_apache 。“Service Template”是指定服务的模板,这里仍然选择“generic-service”。
接着,是服务链接的主机,选择需要监控的apache主机即可。下面重点关注下“Check Command”选项,这个选项用来指定服务检查的命令,这里选择刚才创建的命令check_apache_status。
最后一个选项“Args”就是刚才创建check_apache_status命令时指定的三个变量,可以看到,由于在定义命令时增加了每个变量的含义,因此这里在添加服务时就能非常清楚地知道每个变量是什么含义,根据每个变量的含义,依次填写Apache状态页面的端口号、报警阀值和故障阀值。
在完成所有设置后,保存退出,check_apache服务就添加完成了。
2.4、 加载配置使添加服务生效
在服务添加完成后,打开选择Configuration—> Pollers—> Pollers,接着选择“Export configuration”,选择对应的Poller,然后重启centreon监控引擎,如下图所示:
重启完成后,选择Monitoring > Status Details > Services,查看新添加的check_apache服务运行状态,如下图所示。
可以看到,check_apache服务的状态是“OK”,并且在最后给出了服务的状态信息。至此,check_apache服务添加完成。
三、 监控MySQL运行状态
现在基于MySQL的应用越来越多,因此对MySQL数据库的监控也成为运维工作中必不可少的一部分。对MySQL的监控可以有多种形式,可以监控MySQL的运行状态,具体包含端口,运行负载,库/表状态等;也可以专门监控Mysql的查询状态,当查询负荷达到指定的阀值时进行报警。本节重点介绍如何监控Mysql的运行状态。
在添加MySQL监控之前,仍然需要编写对Mysql监控的插件,不过幸运的是,Nagios自带的插件中已经包含了对MySQ监控的插件,可以在Nagios插件默认安装路径/usr/lib64/nagios/plugins找到,对应的插件名称为check_mysql。要了解这个脚本如何使用,可通过“/usr/lib64/nagios/plugins/check_mysql -h”获取使用帮助,最后,还需要保证这个脚本有可执行权限。下面进入MySQL监控配置阶段。
3.1、 在被监控的MySQL上添加远程可访问的用户
由于check_mysql这个脚本需要登录到远程的MySQL服务器上获取运行状态,因此,需要在被监控的Mysql服务器上创建一个可供监控服务器访问的用户。这里创建一个名为nagios的MySQL用户,基本操作如下:
mysql> grant usage ON *.* to nagios@'%' identified by 'xxxxxx';
mysql> flush privileges;
3.2、 在监控服务器上添加监控MySQL状态的命令
在监控服务器的Centreon Web界面,选择 Configuration—>Commands—>Checks,然后点击Add新建一个Command,如下图所示。
check_mysql脚本有多个参数选项,这里仅使用四个参数,“-H”表示主机名,“-P”指定被监控的Mysql数据库监听端口,“-u”表示连接远程Mysql数据库的用户名,“-p”表示连接MySQL的密码。设置完成,点击保存,check_mysql_status命令创建完成。
接着开始添加mysql监控服务,选择Configuration—>Services—>Services by host,点击Add添加一个服务,如下图所示。
与之前添加服务方式相同,在“Check Command”选项中选择刚刚创建的命令“check_mysql_status”,然后在“Args”选项中依次输入MySQL的监控端口为3306,以及连接MySQL的用户名和密码。最后,保存退出即可完成服务的添加。
3.3、 加载配置使监控服务生效
在服务添加完成后,打开选择Configuration—> Pollers—> Pollers,接着选择“Export configuration”,选择对应的Poller,然后重启centreon监控引擎,重启完成后,选择Monitoring > Status Details > Services,查看新添加的check_mysql服务运行状态,如下图所示。
从图中可以看出,MySQL服务状态为“OK”,并给出了服务状态的详细信息。为了验证监控的有效性,可以停止172.16.213.236上的MySQL服务,看监控系统是否能在下个监控周期发现MySQL的异常状态。
四、监控HADOOP HDFS运行状态
对HADOOP的状态监控是云平台运维人员必不可少的工作,由于HADOOP提供了Web UI访问界面可以查看HDFS的状态,因此,可以借助于这个Web UI界面对HDFS进行监控,那么,首先还是要编写监控HDFS的脚本。为了减少工作量,这里分析几个监控hadoop的脚本,可以从http://www.ixdba.net/jk/plugins.tar.gz 下载这个基于perl编写的HDFS监控脚本,这里以check_hadoop_namenode.pl脚本为例,放到监控服务器上的/usr/lib64/nagios/plugins目录,并授予可执行权限。
同时,check_hadoop_namenode.pl还有依赖文件,还需要将plugins.tar.gz中的lib目录整个拷贝到/usr/lib64/nagios/plugins路径下,此脚本才能正常运行。下面进入HDFS监控配置阶段。
这里监控的hadoop版本为hadoop-cdh5.15.1,hadoop-cdh5.x系列版本都可以使用这些脚本对hadoop进行监控。
4.1、 在监控服务器添加监控HDFS状态的命令
在监控服务器的Centreon Web界面选择 Configuration—>Commands—>Checks,然后点击Add新建一个Command,如下图所示。
在创建check_hadoop_namenodespace命令过程中,使用了check_hadoop_namenode.pl脚本的4个参数,其中“-H”表示主机地址,“-P”表示HDFS提供的Web UI的端口,默认是50070,“-s”是统计HDFS的存储空间百分比,“-w”是HDFS已用空间的warning百分比,而“-c”是HDFS已用空间的critical百分比,要查看check_hadoop_namenode.pl脚本的参数含义和使用方法,可通过执行check_hadoop_namenode.pl脚本“-h”选项得到这个脚本的使用帮助信息。
接着,开始添加check_hadoop_namenode_space服务,如下图所示,添加方法已经介绍过很多遍,这里不再细述。
4.2、 查看check_hadoop服务运行状态
在完成服务添加后,仍然需要加载配置以使添加的服务生效,然后查看服务状态页面,如下图所示。
至此,check_hadoop_namenode_space服务添加完成,如果要验证监控脚本的有效性,可以尝试修改监控脚本参数的阀值,然后对服务做一个强制性立即检查,即可知道脚本运行是否正常。
五、桌面监控报警器Nagstamon
在前面的章节,介绍过Centreon报警的方式,通过邮件、短信等方式发送报警邮件,这里再介绍一种报警方式,即通过Nagstamon这个小软件实现通过颜色和声音的方式进行报警。Nagstamon是一个开源的桌面监控工具,支持Windows、Linux和MacOS X平台,通过Nagstamon可以监控Nagios运行状态。同时Nagstamon还支持多种监控引擎,常见的有zabbix、nagios、zenoss、Icinga、Opsview,、Centreon,、Op5 Monitor/Ninja、Check_MK Multisite等。更详细的信息可以参考Nagstamon官网: http://nagstamon.ifw-dresden.de/。 这里下载一个Windows下的版本nagstamon3.2.1,安装完成后做一个简单的配置即可。
打开Nagstamon,选择Servers标签,点击“New server”按钮添加一个监控,如下图所示。这里添加一个类型为Centreon的监控,在“Monitor URL中”输入Centreon监控服务器的Web访问地址即可,然后依次输入登录Centreon后台的用户名和密码,点击“OK”保存退出。
如果仅仅是对Nagios进行监控,可以选择“Type”为Nagios,然后依次输入“Monitor URL”和“Monitor CGI URL”,如下图所示。这里重点关注下两个URL地址,最后输入登录Nagios Web的用户名和密码即可。
接着选择“Display”标签,如下图所示,这个标签主要用于设置监控输出到桌面的展示方式,可根据个人喜好进行设定。
下面看“Filters”标签,如下图所示,这个标签主要用于过滤监控状态输出。如果Centreon添加了很多服务,并且服务状态不定,那么都在一起展示就比较混乱,例如有些服务没有开启通知机制,有些服务没有开启检查机制,这些显然是不需要监控的,此时,就可以在这里设置过滤机制,将这些不需要监控的服务过滤掉。
接着看“Actions”标签,如下图所示,这个标签主要用于定义一些连接服务器的工具,例如SSH、Telnet、NVC等,通过定义这些工具,可以在某个服务器出现故障时快速连接。
下面一个标签是“Notification”,如下图所示,这个标签主要用于定义故障通知机制,例如发生什么类型的故障才进行通知,以及检测到故障后针对不同故障级别报警声音的定义等。系统默认有一套故障报警声音,如果觉得不好,还可以自己添加不同报警级别的声音。
最后一个标签是“Colors”,如下图所示,这个标签用于设置监控状态的显示颜色,在默认情况下,OK状态显示绿色,WARNING状态显示黄色,CRITICAL状态显示红色,UNKNOWN状态显示橙色,而UNREACHABLE状态显示棕色,DOWN状态则以黑色表示。
如果觉得默认状态的颜色显示不够明确,还可以自己定义各种状态对应的颜色。
在完成所有设置后,Nagstamon会自动查询各个主机和服务的状态,如果主机或服务出现故障,监控状态条就会在桌面屏幕上不停闪动,同时发出报警声音,在鼠标被放到状态条上后,显示报警状态的详细信息,如下图所示。
关于centreon的扩展监控就介绍这么多,centreon监控主要是写基于nagios的脚本,有了脚本,结合centreon web,就能实现各种系统的监控和告警。