1
文档编写目的
Cloudera Manager支持三种方式的告警输出,在前面的文章《如何为CDH集群配置警报邮箱》和《如何通过Cloudera Manager配置使用SNMP方式转发告警》Fayson介绍了邮件和SNMP两种方式的告警接入,那Cloudera Manager还支另外一种自定义告警脚本方式接入告警,本篇文章Fayson主要介绍如何使用自定义告警脚本的方式将CM告警输出。
- 测试环境
1.CM和CDH版本为5.15.0
- 前置条件
1.CDH集群使用Cloudera Manager管理
2
环境准备
这里在Cloudera Management Service下的Alert Publisher服务所在节点安装了jq命令,主要用于解析JSON格式的数据。由于Alert Publisher服务通过自定义告警脚本方式输出的告警内容为json格式,为了能够方便的解析
1.在Cloudera Manager服务器上安装JQ命令,用于解析JOSN数据文件
代码语言:javascript复制[root@cdh1 ~]# yum -y install jq
2.在Linux上可以通过jq命令方便的解析JSON数据,如下所示:
代码语言:javascript复制[root@cdh1 script]# cat alert_test.log | jq -r '.[].body.alert.attributes.__uuid'
更多的使用方式大家可以查看资料或使用帮助文档。
3
自定义告警脚本及配置
1.在Alert Publisher服务所在节点创建如下目录,并修改属主
代码语言:javascript复制[root@cdh1 ~]# mkdir -p /opt/cloudera/script
[root@cdh1 ~]# chown cloudera-scm. /opt/cloudera/script
[root@cdh1 ~]# ll /opt/cloudera/
注意:需要将放脚本目录修改属主修改为cloudera-scm,因为接下来的脚本会在该目录下产生一些临时文件。
2.在/opt/cloudera/script目录下创建alert_script.sh脚本,内容如下:
代码语言:javascript复制[root@cdh1 script]# vim alert_script.sh
#!/bin/bash
OG_ALERT_FILE=$1
date=`date`
# 定义告警日志
ALERT_FILE=/tmp/alert_test.log
# 定义告警解析后日志文件
ALERT_RESULT_FILE=/opt/cloudera/script/alert_result.log
#告警解析存放目录,将原始的告警日志转换为一行行的json存储
TMP_ALERT_FILE=/opt/cloudera/script/tmp_alert.json
cat $OG_ALERT_FILE | jq -r '.[].body.alert|"(.attributes)"' > $TMP_ALERT_FILE
while read -r line
do
cluster=$(echo -e $line | jq -r '.CLUSTER_DISPLAY_NAME[]')
hostname=$(echo -e $line |jq -r '.HOSTS[]')
if [ $? -ne 0 ];then
hostname=null
fi
echo -e $line | jq -r '.|"(.HEALTH_TEST_RESULTS[])"' |while read alert; do
alert_service=$(echo -e $alert | jq -r '.testName')
alert_enent_doce=$(echo -e $alert | jq -r '.code')
alert_content=$(echo -e $alert | jq -r '.content')
alert_severity=$(echo -e $alert | jq -r '.severity')
echo "告警集群:[$cluster],告警主机:[$hostname],告警级别:[$alert_severity],告警服务:[$alert_service],告警事件编码:[$alert_enent_doce],告警详细内容:[$alert_content]" >> $ALERT_RESULT_FILE
done
done < $TMP_ALERT_FILE
echo "$date: Wrting log to $ALERT_RESULT_FILE" >> $ALERT_FILE
3.修改脚本属主及执行权限
代码语言:javascript复制[root@cdh1 script]# chown cloudera-scm. alert_script.sh
[root@cdh1 script]# chmod x alert_script.sh
4.登录CM进入Cloudera Management Service配置页面,配置自定义告警脚本路径
完成上述配置后,重启Alert Publisher服务即可,不需要重启CMS所有服务。
4
告警脚本测试
1.在集群中手动的kill掉几个服务的进程
这里将cdh2.fayson.com节点的Kafka和Spark History服务的进程kill了,在CM上已显示这两个服务异常
2.登录Alert Publisher服务所在服务器,进入/opt/cloudera/script目录下
可以看到alert_result.log日志文件中保存着已经解析好的告警日志。
5
总结
1.Cloudera Manager支持多种方式上报告警(邮件、SNMP、自定义告警脚本)
2.Alert Publisher服务负责将集群的告警信息转发,通过自定义告警脚本AP服务在/tmp目录下生成一个临时的告警原始文件,文件内容为JSON格式
3.通过自定义告警脚本将原始告警解析后,在脚本中还可以将解析好的告警通过HTTP或其他采集方式将告警上报
4.Fayson在文章中解析JSON格式数据使用到了Linux下的jq命令,更多的使用方式大家可以网上查阅