使用外部事件检测接入 CDH 大数据管理平台告警

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 等,会触发告警,如下:

登陆观测云平台,点击事件菜单,可以看到新产生的事件信息,并通过详情可以看到具体的内容。

相关推荐
鱼宵8 分钟前
LangChain4j RAG 流水线:手写问答全流程,给 AI 开卷考试
大数据·人工智能·机器学习·langchain4j
蝶依斓(湖南)全案整装17 分钟前
整装企业环保健康交付内容写作方法:空气健康、环保材料与检测标准的非空泛表达
大数据·人工智能
计算机编程指导师23 分钟前
【大数据毕设】基于Hadoop+Django乳腺癌数据分析与可视化系统选题推荐 源码 毕业设计 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·毕业设计·课程设计·乳腺癌
计算机编程指导师37 分钟前
Python毕设怎么做?基于hadoop的商家优惠券营销效果数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·spark·毕业设计·课程设计·优惠券
吴声子夜歌40 分钟前
Docker入门与实战——实战案例(分布式处理与大数据平台)
大数据·分布式·docker
计算机编程指导师41 分钟前
【Python毕设推荐】基于Hadoop+Spark的商场商铺运行数据分析与可视化系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习
大数据·hadoop·python·计算机·spark·课程设计·商场商铺
Leo.yuan9 小时前
2026年实时数据同步工具怎么选?GoldenGate、Striim、SeaTunnel、FineDataLink 5.0横评
大数据
sm_926787059 小时前
RFID 标签打印的技术实现要点与二次开发实践
java·大数据·前端·c++·编辑器
龙亘川9 小时前
AI 协同赋能城市治理:支撑政协数字化履职的技术路径探析
大数据·人工智能·智慧城市·开源软件·数据可视化
逸模10 小时前
BIM在连锁餐饮装修中的应用:不只是画三维图
大数据·数据库·人工智能·物联网·建模