采用Cloudera Mananger提供的自定义告警脚本的方式,收集告警信息并转发到钉钉群中(钉钉群机器人)


主要内容:

  • 实现Cloudera Manager告警的钉钉群机器人转发
  • 实现思路是采用cloudera manager支持的自定义告警脚本方式,在脚本中调用钉钉群机器人的api

环境:

  • CDH 6.3.2
  • 钉钉 5.0.16

添加群机器人

分别点击:xxx群->鼠标右键->群设置->智能群助手->添加机器人->自定义->添加->填写机器人名称及安全设置->完成
图片.png


配置Cloudera Manager平台自定义告警脚本

查看CDH Alert Publisher 所在的机图片.png登录到对应的服务器,新建告警脚本目录

  1. mkdir /data/apps/cdh_alert/
  2. mkdir /data/log/cdh_alert
  3. cd /data/apps/cdh_alert/
  4. #安装python依赖
  5. pip3 install dingtalkchatbot

将对应的脚本上传至服务器
cdh_alert_send.sh

  1. #!/usr/bin/env bash
  2. # 抓告警信息
  3. cat $1 > /data/log/cdh_alert/alert.log
  4. # 告警信息发送
  5. ALERT_INFO=`cat $1 | python3 /data/apps/cdh_alert/cdh_alert.py`
  6. echo ${ALERT_INFO}

cdh_alert.py

  1. #!/usr/bin/env python
  2. #coding: utf8
  3. import sys
  4. import json
  5. import time
  6. from dingtalkchatbot.chatbot import DingtalkChatbot
  7. #接收CDH报警发送盯盯群脚本
  8. if __name__ == "__main__":
  9. myfile = sys.stdin
  10. alert_data = json.load(myfile)
  11. content = "### CDH集群告警\n"
  12. for i in range(0, len(alert_data)):
  13. alert=alert_data[i]["body"]["alert"]
  14. attributes=alert["attributes"]
  15. timestamp= time.localtime(alert["timestamp"]["epochMs"]/1000)
  16. content = content +"> 时间:**"+time.strftime("%Y-%m-%d %H:%M:%S",timestamp)+"**\n"
  17. content = content +"> 集群名称:"+ ','.join(attributes["CLUSTER_DISPLAY_NAME"])+"\n"
  18. content = content +"> 服务名:"+ ','.join(attributes["SERVICE"]) +"\n"
  19. content = content +"> 角色名:"+ ','.join(attributes["ROLE_TYPE"]) +"\n"
  20. content = content +"> 主机名:"+ ','.join(attributes["HOSTS"]) +"\n"
  21. content = content +"> 内容:"+alert["content"] +"\n"
  22. content = content +"> 详情:"+alert["source"]+"\n"
  23. content = content +"> ---------------------------------------\n"
  24. print(content)
  25. robot= "https://oapi.dingtalk.com/robot/send?access_token=xxx"
  26. ding = DingtalkChatbot(robot)
  27. ding.send_text(msg=content,is_at_all=False)

修改告警目录下所有脚本的权限和组

  1. chown -R cloudera-scm:cloudera-scm /data/apps/cdh_alert
  2. chmod 755 -R /data/apps/cdh_alert
  3. chown -R cloudera-scm:cloudera-scm /data/log/cdh_alert

在Cloudera Manager上配置自定义告警服务的脚本路径,找到cm的配置,Alert Publisher配置中找到自定义报警脚本的配置:alert.script.path
图片.png
重启Cloudera Manager服务,自定义告警配置完成


报警测试

本环境为个人的测试环境,手动kill掉集群的一个Spark的SPARK_YARN_HISTORY_SERVER服务,看是否可以实现自定义告警
图片.png
钉钉群里的告警记录
图片.png