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

news/2025/3/22 15:55:32/

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

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


http://www.ppmy.cn/news/1581168.html

相关文章

SQL Server——表数据的插入、修改和删除

目录 一、引言 二、表数据的插入、修改和删除 &#xff08;一&#xff09;方法一&#xff1a;在SSMS控制台上进行操作 1.向表中添加数据 2.对表中的数据进行修改 3.对表中的数据进行删除 &#xff08;二&#xff09;方法二&#xff1a;使用 SQL 代码进行操作 1.向表中添…

Chrome-Edge-IDEA-Win 常用插件-工具包

Chrome-Edge-IDEA-Win 常用插件-工具包 Chrome-Edge-IDEA-Win 常用插件-工具包谷歌插件chropathJSONViewOctotree - GitHub code treeXPath Helper书签侧边栏篡改猴Print Edit WEEdge浏览器插件IDEA插件CodeGlance Pro 代码迷你缩放图插件Alibaba Cloud ToolkitAlibaba Java Co…

QT笔记----QCheckBox

文章目录 概要1、QCheckBox 的基本概念2、单个QCheckBox3、多个QCheckBox同时应用3.1、实现效果3.2、实现Demo 概要 在 Qt 应用程序开发中&#xff0c;QCheckBox 是一个常用的用户界面元素&#xff0c;它允许用户在两种状态&#xff08;选中和未选中&#xff09;之间进行切换&a…

从零开始学Seata:分布式事务的终极解决方案

一、什么是Seata&#xff1f;—— 分布式事务的“全自动管家” Seata 是一款开源的分布式事务框架&#xff0c;旨在解决微服务架构下的数据一致性问题。其核心目标是**“让开发者专注业务&#xff0c;自动管理事务”**&#xff0c;通过 AT模式&#xff08;Automatic Transacti…

威联通 后台可用命令查看Bash

一、查看所有可用命令的方法 列出所有外部命令&#xff08;二进制文件&#xff09; 外部命令通常存放在系统路径&#xff08;如 /bin, /usr/bin, /sbin, /usr/sbin&#xff09;中&#xff1a; bash ls /bin /usr/bin /sbin /usr/sbin # 直接列出命令目录&#xff08;结果较长&…

Jenkins 容器化部署 uniapp H5 项目

jenkins 容器化部署 uniapp H5 项目 背景 Linux 上使用 uniapp-cli不顺利windows server 服务器安装 Docker 环境不顺利 思路 在 Windows 机器上安装 HBuilder调用 uniapp-cli 打包 H5 文件将输出文件发送到 有 Docker 环境的服务器上打包 Docker 镜像推送镜像到镜像仓库 …

前端网络请求

为什么需要做网络请求&#xff1f; 例如哔哩哔哩官网上展现的资源其实都是通过请求获取的&#xff1a; 是从霹雳霹雳服务器上请求信息&#xff0c;然后传输到客户端本地&#xff08;浏览器&#xff09; 页面资源越多&#xff0c;传输的的次数越多&#xff0c;每一次的传输就被…

第P8周:YOLOv5-C3模块实现

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 &#x1f3e1; 我的环境&#xff1a; ● 语言环境&#xff1a;Python3.8 ● 编译器&#xff1a;Jupyter Lab ● 数据集&#xff1a;天气识别数据集 ● 深度学…