0523-5.15-为Cloudera Manager配置自定义告警脚本

2019-11-27 18:50:12 浏览数 (1)

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命令,更多的使用方式大家可以网上查阅

0 人点赞