在上面的章节中,只是简单介绍了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,就能实现各种系统的监控和告警。

通过Centreon监控apache、MySQL、Hadoop服务状态的更多相关文章

  1. 自动监控主从MySQL同步的SHELL脚本

    代码如下: #!/bin/bash #check MySQL_Slave Status #crontab time 00:10 MYSQLPORT=`netstat -na|grep "LI ...

  2. nagios 实现Mysql 主从同步状态的监控

    一.系统环境 主机名 IP nagios 192.168.15.111 mysql_s 192.168.15.21 二.操作步骤 2.1 mysql_s端的配置 2.1.1 编写check_mysql ...

  3. telegraf 学习三 telegra inputs.net_response + smtp2http+ grafana 进行tcp服务状态监控

    以下演示一个简单的使用telegra inputs.net_response 进行tcp 服务状态的监控,统计集成grafana 的alert 为了方便使用了一个smtp2http 的服务,对于htt ...

  4. Nginx服务状态监控

    在Nginx的插件模块中有一个模块stub_status可以监控Nginx的一些状态信息,默认安装可能没有这个模块,手动编译的时候加一下即可. 1. 模块安装 先使用命令查看是否已经安装这个模块: [ ...

  5. 监控mysql主从同步状态脚本

    监控mysql主从同步状态脚本 示例一: cat check_mysql_health #!/bin/sh slave_is=($(mysql -S /tmp/mysql3307.sock -uroo ...

  6. Zabbix监控web,MySQL,TCP状态,Nginx

    接上篇Zabbix使用SMTP发送邮件报警并且制定报警内容 Zabbix怎么设置声音告警 web监控 在zabbix server选择web 创建一个监控web的场景 添加后这里有数字1 查看 假如在 ...

  7. Zabbix 3.4.11监控 apache服务,ftp服务的配置

    一 zabbix 的安装部署 略 二监控 apache服务的配置 首先在本机下载模板:https://github.com/rdvn/zabbix-templates/archive/m aster. ...

  8. 监控mysql主从同步状态是否异常

    监控mysql主从同步状态是否异常,如果异常,则发生短信或邮寄给管理员 标签:监控mysql主从同步状态是否异常 阶段1:开发一个守护进程脚本每30秒实现检测一次. 阶段2:如果同步出现如下错误号(1 ...

  9. 使用vsftp与shell实现对进程与服务状态的监控

    先说一下需求吧,公司开发了一款新的产品,新产品嘛,有着不得不出问题的理由,四个云机房,总共三百余台机器,需要实时的监控进程状态,虽然有zabbix来实现,但领导需求是脚本和zabbix一起做,zabb ...

随机推荐

  1. hash值生成表后缀(分表方案)

    //businessId分表目标值,tableSize:表数量,tableSuffix:表后缀 public static String getTableSuffix(String businessI ...

  2. Java设计模式(20):命令模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景 1.场景描述 智能电脑的品牌越来越多,由此诞生了一款电脑控制的APP,万能遥控器,用户在使用遥控器的时候,可以切换为自家电视的品 ...

  3. 比较一下inner join(可直接简写为join)和where直接关联

    SELECT * FROM A ,B WHERE A.ID = B.ID 是比较常用的2个表关联.之前一直用这个,后来换了家公司发现这家公司的报表大多数都是用inner join,稍微研究了一下.查阅 ...

  4. [ch01-03]神经网络基本原理

    系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 前言 For things I don't know h ...

  5. Linux入门之简介

    1.啥是linux? Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的操作系统. 它能运行主要的Unix工具软件.应用程序 ...

  6. [FPGA]Verilog实现寄存器LS374

    目录 想说的话... 正文 IC介绍 电路连接图 功能表 逻辑图 实验原理 单元实现_D触发器 整体实现(完整代码) 想说的话... 不久前正式开通了博客,以后有空了会尽量把自己学习过程中的心得或者感 ...

  7. Java流程控制之(一)条件

    目录 条件语句 单if情况 单if/else情况 if/else多分支情况 switch条件语句 条件语句+循环语句,直接甩图甩代码! 条件语句 Java希望在某个条件为真时执行相应的语句. 单if情 ...

  8. Dart Learn Notes 02

    Functions Dart是一门面向对象的语言,所以即便是方法也是一个对象,它的类型是Function. 这就意味着方法可以指向变量,也可以作为方法中的参数供其他方法使用.甚至可以让 一个类作为一个 ...

  9. 数据表与简单java类——多对多映射

    给定一张Meber和Product表,得到如下信息: 1.获取一个用户访问的所有商品信息 2.获取一个商品被哪些用户浏览过的信息 package Mapping_transformation; cla ...

  10. k8s 上部署 Redis 三主三从 集群

    目录 介绍 为什么要使用Redis? 什么是Redis群集? 在Kubernetes中部署Redis集群 从 GitHub 上下载: 创建pv 创建statefulset 创建service 初始化 ...