Centreon 是一款功能强大的分布式 IT 监控系统,通过第三方组件可以实现对网络、操作系统和应用程序的监控:
首先,它是开源的,你可以免费使用它;
其次,它的底层采用 centreon-engine(类似 Nagios 的引擎)作为监控软件,同时通过 cbd 模块将监控到的数据定时写入数据库中,而 Centreon 实时从数据库读取该数据并通过 Web 界面展现监控数据;
最后,Centreon 就是 Nagios 的一个管理配置工具,通过 Centreon 提供的 Web 配置界面,可以轻松完成各种烦琐的监控配置。
Centreon 的安装非常简单,有 ISO 镜像安装、VM 虚拟机安装、源码编译安装和 yum 源安装四种方式。其中,源码编译安装较复杂,出错概率也较高,我比较推荐采用 ISO 镜像安装方式或者虚拟机镜像方式进行安装。
你可以从 Centreon 官网下载到需要的版本,如下图所示:

我下载的是 VirtualBox Virtual Machine,其实就是一个打包好的虚拟机。下载后,将文件导入 VirtualBox 虚拟机,然后直接启动系统即可完成安装,非常简单。登录系统,默认的用户名是 root,密码为 centreon。
虚拟机启动完成后,直接访问虚拟机的 IP 地址,即可打开 Centreon 登录界面,默认情况下 Centreon Web 登录的用户名为 admin,密码为 centreon。
配置 Centreon 并不复杂,所有操作都能在 Web 管理界面完成,如果对 Nagios 的配置过程比较了解,那么配置 Centreon 就变得非常简单。
下面先来熟悉一下 Centreon 中配置文件之间的关系。
在 Centreon 的配置过程中涉及几个定义:主机、主机组、主机模板,服务、服务组、服务模板、联系人、联系人组、监控时间和监控命令等。从这些定义可以看出,Centreon 的各个配置文件之间是互相关联,彼此引用的关系。
成功配置一台 Centreon 监控系统,必须要弄清楚每个配置文件之间依赖与被依赖的关系,其中,最重要的有四点:
要定义监控哪些主机、主机组、服务和服务组;
要定义这个监控需通过什么命令实现;
要定义监控的时间段;
定义主机或服务出现问题时要通知的联系人和联系人组。
登录 Centreon Web,在左侧导航中,选择 Configuration → Hosts →Templates,然后编辑 generic — active — host — custom 模板,如下图所示:

主机模板,是对主机默认属性或通用属性的设置。 只有主机引用了这个模板,那么此模板的设置值就继承到主机里面了。一些基础的主机监控,比如主机检查属性、报警通知属性、自定义宏属性等都可以在主机模板中进行设置,当然也可以在定义主机监控的时候设置这些属性。
主机模板的一个最大特点是继承性,如果一个主机引用了这个模板,那么此主机模板下的所有监控属性都被自动继承过来了。
例如,要对 1000 台主机做 ping 连通性检查,首先可以创建一个 check_ping 命令,然后将这个命令引用到主机模板中,最后在创建主机的时候,这 1000 台主机都引用这个主机模板即可。
引用主机模板的好处是,如果监控属性发生了变化,只需修改主机模板的配置即可,而无须一个主机一个主机地修改,方便快捷。
有时候可能会发现一个监控属性既在主机模板中设置了,也在主机定义中设置了,此时就有一个优先级的问题,在这种情况下,监控属性的生效值以主机中的设置为准。
点击下图中的“Notification”标签,用来设置告警通知属性模板,如下图所示:

告警通知属性主要对是否启用告警、告警联系人、告警周期、告警类型等进行设置,上图已经很清楚地描述了每个选项的含义,这里不再多说。
选择 Configuration → Hosts → Hosts,点击 Add 按钮添加一个主机,如下图所示:

首先添加一个 172.16.213.31 主机,此主机无须设置更多的属性,只需要引用模板即可,模板就选择之前我们创建的“generic-active-host-custom”。这样,此主机的所有属性就配置完成了,因为更多的主机属性都通过指定的主机模板继承进去了。
要添加更多的主机,方法与上面完全相同。下面依次添加多台主机,如下图所示:

在这个界面上,有很多操作属性,可以用于对主机进行复制、删除、修改、启用和禁用等,由此可见,通过 Centreon 管理主机非常方便、简单。
在完成主机和主机组添加后,这些主机信息并不会马上生效,还需要将这些信息生成 Centreon 配置文件进行保存,然后重新启动监控引擎,这就是 Centreon 的监控引擎管理功能。在任何配置添加或修改完成后,都需要重启监控引擎才能使这些配置生效。
选择 Configuration → Pollers → Pollers,如下图所示:

在此图中选择“Export configuration”,如下图所示:

上图主要用于将创建好的配置导出,首先选择 pollers 为 central,然后勾选左边所有动作,最后选择执行方式,可选的有两个,即 Restart 和 Reload。
Restart 用于重新启动监控引擎服务,比如新增加了一台主机,就可以使用 Restart 这个动作。
Reload 是重新加载配置,比如修改了某个主机的配置参数,使用 Reload 重新加载即可。
在完成主机添加后,下面开始添加需要监控的服务。
(1)修改服务模板
这里的服务模板与之前介绍的主机模板类似,它们具有相同的作用,选择 Configuration→Services→Templates,找到“generic-active-service”这个自带的模板,如下图所示:

此界面中主要用来设置服务模板的一些属性值,点击上图中的“Notification”选项,可以用来设置通知属性,如下图所示:

在此界面中,对每个选项的含义都做了详细的描述,这里不再多说。generic-active-service 服务模板中设置的属性值都是通用的或公用的,主要用于在创建服务的时候进行引用。
(2)创建监控命令
选择 Configuration→Commands→Checks,点击 add 创建一个命令,如下图所示:

这里创建了一个“ganglia_collect”命令,此命令用来收集 Ganglia 上面的监控指标,可以看到,此命令最终应用的监控命令是 check_ganglia_metric.py,这个脚本我们在上个课时中介绍过。
(3)添加监控服务
添加监控服务的方法与添加主机基本一样,选择 Configuration→Services→Services by host,点击 Add 按钮添加一个服务。这里添加了一个“check_hadoop_block”的服务,在“Service Template”中引用了服务模板 generic-active-service,如下图所示:

在添加监控服务过程中,只要引用了之前创建好的基础服务模板,那么大部分的属性基本都不用配置了,因为已经在服务模板配置过了。
这里重点关注“check_hadoop_block”服务中引用的命令 ganglia_collect 中三个参数的配置,分别是监控指标、警告阈值和故障阈值。其中,监控项 dfs.FSNamesystem.CorruptBlocks 表示已损坏的 block 数量。这样一个监控服务就添加完成了,如下图所示:

在上图的服务监控列表中,可以对每个服务进行复制、删除、启用、禁用等操作,这些功能对以后的监控系统运维是非常重要的。
监控报警配置是 Centreon 中一个非常重要的组成部分,在前面介绍了主机和服务的添加,并且在主机和服务中都引用了各自的模板。而我们在模板中已经开启了报警通知功能,下面就重点讲下主机和服务的报警通知功能。
(1)开启主机报警通知
开启主机报警通知功能有两种方法。
第一种方法是在定义主机时进行开启,选择 Configuration→Hosts→Hosts,编辑已经创建好的主机 172.16.213.31,这里重点看通知(Notification)选项,如下图所示:

在默认情况下,通知选项处于“Default”状态,该状态表示一个继承关系,这里选择“monitoring_server”作为通知联系人,monitoring_server 就是 admin 用户的全名,“选择Supervisor”作为联系人组。这里可以根据监控需要任意添加。
接着还可以选择通知间隔、通知周期、通知类型、是否延时发送通知等选项。对于比较重要的主机可以选择短一点的通知时间间隔,可以选择通知周期为 7×24,另外还可以选择工作日(Workhours)、非工作日(Nonworkhours)两个选项,可以选择通知类型为宕机(Down)、不可到达(Unreachable)、恢复(Recovery)等。最后一个选项是设定第一次发送通知的延时时间,如果设置为 0,则表示主机故障后立刻发送通知。
第二种方法是配置主机模板中的设置。在前面介绍的主机添加过程中,都引用了主机模板,而在主机模板配置中也可以开启报警通知功能,开启方法很简单。
那就是编辑主机模板,找到通知选项,设置方法与上图完全一样,当开启了通知功能后,对应的这个主机就继承了模板的设置,自动开启了主机通知功能。
(2)报警方式和联系人配置
在开启了主机和服务的报警通知功能后,还需要设置报警方式和报警联系人。Centreon 支持多种报警方式,可以选择邮件报警、短信报警、微信报警、钉钉报警等方式,而邮件报警是默认方式,可以无须添加插件直接使用。
选择 Configuration→Users→Contacts/Users,然后编辑 admin 用户,如下图所示:

上图总共分成了两个部分,第一部分是用户设置,每个选项的含义在图中都进行了标注;第二部分是通知告警,主要是配置报警通知命令,这里重点关注一下主机通知和服务通知命令。如果是邮件报警,在主机通知命令中,可以选择 host—notify—by—email,而在服务通知命令中可以选择 service—notify—by—email。关于这两个命令,要根据实际情况进行修改,修改方法很简单:选择 Configuration→Commands→Notifications 选项,编辑对应的命令即可。
这里推荐一个利用命令行发邮件的工具“sendEmail”,这个命令行发邮件的工具功能非常强大,使用也非常简单,强烈推荐。
点击这里下载 sendEmail,解压即可使用。可以将解压出来的 sendEmail 可执行文件复制到 /usr/local/bin 下,直接运行 sendEmail 就会显示详细的用法,这里介绍几个重要的使用参数。
-f,表示发送者的邮箱。
-t,表示接收者的邮箱。
-s,表示 SMTP 服务器的域名或者 IP 地址。
-u,表示邮件的主题。
-xu,表示 SMTP 验证的用户名。
-xp,表示 SMTP 验证的密码。
-m,表示邮件的内容。
下面是一个定义好的 host - notify - by-email 命令的内容:
/usr/bin/printf "%b" "*Centreon Monitor Notification For HOST*\n\nNotification Type: $NOTIFICATIONTYPE$\n\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $HOSTSTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$HOSTOUTPUT$" | /usr/local/bin/sendEmail -f www@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "** HOST $NOTIFICATIONTYPE$ alert - $HOSTNAME$ is $HOSTSTATE$ **" -xu www@163.com -xp 'zzzzzz' -o tls=no
- 1
在 Configuration→Commands→Notifications 中,编辑“host-notify-by-email”内容如下图所示:

下面是一个定义好的 service-notify-by-email 命令的内容:
/usr/bin/printf "%b" "*Centreon Monitor Notification For Service*\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$" | /usr/local/bin/sendEmail -f www@163.com -t $CONTACTEMAIL$ -s smtp.163.com -u "** $NOTIFICATIONTYPE$ alert - $HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" -xu www@163.com -xp 'xxxxxx' -o tls=no
- 1
在 Configuration→Commands→Notifications 中,编辑“service-notify-by-email”内容如下图所示:

告警通知配置完毕后,重启 Centreon 监控引擎,以使告警配置生效,到这里为止,关于 Centreon 邮件报警方式的配置已介绍完毕。
上个课时我介绍了 Ganglia 的使用,以及如何从 Ganglia 监控指标中获取监控数据。下面我将介绍通过监控系统来实现对 Ganglia 监控数据的告警配置。
Centreon 对 Hadoop 的监控,主要是通过编写脚本的形式去访问 HDFS 的 50070 端口,以及 yarn 的 8080 端口,来实现对 NameNode、Datanode 以及 Resourcemanager 和 Nodemanager 的监控。
这里假定 Hadoop 集群中主 Namenode 的 IP 为 172.16.213.31,备 Namenode 的 IP 为172.16.213.41,Resourcemanager 节点的 IP 为 172.16.213.41,这些 IP 会在下面的配置中用到。
下面我会分享几个监控 Hadoop 的脚本,以及如何将脚本集成到 Centreon 中进行故障告警和通知。
首先,在监控服务器的 Centreon Web 界面选择 Configuration→Commands→Checks,然后点击 Add 按钮新建一个 Command,如下图所示。

在创建 check_hadoop_namenodestate 命令过程中,需要使用一个 perl 脚本 check_hadoop_namenode_state.pl(本课时所有脚本都可点击这里下载,将下载下来的文件和目录都放到 Centreon 服务器的 /usr/lib/nagios/plugins 目录下),此脚本其中的“-H”表示主机地址,后面的参数 $ARG1$ 表示 namenode 的状态,有两种状态,即 active 和 standby。此脚本用来检测高可用 Namenode 的主、备是否发生切换,如果主、备发生切换,则意味着 Namenode 可能出现问题,所以要做好主备的状态监控。
接着,开始添加 check_hanamenode_active 服务,如下图所示:

注意,这里添加的服务对应的主机是 172.16.213.31,此主机是 Namenode 的主节点,因此它的状态应该是 active,注意此服务在检查命令配置项中,添加刚刚配置好的那个命令即可。
然后,继续添加第二个服务 check_hanamenode_standby,此服务用来检查 Namenode 备机运行状态,如下图所示:

配置完毕后,对 Namenode 主、备运行状态已经配置完成。对 Namenode 监控,还需要及时了解 HDFS 数据块状态(是否丢失块、出现坏块、未复制的块等),这个功能需要通过另一个脚本实现,该脚本为 check_hadoop_replication.pl。
要使用这个脚本,仍然是先创建一个监控命令,在 Centreon Web 界面选择 Configuration→Commands→Checks,然后点击 Add 按钮新建一个 Command,如下图所示。

在这个界面,我们调用了刚上传到服务器上的那个脚本,此脚本中 -H 是指定 Namenode 服务器的 IP,-P 是指定 Namenode 的 Web 端口,默认是 50070,-w 是 HDFS 数据块故障状态的警告值,-c 是 HDFS 数据块故障状态的故障值。
接着,开始创建服务,这里创建了一个 check_hadoop_namenode_replicatedblocks 服务,如下图所示:

此服务中,连接了两个主机,也就是对这两个主机的 HDFS 数据块状态进行定期监控和检查。
对 Datanode 的监控主要监控节点服务是否宕机,如果发现 Datanode 服务宕机,那么需要马上处理,所以对 Datanode 的监控至关重要。要监控 Datanode,需借助一个脚本 check_hadoop_datanodes.pl,此脚本已包含在上面那个下载地址中。
接着,在 Centreon Web 界面选择 Configuration→Commands→Checks,然后点击 Add 按钮新建一个 Command,如下图所示。

这里创建了一个命令 check_hadoop_deaddatanode,然后将上面脚本引用进来即可,参数含义不再介绍。
命令创建完成,接着,开始创建监控服务,这里我创建的服务名称是 check_hadoop_datanode_dead,将此服务连接到 172.16.213.31 主机上,如下图所示:

注意,在上图中,ARG1 代表警告阈值,ARG2 代表故障阈值,这个可根据实际情况进行修改。配置完毕后,对 Datanode 的监控就添加完成了。
对于 Hadoop 的分布式计算,必须监控的服务有两个,即 resourcemanager 和 nodemanager。这里首先介绍如何监控 resourcemanager 服务,对该服务的监控,主要是监控 resourcemanager 对 JVM 内存资源的使用状态,当 JVM 使用资源过大时,需要考虑计算资源是否充足,是否存在异常任务等。
因此这里我主要监控 resourcemanager 的 JVM 使用状态,要监控 resourcemanager 的 JVM 内存资源状态,需借助一个脚本 check_hadoop_yarn_resource_manager_heap.pl,此脚本已包含在上面那个下载地址中。
接着,在 Centreon Web 界面选择 Configuration→Commands→Checks,然后点击 Add 按钮新建一个 Command,如下图所示:

在上图中,通过创建一个命令将 check_hadoop_yarn_resource_manager_heap.pl 脚本引用进来了,其中 -t 参数表示超时时间。
然后,开始创建监控 resourcemanager 的 JVM 内存状态的服务,这里我创建的服务名称是 check_yarn_resourcemanager_heap,将此服务连接到 172.16.213.41 主机上,如下图所示:
ARG1 参数代表的含义是超时时间,单位是秒;
ARG2 参数代表的含义是警告阈值,这个值是百分比;
ARG3 参数代表的含义是故障阈值,对应的值也是百分比。

最后,再来看看如何监控 Nodemanager,在实际运行中,也会出现各种问题,比如 Nodemanager 所在的节点可能出现磁盘只读,此时该节点就会自动进入黑名单,或者出现内存溢出,Nodemanager 服务就会自动退出。针对这些情况,运维需要及时发现、及时处理,所以对 Nodemanager 的监控至关重要,同样,需要借助一个脚本 check_hadoop_yarn_node_managers.pl,此脚本已包含在上面那个下载地址中。
然后,在 Centreon Web 界面选择 Configuration→Commands→Checks,点击 Add 新建一个 Command,如下图所示。

命令创建完毕后,接下来开始创建服务,引入此命令,这里创建一个 check_yarn_lostnodemanager 服务,如下图所示:

注意,check_hadoop_yarn_node_managers.pl 脚本的实现是对 Nodemanager 的监控,借助了 Yarn 的 8080 端口,因此,这里监控连接主机是 172.16.213.41,而 ARG1、ARG2 和 ARG3 的含义依次是超时时间、警告阈值和故障阈值。
本课时主要讲解了监控系统 Centreon 的使用,以及如何在 Centreon 上监控 Hadoop 的 NameNode、Datanode、resourcemanager 及 nodemanager 服务,通过 Ganglia 获取 Hadoop 集群数据,然后结合 Centreon,就可以实现将监控指标进行实时告警,Ganglia+Centreon 的组合是大数据运维监控环境下最常用的开源监控方案。