【收藏级】钉钉告警全套配置模板与脚本
【收藏级】钉钉告警全套配置模板与脚本
适用场景:服务器监控、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 容器优化不是“把镜像做小”这么简单。真正要解决的是:镜像构建效率、运行时资源隔离、网络与存储性能、日志与监控、安全合规、编排与治理。下面按从入门到生产的路径展开。一、入门阶段:先把容器跑稳刚接...
-
为什么推荐CDN电子书?深度对比与实测为什么推荐 CDN 电子书?深度对比与实测电子书(EPUB/PDF/MOBI)属于静态大文件,非常适合 CDN 分发。很多独立作者、知识付费、出版社直接用源站服务器托管电子书,流量一涨就卡顿、带宽跑满、跨地区下载慢。本篇是实测对比:源站直连、对象存储、CDN 分发三套方案,...
-
Docker安装路线图完全指南:运维工程师必备手册安装前准备1. 确认系统架构Windows:打开「设置 → 系统 → 系统信息」,查看「系统类型」确认是 x64 还是 ARM64macOS:点击左上角苹果图标 → 关于本机,查看「芯片」确认是 Apple Silicon(M1/M2/M3)还是 IntelLinux:终端执行 uname -m,输出 x86_64 为 AMD64,aarch64 为 ARM642. 卸载旧...
-
为什么推荐Traefik?深度对比与实测Traefik(发音为 traffic)是一款专为微服务架构和云原生环境设计的现代化开源 HTTP 反向代理和负载均衡器。与传统的反向代理(如 Nginx)不同,Traefik 的核心优势在于自动化服务发现与动态配置,它能实时监听基础设施的变化并自动更新路由规则,全程无需重启服务。核心...
-
为什么推荐全站加速?深度对比与实测全站加速(通常被称为 WSA、ECDN 或 ICDN)是一种融合了动态加速和静态加速的网站加速解决方案。它专门针对动静态内容混合的网站,能够同时解决静态资源加载慢和动态请求延迟高的问题。核心原理:动静分离与智能路由全站加速的核心在于“动静分离”和“智能路由...