# alertmanagerWebhook_v2 **Repository Path**: wxd_ops/alertmanager-webhook_v2 ## Basic Information - **Project Name**: alertmanagerWebhook_v2 - **Description**: 实现将告警信息发送到不同的媒介(邮箱、企业微信群组、钉钉群组),支持非容器化部署、docker部署、k8s部署。支持redis单节点、主从、集群模式 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-03-31 - **Last Updated**: 2025-08-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: Go语言, alertmanager, 运维 ## README # alertmanagerWebhook ## 介绍 实现将告警消息重新清洗转换、切割并发送到不同的媒介(邮箱、企业微信群组、钉钉群组),并@对应的接收者 ##流程图 ![输入图片说明](img%E6%B5%81%E7%A8%8B%E5%9B%BE.png) ### 告警处理流程 1. Alertmanager发送POST请求到webhook端点 2. 路由分发到对应的通知渠道处理器 (api/send_*.go) 3. 调用公共组件进行消息转换 (common/markdown_transformer.go) 4. 使用消息生成器构建告警内容 (common/message_generator.go) 5. 调用通知服务发送告警 (common/SendNotification.go) ### 典型调用链示例 ```yaml Alertmanager → HTTP(POST)请求 → routers → api/send_wechat_notify.go → common.SendWeChatNotification → common.Transform → common.MessageGenerator.GenerateAlertContent → utils.SendWebhookRequest → 企业微信API ``` ### 项目结构 ```yaml alertmanagerWebhook/ ├── api/ # 各通知渠道的API处理 ├── cmd/ # 主程序入口 ├── common/ # 公共组件和工具 ├── config/ # 配置结构体定义 ├── core/ # 核心初始化逻辑 ├── global/ # 全局变量 ├── routers/ # 路由定义 ├── utils/ # 实用工具 └── settings.yaml # 主配置文件 ``` ### 以下是项目的主要特点及功能 1. **多渠道通知支持**: - 支持钉钉机器人通知 - 支持企业微信通知 - 支持邮件通知 ### 项目描述 项目名称 : 测试项目 (配置在 `settings.yaml` 中) ### Redis主要承担以下几个关键作用 1. 告警状态跟踪与管理 存储告警触发时的关键信息(如首次触发时间、告警次数等) 2. 指标值缓存 缓存Prometheus查询结果(告警值和恢复值分别存储) 3. 企业微信Token管理 缓存企业微信access_token 通过 `GetWeChatAccessToken` 实现 4. 数据清理机制 告警恢复后清理相关Redis数据 通过 `ConfirmAlertResolution` 实现 ### 核心功能 1. 多通道告警转发 : - 支持钉钉机器人通知 (通过 `SendToDingDing` 实现) - 支持企业微信通知 (通过 `SendToQywechat` 实现) - 支持邮件通知 (通过 `EmailTransformer` 实现) 2. 告警消息处理 : - 告警内容格式化 (通过 `MessageGenerator` 实现) - 支持从Prometheus查询当前指标值 (通过 `PrometheusUtil` 实现) - 告警消息分割 (通过 `SplitCombinedAlerts` 实现) 3. 系统特性 : - 基于Gin框架的HTTP服务 - 完善的日志系统 (通过 `SetupLogrus` 实现) - 优雅的关闭处理 (通过 `HandleShutdown` 实现) - Redis集成用于告警状态跟踪 4. 配置文件 : - 主要配置在 `settings.yaml` 中 - 支持钉钉、企业微信、邮件、Redis等配置 - 系统参数如端口、日志配置等 5. 代码统计 ```shell [root@localhost alertmanagerWebhook]# cloc . 42 text files. 42 unique files. 4 files ignored. github.com/AlDanial/cloc v 1.70 T=0.29 s (135.6 files/s, 6880.4 lines/s) ------------------------------------------------------------------------------- Language files blank comment code ------------------------------------------------------------------------------- Go 37 303 119 1506 YAML 1 4 3 36 Markdown 1 3 0 5 ------------------------------------------------------------------------------- SUM: 39 310 122 1547 ------------------------------------------------------------------------------- ``` 6. 制作镜像--Dockerfile #### 第一阶段:构建应用 FROM golang:1.23-alpine AS builder WORKDIR /export/alertmanagerWebhook ENV GO111MODULE=on \ GOPROXY=https://goproxy.cn,direct #### 复制源代码 COPY . . #### 构建应用 RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o alertmanager-webhook ./cmd/main.go #### 第二阶段:运行环境 FROM alpine:latest #### 安装 tzdata 包,设置时区 RUN apk update && apk add --no-cache tzdata #### 设置容器的时区为宿主机的时区(例如,Asia/Shanghai) RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo "Asia/Shanghai" > /etc/timezone #### 设置工作目录 WORKDIR /export/alertmanagerWebhook #### 从构建阶段复制二进制文件和配置文件 COPY --from=builder /export/alertmanagerWebhook/alertmanager-webhook . COPY --from=builder /export/alertmanagerWebhook/settings.yaml . #### 创建日志目录 RUN mkdir -p /export/alertmanagerWebhook/logs EXPOSE 19093 #### 启动应用 ENTRYPOINT ["sh", "-c", "./alertmanager-webhook && tail -f /export/alertmanagerWebhook/logs/alertmanagerWebhook.log"] ### 构建镜像 docker build -t alertmanager-webhook:latest . #### 启动镜像 docker run -d \ -p 19093:19093 \ --name alertmanager-webhook \ alertmanager-webhook:latest 7. 编写makefile - 基本构建命令 - make build - 编译项目 - make run - 编译并运行项目 - make test - 运行测试 - make clean - 清理构建文件和日志 - Docker相关命令 - make docker-build - 构建Docker镜像 - make docker-run - 运行Docker容器(带数据卷挂载) - 辅助命令 - make deps - 下载和整理依赖 - make fmt - 格式化代码 - 版本控制 - 自动获取构建时间和Git提交哈希 - 可通过修改VERSION变量控制版本号 8. 注意事项 1、企业微信 cip.cc查看自己的网络出口IP 网页登录企业微信,进入应用管理,选择自己创建的应用,点击企业可信IP,配置cip.cc的IP地址,保存,这样就能确保接收人的手机号被转换为名称而被@ 2、钉钉 # 结果展示 ## 钉钉 ![输入图片说明](%E9%92%89%E9%92%89.jpg) ## 企业微信 ![输入图片说明](%E4%BC%81%E4%B8%9A%E5%BE%AE%E4%BF%A1.jpg) ## 邮箱 ![输入图片说明](%E9%82%AE%E7%AE%B1.jpg)