CDH 大数据管理平台
CDH(Cloudera Distribution Hadoop)是一个企业级的大数据平台,由 Cloudera 公司提供,它包含了 Apache Hadoop 生态系统中的多种开源组件,并对其进行了优化和集成,以支持大规模数据存储、处理和分析。CDH 通过提供易于管理的界面、高级安全功能、以及对 SQL 和 NoSQL 数据模型的支持,帮助企业实现数据湖的构建、数据仓库的现代化以及实时分析等大数据需求。
Alert Publisher
Alert Publisher 组件是 Cloudera Manager 提供的一个服务,它负责将集群的告警信息转发到不同的目标,比如邮件、SNMP 或自定义告警脚本。Alert Publisher 服务可以配置以发送测试警报,并支持通过自定义脚本来处理和转发告警信息,使得告警信息可以根据用户的需求被发送到不同的平台,如企业微信群、钉钉群或自定义的 Webhook 服务。此外,Alert Publisher 服务还允许用户通过 Cloudera Manager 的 Web 界面配置电子邮件警报信息,包括邮件服务器设置、发件人和收件人邮箱等。通过这种方式,运维人员可以在 CDH 集群出现问题时第一时间得到通知,从而及时处理。
外部事件检测
观测云是一款专为 IT 工程师打造的全链路可观测产品,它集成了基础设施监控、应用程序性能监控和日志管理,为整个技术栈提供实时可观察性。这款产品能够帮助工程师全面了解端到端的用户体验追踪,了解应用内函数的每一次调用,以及全面监控云时代的基础设施。此外,观测云还具备快速发现系统安全风险的能力,为数字化时代提供安全保障。
外部事件检测用于接收第三方系统产生的异常记录并生成相关事件。通过配置检测规则中的 Webhook 地址,第三方系统可以将异常事件或记录以 POST 请求方式发送到观测云进行统一监控和告警管理。
操作步骤
配置外部事件检测 API
登陆观测云,选择监控 -> 新建监控器 -> 外部事件检测 ,填写基础信息,复制 webhook 地址,点击保存。
配置告警策略
在上一步创建的外部事件检测,可以配置告警策略,当系统产生事件时,根据告警策略,告警会进一步发送到通知对象,如钉钉、企业微信等。
编写 send_alert.sh 脚本
send_alert.sh
脚本主要用于接收 Cloudera Manager 的告警事件,并格式化数据调用 外部事件检测API 上报数据到观测云平台。需要在 Alert Publisher 所在的主机上编写 send_alert.sh
脚本。
#!/bin/bash
# 设置日志文件路径
LOG_FILE="/opt/alert_hook/alert_app.log"# 设置日志级别和格式
LOG_FORMAT="%(asctime)s - %(name)s - %(levelname)s - %(message)s"
TZ='Asia/Shanghai'
# 创建日志文件并设置日志格式
touch "$LOG_FILE"
echo "$(date '+%Y-%m-%d %H:%M:%S') 开始日志记录" >> "$LOG_FILE"# 函数:发送HTTP POST请求
ew_robot() {local data="$1"# local webhook="https://openapi.guance.com/api/v1/push-events/xxxx"local webhook="<替换webook地址>"local headers="Content-Type: application/json"local response# echo "$(curl -X POST -H $headers -d $data $webhook)"# 使用curl发送POST请求response=$(curl -X POST -H "$headers" -d "$data" "$webhook")echo "$(date '+%Y-%m-%d %H:%M:%S') 响应结果 $response" >> "$LOG_FILE"
}# 读取JSON数据
# 假设JSON数据通过管道传递给脚本,如echo '{"json":"data"}' | ./script.sh
# 这里使用jq来解析JSON,需要先安装jq工具
cat $1 >> /opt/alert_hook/alert.log
alert_data=$(cat $1)
#echo $alert_data
# 遍历JSON数组
#IFS=$'\n' read -d '' -r -a alert_data <<< "$alert_data"jq -c '.[]' $1 | while IFS= read -r data; do# 在这里执行你的命令# 解析JSON数据alert=$(echo "$data" | jq -r '.body.alert')attr=$(echo "$data" | jq -r '.body.alert.attributes')
# 解析JSON数据alert=$(echo "$data" | jq -r '.body.alert')attr=$(echo "$data" | jq -r '.body.alert.attributes')timestamp=$(echo "$attr" | jq -r '.__persist_timestamp[0]')hosts=$(echo "$attr" | jq -r '.HOSTS[0]') || hosts="-"service=$(echo "$attr" | jq -r '.SERVICE[0]') || service="-"message=$(echo "$alert" | jq '.content|tostring')message=$(echo "$message" | sed 's/"//g')category=$(echo "$attr" | jq -r '.CATEGORY[0]')status=$(echo "$attr" | jq -r '.SEVERITY[0]') // 新增case "$status" in"IMPORTANT")status="error";;"CRITICAL")status="critical";;*)status="ok";;esac# 构建数据结构 调整 message的格式,message的格式最终会在对应的渠道里面进行展示,这里只作为模板,可以进行调整message的内容输出data=$(echo "{\"event\": {\"dimension_tags\": {\"severity\": \"$(echo "$attr" | jq -r '.SEVERITY[0]')\",\"cluster\": \"$(echo "$attr" | jq -r '.CLUSTER[0]')\",\"service\": \"$service\",\"hosts\": \"$hosts\",\"category\": \"$category\"},\"message\": \">系统:测试\n>等级: $status \n>内容:$message\n>来源:Cloudera Manager 管理平台上报\", \"status\": \"$status\",\"title\": \"$(echo "$attr" | jq -r '.ALERT_SUMMARY[0]')\"},\"extraData\": {\"event_time\": \"$timestamp\",\"error_source\": \"$(echo "$alert" | jq -r '.source')\"}}")# 发送请求并记录结果echo "$(date '+%Y-%m-%d %H:%M:%S') 请求体 $data" >> "$LOG_FILE"result=$(ew_robot "$data")done
- dimension_tags:可以添加额外的 tag,会上报到观测云,可以配置多个
- webhook: 调用观测云的 api 地址,需要在观测云上进行配置,参考 【外部事件监控器】事件接受 - 观测云文档
- 调整 message 的格式,message 的格式最终会在对应的渠道里面进行展示,这里只作为模板,可以进行调整 message 的内容输出
需要改变文件归属 chown cloudera-scm:cloudera-scm -R send_alert.sh
,同时配置可执行权限 chmod +x send_alert.sh
。
同时,该脚本依赖 jq 组件进行 json 格式的数据解析,jq 下载地址 Releases · jqlang/jq · GitHub
下载完成后,需要将 jq 放到 /usr/bin 下面,然后执行 jq 命令。
Cloudera Manager 配置脚本
在 Alert Publisher 所在的主机上编写 send_alert.sh
脚本后,需要在 Cloudera Management Service
配置告警脚本,可以理解为这是一个 webhook,但不支持 url 的那种。
添加 send_alert.sh
脚本,用于接收 cm 的告警并转化后推送到观测云平台。
- 邮件格式调整为
json
- 自定义脚本为
/opt/alert_hook/send_alert.sh
效果展示
可以主动在主机上 kill 一个进程,比如 HBase、Zookeeper、DataNode、NameNode 等,会触发告警,如下:
登陆观测云平台,点击事件菜单,可以看到新产生的事件信息,并通过详情可以看到具体的内容。