采用Cloudera Mananger提供的自定义告警脚本的方式,收集告警信息并转发到钉钉群中(钉钉群机器人)
主要内容:
- 实现Cloudera Manager告警的钉钉群机器人转发
- 实现思路是采用cloudera manager支持的自定义告警脚本方式,在脚本中调用钉钉群机器人的api
环境:
- CDH 6.3.2
- 钉钉 5.0.16
添加群机器人
分别点击:xxx群->鼠标右键->群设置->智能群助手->添加机器人->自定义->添加->填写机器人名称及安全设置->完成
配置Cloudera Manager平台自定义告警脚本
查看CDH Alert Publisher 所在的机登录到对应的服务器,新建告警脚本目录
mkdir /data/apps/cdh_alert/
mkdir /data/log/cdh_alert
cd /data/apps/cdh_alert/
#安装python依赖
pip3 install dingtalkchatbot
将对应的脚本上传至服务器
cdh_alert_send.sh
#!/usr/bin/env bash
# 抓告警信息
cat $1 > /data/log/cdh_alert/alert.log
# 告警信息发送
ALERT_INFO=`cat $1 | python3 /data/apps/cdh_alert/cdh_alert.py`
echo ${ALERT_INFO}
cdh_alert.py
#!/usr/bin/env python
#coding: utf8
import sys
import json
import time
from dingtalkchatbot.chatbot import DingtalkChatbot
#接收CDH报警发送盯盯群脚本
if __name__ == "__main__":
myfile = sys.stdin
alert_data = json.load(myfile)
content = "### CDH集群告警\n"
for i in range(0, len(alert_data)):
alert=alert_data[i]["body"]["alert"]
attributes=alert["attributes"]
timestamp= time.localtime(alert["timestamp"]["epochMs"]/1000)
content = content +"> 时间:**"+time.strftime("%Y-%m-%d %H:%M:%S",timestamp)+"**\n"
content = content +"> 集群名称:"+ ','.join(attributes["CLUSTER_DISPLAY_NAME"])+"\n"
content = content +"> 服务名:"+ ','.join(attributes["SERVICE"]) +"\n"
content = content +"> 角色名:"+ ','.join(attributes["ROLE_TYPE"]) +"\n"
content = content +"> 主机名:"+ ','.join(attributes["HOSTS"]) +"\n"
content = content +"> 内容:"+alert["content"] +"\n"
content = content +"> 详情:"+alert["source"]+"\n"
content = content +"> ---------------------------------------\n"
print(content)
robot= "https://oapi.dingtalk.com/robot/send?access_token=xxx"
ding = DingtalkChatbot(robot)
ding.send_text(msg=content,is_at_all=False)
修改告警目录下所有脚本的权限和组
chown -R cloudera-scm:cloudera-scm /data/apps/cdh_alert
chmod 755 -R /data/apps/cdh_alert
chown -R cloudera-scm:cloudera-scm /data/log/cdh_alert
在Cloudera Manager上配置自定义告警服务的脚本路径,找到cm的配置,Alert Publisher配置中找到自定义报警脚本的配置:alert.script.path
重启Cloudera Manager服务,自定义告警配置完成
报警测试
本环境为个人的测试环境,手动kill掉集群的一个Spark的SPARK_YARN_HISTORY_SERVER服务,看是否可以实现自定义告警
钉钉群里的告警记录