nagios - 使用钉钉机器人发送nagios告警
前言
现在办公很多都使用钉钉,在群聊天里面,可以创建自定义的机器人来接受消息,并发送到群里面。我们可以利用这个钉钉机器人来发送告警信息。
部署步骤
1、创建自定义机器人
在机器人管理页面选择“自定义”机器人,输入机器人名字并选择要发送消息的群。如果需要的话,可以为机器人设置一个头像。点击“完成添加”,完成后会生成 Hook 地址。
点击“复制”按钮,即可获得这个机器人对应的 Webhook 地址。
2、发送告警的脚本
这个脚本是基于 python3 写的,需要安装依赖模块 requests。
import requests
import json
import time
import sys
def send_message(token, message):
url = 'https://oapi.dingtalk.com/robot/send?access_token=' + token
headers = {
"Content-Type": "application/json"
}
data = {"msgtype": "text",
"text": {
"content": message
},
}
response = requests.post(url, json=data, headers=headers)
def get_message(title, contents):
messages = "标题:"+title+"\n\n" + "发送时间:" + \
time.strftime("%Y年%m月%d日 %H时%M分%S秒")+"\n\n内容:\n" + \
contents.replace("\\n", "\n") + "\n"
return messages
if __name__ == "__main__":
args = sys.argv
if len(args) < 4:
sys.exit(1)
token = args[3]
title = args[2]
content = args[1]
message = get_message(title, content)
print(message)
send_message(token, message)
3、设置 nagios 命令用来发送告警
在 commands.cfg 里面添加命令:(Python 的安装路径是/opt/python36)
define command{
command_name notify-host-by-dingding
command_line /opt/python36/bin/python3 /usr/local/nagios/scripts/dingding_send.py "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\nHost: $HOSTNAME$\nState: $HOSTSTATE$\nAddress: $HOSTADDRESS$\nGroup: $HOSTGROUPNAMES$\nInfo: $HOSTOUTPUT$\n\nDate/Time: $LONGDATETIME$\n" "[nagios]** $NOTIFICATIONTYPE$ Host Alert: $HOSTADDRESS$-$HOSTNAME$ is $HOSTSTATE$ **" $CONTACTEMAIL$
}
define command{
command_name notify-service-by-dingding
command_line /opt/python36/bin/python3 /usr/local/nagios/scripts/dingding_send.py "***** Nagios *****\n\nNotification Type: $NOTIFICATIONTYPE$\n\nService: $SERVICEDESC$\nHost: $HOSTALIAS$\nAddress: $HOSTADDRESS$\nGroups: $HOSTGROUPNAMES$\nState: $SERVICESTATE$\n\nDate/Time: $LONGDATETIME$\n\nAdditional Info:\n\n$SERVICEOUTPUT$\n\nService_perfdata: $SERVICEPERFDATA$" "[nagios]** $NOTIFICATIONTYPE$ Service Alert: $HOSTADDRESS$-$HOSTALIAS$/$SERVICEDESC$ is $SERVICESTATE$ **" $CONTACTEMAIL$
}
4、添加钉钉机器人模板
在 templcates.cfg 里面添加模板:
define contact{
name dingding-contact
service_notification_period 24x7
host_notification_period 24x7
service_notification_options w,u,c,r,f,s
host_notification_options d,u,r,f,s
service_notification_commands notify-service-by-dingding
host_notification_commands notify-host-by-dingding
register 0
}
5、添加联系人
在 contacts.cfg 里面设置联系人:
define contact{
contact_name dingding_robot1
use dingding-contact
alias kafka钉钉告警
email XXXX
}
nagios 默认是使用 mail 命令发送邮件,联系人里面有一个 email 选项就是填写 email 地址,我们可以替换成我们钉钉机器人的 access_token(XXXX 替换成 webhook 地址中的 access_token=后面的字符串即可),就可以将消息发送到对应的钉钉群
6、监控项目里面添加联系人
define service{
use local-service
host_name 192.168.1.100
service_description all_DISK
check_command check_nrpe/usr/local/nagios/libexec/check_all_disk.sh
contacts dingding_robot1
}
总结
钉钉发送告警是有频率限制的,每个机器人每分钟最多发送 20 条。如果超过 20 条,会限流 10 分钟。因此,对比较重要的监控项设置钉钉告警,比较不重要的还是发送邮件就可以了。
- 原文作者:Linux运维菜
- 原文链接:https://www.opcai.top/post/2019/2019-02/nagios_dingding/
- 版权声明:本作品采用进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。