跳至内容
钉钉自动巡检告警--完全版

钉钉自动巡检告警--完全版

March 31, 2026

钉钉自动巡检告警:

注意:钉钉机器人有使用频率限制:每个机器人最多20条/min

注意:配置前安装好相应库

功能:自动检测并定时发送hostname,datetime,cpu,mem,disk,服务状态;Zabbix面板链接可自行添加

文本格式:Markdown

代码及解释:

import psutil

import socket

import requests

import json

from datetime import datetime

  

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

  

WEBHOOK_URL = "你的钉钉群机器人token"

  

#设置合理告警阈值:

THRESHOLD_CPU = 80    #CPU

THRESHOLD_MEM = 85    #内存

THRESHOLD_DISK = 90   #磁盘

  

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

  
  

def get_sys_info():

    """获取系统基础信息"""

    # 获取主机名和当前时间(格式自定义)

    hostname = socket.gethostname()

    now_time = datetime.now().strftime("%Y-%m-%d %H-%M-%S")

  

    # 1.CPU 使用率(采样1次/s):

    cpu_usage = psutil.cpu_percent(interval=1)
    

    # 2.MEM 使用率:

    mem = psutil.virtual_memory()

    mem_usage = mem.percent

  

    # 3.DISK 使用率:

    disk = psutil.disk_usage('/')

    disk_usage = disk.percent

  

    return hostname, now_time, cpu_usage, mem_usage, disk_usage

  

def check_service(service_name):

    """检查特定进程(服务)是否在运行"""

    # 遍历当前所有进程名:

    for proc in psutil.process_iter(['name']):

        if service_name.lower() in proc.info['name'].lower():

            return "✔️ 该服务正在运行中。"

    return "❌️ 该服务已经停止!"

  

def send_markdown_msg(hostname, now_time, cpu, mem, disk, nginx_status):

    """发送 MarkDown 格式告警"""

  

    #根据状态判断标题颜色(若有异常则提醒):

    status_title = "🤚 系统巡检正常"

    if cpu > THRESHOLD_CPU or mem > THRESHOLD_MEM or disk > THRESHOLD_DISK or "❌️" in nginx_status:

        status_title = "🤦🏻‍♂️ 系统告警:检测到异常"

  

    # Markdown 内容

    markdown_content = f"""### {status_title}

**主机名称**: {hostname}

**巡检时间**: {now_time}

  

---

- **CPU 使用率**:{cpu}%  {'⚠️' if cpu > THRESHOLD_CPU else ''}

- **内存 使用率**:{mem}% {'⚠️' if mem > THRESHOLD_MEM else ''}

- **磁盘 使用率**:{disk}% {'⚠️' if disk > THRESHOLD_DISK else ''}

- **Nginx服务**: {nginx_status}

  

---

[点击查看Zabbix监控看板](http://Zabbix地址)

"""

  
  

    data = {

        "msgtype": "markdown",

        "markdown": {

            "title": "服务器巡检报告",

            "text": markdown_content

        }

    }

  

    headers = {"Content-Type": "application/json"}

    try:

        res = requests.post(WEBHOOK_URL, data=json.dumps(data), headers=headers)

        print(f"发送状态:{res.text}")

  

    except Exception as e:

        print(f"发送失败:{e}")

  

if __name__ == "__main__":

    #执行巡检

    h, t, c, m, d = get_sys_info()

  

    #可换成其他进程名

    n_status = check_service("nginx")

  

    #发送报告

    send_markdown_msg(h, t, c, m, d, n_status)

推荐:Emoji状态表情可自行复制进去。

函数及库的使用

1. 库的调用

psutil: 专门用来读取 CPU、内存、进程等硬件和系统信息。 socket: 用来获取 hostname(主机名),这在管理几十台服务器时非常重要,否则你不知道是哪台机器出的问题。 datetime: 获取当前时间,所有的运维报告必须带时间戳。

2. get_sys_info() 函数

psutil.cpu_percent(interval=1): 为什么要设置 interval=1?因为 CPU 波动非常快,瞬间 100% 并不代表有问题,采样 1 秒能得到一个更准确的平均值。

3. check_service() 函数

这是真实场景中最常用的。比如收银系统的后台进程、数据库进程,都可以通过这个函数监控。它 process_iter 遍历系统所有活着的进程名.

4. send_markdown_msg() 函数

Markdown 格式:这是企业级告警的标配。 动态预警:使用了 Python 的 f-string 和简写 if。例如 {’⚠️’ if cpu > THRESHOLD_CPU else ‘’},只有当 CPU 超过阈值时,报告里才会出现警告图标。