【收藏级】钉钉告警全套配置模板与脚本

2026-10-14 来源: 点击量

【收藏级】钉钉告警全套配置模板与脚本

适用场景:服务器监控、Swoole 服务、数据库、CVM、日志异常、接口监控、自动化运维告警;基于钉钉机器人 Webhook。 ⚠️ 安全提醒:不要把 Webhook 密钥硬编码公开提交到 Git;建议配置 IP 白名单、加签,防止恶意调用刷消息。【收藏级】钉钉告警全套配置模板与脚本

一、前置准备:钉钉机器人创建步骤

钉钉群 → 群设置 → 机器人 → 添加自定义机器人

安全设置三选一(推荐加签,安全性最高)

自定义关键词:消息内容必须包含关键词才放行

IP 地址:限制调用服务器 IP

加签:timestamp + secret 签名校验(生产首选)

复制 Webhook 地址,保存access_token和secret(加签用)

Webhook 格式: https://oapi.dingtalk.com/robot/send?access_token=xxx

二、消息类型说明

钉钉机器人支持:文本、Markdown、链接、整体卡片。运维告警优先 Markdown,支持标题、代码块、分段,可读性最好。

三、Shell 脚本模板(Linux 服务器通用,支持加签)

文件名:dingtalk_alert.sh

#!/bin/bash

# 钉钉webhook配置

ACCESS_TOKEN="替换成你的token"

SECRET="替换你的secret,不用加签就留空"

DING_URL="https://oapi.dingtalk.com/robot/send"

# 告警入参

TITLE="$1"

CONTENT="$2"

# 加签逻辑(如果不使用加签,直接注释这一段)

if [ -n "$SECRET" ];then

timestamp=$(date +%s)000

sign_str="${timestamp}n${SECRET}"

sign=$(printf "$sign_str" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64)

sign_urlencode=$(echo $sign | python3 -c "import urllib.parse, sys;print(urllib.parse.quote(sys.stdin.readline().strip()))")

DING_URL="${DING_URL}?access_token=${ACCESS_TOKEN}×tamp=${timestamp}&sign=${sign_urlencode}"

else

DING_URL="${DING_URL}?access_token=${ACCESS_TOKEN}"

fi

# Markdown消息体

POST_DATA=$(cat <

{

"msgtype": "markdown",

"markdown": {

"title": "${TITLE}",

"text": "## ${TITLE}n> 告警时间:$(date '+%Y-%m-%d %H:%M:%S')nn${CONTENT}"

}

}

EOF

)

# 发送请求

curl -s -X POST "${DING_URL}"

-H "Content-Type: application/json"

-d "${POST_DATA}"

使用示例

chmod +x dingtalk_alert.sh

./dingtalk_alert.sh "【紧急告警】服务器CPU过高" "服务器:10.0.0.1nCPU使用率:96%n负载:12.3"

四、Python 脚本模板(推荐,跨平台,监控系统常用)

文件名:ding_alert.py

import time

import hmac

import hashlib

import base64

import urllib.parse

import requests

class DingTalkRobot:

def __init__(self, access_token, secret=None):

self.access_token = access_token

self.secret = secret

self.webhook = "https://oapi.dingtalk.com/robot/send"

def get_sign_url(self):

timestamp = str(round(time.time() * 1000))

secret_enc = self.secret.encode('utf-8')

string_to_sign = '{}n{}'.format(timestamp, self.secret)

string_to_sign_enc = string_to_sign.encode('utf-8')

hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()

sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

url = f"{self.webhook}?access_token={self.access_token}×tamp={timestamp}&sign={sign}"

return url

def send_markdown(self, title, text):

if self.secret:

url = self.get_sign_url()

else:

url = f"{self.webhook}?access_token={self.access_token}"

msg = {

"msgtype": "markdown",

"markdown": {

"title": title,

"text": f"## {title}n> 告警时间:{time.strftime('%Y-%m-%d %H:%M:%S')}nn{text}"

}

}

resp = requests.post(url, json=msg, timeout=10)

return resp.json()

if __name__ == '__main__':

# ========== 配置区 ==========

ACCESS_TOKEN = "替换你的token"

SECRET = "替换secret,无加签填None"

# ============================

robot = DingTalkRobot(ACCESS_TOKEN, SECRET)

res = robot.send_markdown(

title="【通知】服务检测",

text="Swoole服务状态异常n主机:10.0.0.2n进程已退出"

)

print(res)

五、常用集成模板

1. 服务器监控 + crontab 定时检查(示例:检测端口存活)

#!/bin/bash

# check_port.sh

HOST="127.0.0.1"

PORT="9501"

nc -zv $HOST $PORT

if [ $? -ne 0 ];then

/root/dingtalk_alert.sh "【告警】Swoole服务端口异常" "服务地址:$HOST:$PORTn端口无法连通,服务宕机"

fi

crontab 添加,每分钟检测:

* * * * * /root/check_port.sh >> /var/log/check_port.log 2>&1

2. Prometheus Alertmanager 钉钉 Webhook 模板(运维标配)

Alertmanager 配置中使用 webhook_configs,可直接对接上面 python 脚本,也可以使用现成 alertmanager 钉钉转发服务。 Markdown 告警模板示例内容:

## 【Prometheus告警】{{ .CommonLabels.alertname }}

> 级别:{{ .CommonLabels.severity }}

> 主机:{{ .CommonLabels.instance }}

> 告警时间:{{ .StartsAt.Format "2006-01-02 15:04:05" }}

{{ range .Alerts }}

- 告警描述:{{ .Annotations.description }}

{{ end }}

3. MySQL 异常 / 日志关键字告警模板(文本消息)

./dingtalk_alert.sh "【MySQL告警】慢查询激增" "数据库:db-prodn慢查询数量5分钟超过20条n请检查SQL语句"

六、钉钉告警限制(踩坑必看)

限流:单个机器人,每分钟最多 20 条消息,超过直接丢弃;高频告警要做告警合并、静默(抑制规则),防止轰炸群。

消息长度:markdown 文本不能超过 4000 字符,超长日志截断发送。

关键词限制:开启关键词后,消息必须包含关键词,否则返回 400。

网络:服务器需要能访问公网oapi.dingtalk.com;内网隔离服务器需要转发代理。

安全:禁止 Webhook 泄露,一旦泄露,攻击者可以疯狂发消息;优先启用加签。

七、最佳实践

分级告警:通知 / 警告 / 紧急,不同级别 @不同人,紧急告警 @all。 markdown 增加 @人:@13800138000(手机号)

"at": {

"atMobiles": ["13800138000"],

"isAtAll": false

}

告警降噪:增加告警抑制、重复告警冷却(比如同一条告警 5 分钟内不再重复推送)

增加告警附加信息:主机 IP、业务环境、进程 ID、简单排查指引

日志记录:脚本输出日志,方便排查 “告警没收到” 问题

测试:上线前手动执行脚本,验证消息能否正常投递

相关文章
  • 【收藏级】钉钉告警全套配置模板与脚本
    【收藏级】钉钉告警全套配置模板与脚本

    【收藏级】钉钉告警全套配置模板与脚本适用场景:服务器监控、Swoole 服务、数据库、CVM、日志异常、接口监控、自动化运维告警;基于钉钉机器人 Webhook。 ⚠️ 安全提醒:不要把 Webhook 密钥硬编码公开提交到 Git;建议配置 IP 白名单、加签,防止恶意调用刷消息。一...

  • Docker容器优化详解:从入门到生产环境实践
    Docker容器优化详解:从入门到生产环境实践

    Docker容器优化详解:从入门到生产环境实践Docker 容器优化不是“把镜像做小”这么简单。真正要解决的是:镜像构建效率、运行时资源隔离、网络与存储性能、日志与监控、安全合规、编排与治理。下面按从入门到生产的路径展开。一、入门阶段:先把容器跑稳刚接...

  • 为什么推荐CDN电子书?深度对比与实测
    为什么推荐CDN电子书?深度对比与实测

    为什么推荐 CDN 电子书?深度对比与实测电子书(EPUB/PDF/MOBI)属于静态大文件,非常适合 CDN 分发。很多独立作者、知识付费、出版社直接用源站服务器托管电子书,流量一涨就卡顿、带宽跑满、跨地区下载慢。本篇是实测对比:源站直连、对象存储、CDN 分发三套方案,...

  • Docker安装路线图完全指南:运维工程师必备手册
    Docker安装路线图完全指南:运维工程师必备手册

    安装前准备1. 确认系统架构Windows:打开「设置 → 系统 → 系统信息」,查看「系统类型」确认是 x64 还是 ARM64macOS:点击左上角苹果图标 → 关于本机,查看「芯片」确认是 Apple Silicon(M1/M2/M3)还是 IntelLinux:终端执行 uname -m,输出 x86_64 为 AMD64,aarch64 为 ARM642. 卸载旧...

  • 为什么推荐Traefik?深度对比与实测
    为什么推荐Traefik?深度对比与实测

    Traefik(发音为 traffic)是一款专为微服务架构和云原生环境设计的现代化开源 HTTP 反向代理和负载均衡器。与传统的反向代理(如 Nginx)不同,Traefik 的核心优势在于自动化服务发现与动态配置,它能实时监听基础设施的变化并自动更新路由规则,全程无需重启服务。核心...

  • 为什么推荐全站加速?深度对比与实测
    为什么推荐全站加速?深度对比与实测

    全站加速(通常被称为 WSA、ECDN 或 ICDN)是一种融合了动态加速和静态加速的网站加速解决方案。它专门针对动静态内容混合的网站,能够同时解决静态资源加载慢和动态请求延迟高的问题。核心原理:动静分离与智能路由全站加速的核心在于“动静分离”和“智能路由...