有时候需要做个某些服务的状态监控,用钉钉机器人发通知挺方便的。可以用shell脚本配合crontab检测状态,检测到异常就调用python脚本发起告警。
python内容
此处用的python3,需要先安装requests模块。pip install requests -i https://mirrors.aliyun.com/pypi/simple
# filename: dingtalk.py import requests import json import sys def gaojing(data): # 将消息提交给钉钉机器人 headers = {'Content-Type': 'application/json;charset=utf-8'} # 注意替换钉钉群的机器人webhook webhook = "https://oapi.dingtalk.com/robot/send?access_token=xxxx" requests.post(url=webhook,data=json.dumps(data),headers=headers) def get_data(text_content): # 返回钉钉机器人所需的文本格式 text = { "msgtype": "text", "text": { "content": text_content }, } # print(json.dumps(text)) return text if __name__ == "__main__": # 命令行第一个参数为告警内容 text_content = sys.argv[1] data = get_data(text_content) gaojing(data)
配合shell和crontab
假设有个java进程名为test.jar,监听1234端口
#!/usr/bin/env bash # filename: get_java_status.sh netstat -anp | grep -v LISTENING | grep LISTEN | grep 1234 if [ $(echo $?) -eq 0 ];then exit 1 else # 调用python脚本 python3 /home/scripts/dingtalk.py "test.jar服务异常,1234端口不存在" fi
crontab每5分钟检测一次:
*/5 * * * * /home/scripts/get_java_status.sh