python---linux系统CPU、内存、磁盘监控,钉钉告警

使用以下公式生成签名:

import time
import hmac
import hashlib
import base64

timestamp = str(int(time.time() * 1000))
secret = '你的加签密钥'

string_to_sign = timestamp + "\n" + secret
hmac_code = hmac.new(secret.encode('utf-8'), string_to_sign.encode('utf-8'), hashlib.sha256).digest()
sign = base64.b64encode(hmac_code).decode('utf-8')

print("Timestamp:", timestamp)
print("Sign:", sign)

替换脚本中Access_token、Timestamp、Sign

import os
import json
import requests

# 钉钉机器人的Webhook URL
dingding_webhook = 'https://oapi.dingtalk.com/robot/send?access_token=Access_token×tamp=Timestamp&sign=Sign'


# 获取主机名
def get_hostname():
    # 获取系统信息
    uname_info = os.uname()
    # 获取主机名
    hostname = uname_info.nodename
    return hostname


# 获取CPU使用率
def get_cpu_usage():
    cpu_usage = os.popen("top -b -n1 | grep 'Cpu(s)'").readline()
    cpu_usage = cpu_usage.split()
    cpu_usage = cpu_usage[1].split('%')[0]
    return float(cpu_usage)


# 获取内存使用率
def get_memory_usage():
    mem_usage = os.popen("free | grep Mem").readline()
    mem_usage = mem_usage.split()
    total_mem = float(mem_usage[1])
    used_mem = float(mem_usage[2])
    mem_usage = (used_mem / total_mem) * 100
    return mem_usage


# 获取磁盘使用率
def get_disk_usage():
    disk_usage = os.popen("df -h | grep -w '/'").readline()
    disk_usage = disk_usage.split()
    disk_usage = disk_usage[4].replace('%', '')
    return float(disk_usage)


# 发送钉钉告警
def send_dingding_alert(message):
    headers = {'Content-Type': 'application/json'}
    data = {
        "msgtype": "text",
        "text": {
            "content": message
        }
    }
    requests.post(dingding_webhook, headers=headers, data=json.dumps(data))
    # try:
    #     response = requests.post(dingding_webhook, headers=headers, data=json.dumps(data))
    #     if response.status_code != 200:
    #         print(f"发送告警失败,状态码:{response.status_code}, 响应内容:{response.text}")
    #     else:
    #         print("告警发送成功")
    # except requests.exceptions.RequestException as e:
    #     print(f"发送告警时发生异常:{e}")


# 主函数
def main():
    hostname = get_hostname()
    cpu_usage = get_cpu_usage()
    memory_usage = get_memory_usage()
    disk_usage = get_disk_usage()

    if cpu_usage > 80:
        send_dingding_alert(f"{hostname} CPU使用率超过80%: 当前使用率为 {cpu_usage}%")
    if memory_usage > 80:
        send_dingding_alert(f"{hostname} 内存使用率超过80%: 当前使用率为 {memory_usage:.2f}%")
    if disk_usage > 80:
        send_dingding_alert(f"{hostname} 磁盘使用率超过80%: 当前使用率为 {disk_usage}%")


if __name__ == "__main__":
    main()

你可能感兴趣的:(python,python,linux,钉钉)