Nagios 钉钉报警
第一章 创建钉钉应用(用于发送报警信息给单独某个用户)
打开钉钉管理后台: https://oa.dingtalk.com



创建成功后需要记录三个值"AgentID","AppKey","AppSecret"。


第二章 创建钉钉机器人(用于发送报警信息到监控群)
2.1创建钉钉群
过程略过。
2.2添加群机器人



#此处要记录webhook,脚本中需要调用。
第三章 编写报警脚本(此脚本会在服务器出现异常后调用)
此脚本是基于Python3写的,调用此脚本时会传入七个参数,参数是Nagios的变量,参数说明见下文。
[zhuyuliang@nagios ~]$ cat /usr/local/nagios/python/dingding.py
#coding: utf-8
import json
import sys
import requests '''
参数含义:
警告类型: $NOTIFICATIONTYPE$
服务名称: $SERVICEDESC$
主机名: $HOSTALIAS$
IP地址: $HOSTADDRESS$
服务状态: $SERVICESTATE$
时间: $LONGDATETIME$
日志: $SERVICEOUTPUT$
''' warning_type=str(sys.argv[1])
service_name=str(sys.argv[2])
host_name=str(sys.argv[3])
host_IP=str(sys.argv[4])
service_state=str(sys.argv[5])
warning_time=str(sys.argv[6])
warning_log=str(sys.argv[7]) '''
用户的userid,因为固定的,所以写死了,获取方法:
获取部门ID:
curl https://oapi.dingtalk.com/department/list?access_token=xxx|jq '.'
通过部门ID获取userid:
curl https://oapi.dingtalk.com/user/list?access_token=xx\&department_id=xx|jq '.'
''' chenning_id=''
baihe_id=''
tiantaotao_id=''
wangfujun_id=''
maoweijian_id=''
caie_id=''
zhaozhibo_id='' #项目的IP列表
ITFIN=['47.99.98.249','47.110.157.52','47.99.88.4','47.99.203.235','47.99.201.252','47.98.240.44','47.99.201.132','47.96.89.81','47.99.106.12','47.99.204.155','120.55.49.10']
cdh=['47.99.122.122','47.99.134.63','47.99.82.201','47.96.22.59','47.99.53.179']
chess=['106.14.12.179','47.101.144.209','106.14.169.195','47.101.164.250']
sdk=['121.40.109.196','121.40.82.16','120.26.106.206','120.26.223.154','120.26.55.62','47.97.244.135','101.37.89.187','116.62.108.28','116.62.109.7','116.62.102.197'] #发送的信息主体
header = {"Content-Type":"application/json;charset=UTF-8"}
content="** Nagios警报 **\n\n警告类型: {}\n服务名称: {}\n主机名: {}\nIP地址: {}\n服务状态: {}\n时间: {}\n日志:\n{}".format(warning_type,service_name,host_name,host_IP,service_state,warning_time,warning_log)" def get_accessToken(appkey,appsecret):
'''
此函数用于获取accessToken
'''
json_token=requests.get(url='https://oapi.dingtalk.com/gettoken',params={'appkey':appkey,'appsecret':appsecret})
return json_token.json()['access_token'] def send_group():
'''
此函数用于发送报警至钉钉群
'''
url='https://oapi.dingtalk.com/robot/send?access_token=7df4cff195905e47527602b7bfab6ecc4fc669392da1e446eebeac05049ddcf7'
data = {
"msgtype":"text",
"text":{
"content":content}
}
sendData=json.dumps(data).encode('utf-8')
result=requests.post(url=url,data=sendData,headers=header) def send_someone_data(*args):
'''
不同的业务线有不同的信息,为了节省代码所以定义了一个函数
'''
data={
"touser":'|'.join((args[:])),
"agentid":236353484,
"msgtype":"text",
"text":{
"content":content}
}
return data def send_someone():
'''
此函数用于发送信息给某个业务线的负责人
'''
access_token=get_accessToken('dingg3bmym6arxwokwee','xxx')
url="https://oapi.dingtalk.com/message/send?access_token={}".format(access_token)
if host_IP in ITFIN:
data=send_someone_data(chenning_id,baihe_id)
elif host_IP in cdh:
data=send_someone_data(tiantaotao_id,zhaozhibo_id)
elif host_IP in chess:
data=send_someone_data(wangfujun_id)
elif host_IP in sdk or host_IP.startswith('103.56.139'):
data=send_someone_data(maoweijian_id,caie_id)
sendData=json.dumps(data).encode('utf-8')
result=requests.post(url=url,data=sendData,headers=header) if __name__ == '__main__':
send_group() #只要服务器发生异常都发送报警到你创建的群中
send_someone() #根据发生异常的服务器IP来决定发送给哪个用户
第四章 配置钉钉报警
4.1添加报警,commands.cfg里编写。
[zhuyuliang@nagios ~]$ tail -6 /usr/local/nagios/etc/objects/commands.cfg
###钉钉报警###
define command{
command_name dindin-bj
command_line /usr/local/python-3.4/bin/python3.4 /usr/local/nagios/python/dingding.py "$NOTIFICATIONTYPE$""$SERVICEDESC$""$HOSTALIAS$""$HOSTADDRESS$""$SERVICESTATE$""$LONGDATETIME$""$SERVICEOUTPUT$" register 1
}
4.2 联系人调用报警
[zhuyuliang@nagios ~]$ tail -20 /usr/local/nagios/etc/objects/contacts.cfg
define contact{
contact_name dingding
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 dindin-bj #调用commands.cfg文件中定义的命令
host_notification_commands dindin-bj
register 1
}
define contactgroup{ #将钉钉联系人添加到组
contactgroup_name admins
alias Nagios Administrators
members 139mail,dingding,zq-weixin,mao-weixin,baihe-weixin,huazhen-weixin,zhuyuliang-weixin,tiantaotao-weixin
}
define contactgroup{
contactgroup_name paiyou
alias paiyou
members nagiosadmin,dingding,zhanghu-weixin,yujie-weixin,bietao-weixin,louchao-weixin,maxiang-weixin,liujieqing-weixin
}
4.3 查看主机,服务调用那些模板
[zhuyuliang@nagios ~]$ grep -vE "^$|^#" /usr/local/nagios/etc/aliyun/host.cfg
define host{
use generic_linux_aliyun #应用的模板名称
host_name ad-server01
alias AD SERVER01
address 120.26.121.119
hostgroups aliyun_linux_ad_group
}
[zhuyuliang@nagios ~]$ grep -vE "^$|^#" /usr/local/nagios/etc/services/check_ad.cfg
define service{
host_name ad-server01
use generic_service #引用的模板名称
name check_ad
service_description Check ad
check_command check_nrpe!check_ad
}
4.4 修改模板(调用此联系人)
[zhuyuliang@nagios ~]$ grep -vE "^$|^#" /usr/local/nagios/etc/templates/host_templates.cfg
define host{
name generic_linux_aliyun
use linux_server
} #找到了主机引用的模板,但是此模板还有父级模板,所以要继续找到父级模板添加联系人
define host{
name linux_server
use generic_host
… 省略
contact_groups admins #修改联系人组,为我们定义的组
register 0
}
[zhuyuliang@nagios ~]$ grep -vE "^$|^#" /usr/local/nagios/etc/templates/service_templates.cfg
define service{
name generic_service
use services-pnp
… 省略
contact_groups admins #修改联系人组,为我们定义的组
}
4.5 配置报警的整体逻辑。
主机引用模板 -> 模板引用联系人组 -> 联系人组包含联系人 -> 联系人中调用报警命令 -> 报警命令引用脚本
4.6 检测配置文件,重启
#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
#/etc/init.d/nagios restart
Nagios 钉钉报警的更多相关文章
- 钉钉机器人zabbix报警
首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...
- elk报警监控之sentinl 钉钉+邮件告警
注:我的elk sentinl版本都是6.5.1 前期知识 es的查询语法.es watcher使用方法. https://www.cnblogs.com/pilihaotian/p/5830754. ...
- aws cloudwatch监控怎么通过钉钉机器人报警
最近在完善海外业务在aws服务的CloudWatchh监控,发现CloudWatch报警通知要通过aws的sns服务,直接支持的通道有短信和邮件,但是我们想推到钉钉群里面的群机器人里面这个就要借助aw ...
- Zabbix监控进程(进程消失后钉钉报警)
用于python报警的脚本如下:(钉钉机器人的连接需要修改) #!/usr/bin/python3# -*- coding: utf-8 -*-# Author: aiker@gdedu.ml# My ...
- zabbix钉钉报警
我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...
- zabbix 配合钉钉群机器人(webhook) 报警
首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim di ...
- prometheus报警消息钉钉通知
设置prometheus 的web hook 为对应服务: 报警的配置如下,设置了web hook url,报警就会把消息发给web hookurl,但是这里的数据格式和钉钉要求的格式不一样,所以后面 ...
- zabbix利用python脚本发送钉钉报警
#!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os headers = ...
- 使用python对mysql主从进行监控,并调用钉钉发送报警信息
1.编写python的监控脚本 A.通过获取mysql库中的状态值来判断这个mysql主从状态是否正常 B.进行两个状态值的判断 C.进行调取钉钉机器人,发送消息 2.设置定时任务进行脚本运行 cro ...
随机推荐
- Jmeter文件目录介绍
当我们解压安装包后,在主目录下有以下文件目录,在这里就不一一介绍,主要介绍一些会经常使用到的文件或目录 1.bin目录——存放启动脚本.配置文件.模板等文件 examples:该目录下存放Jmeter ...
- Go 自定义类型来实现枚举类型限制
今天使用iota 发现一个问题.定义别名类型的时候 调用函数报错.废话不多说,我们看一段示例(关于iota的用法这里就不介绍了,手册介绍滴比较详细): package main import &quo ...
- SSM框架之Spring(3)IOC及依赖注入(基于注解的实现)
Spring(3)IOC及依赖注入(基于注解的实现) 学习基于注解的 IoC 配置,大家脑海里首先得有一个认知,即注解配置和 xml 配置要实现的功能都是一样 的,都是要降低程序间的耦合.只是配置的形 ...
- 利用Azure虚拟机安装Dynamics 365 Customer Engagement之十一:SQL Server配置Always On后D365的配置更改
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Python 元組 Tuple
元組 Tuple 宣告 元組是用逗號分隔的一列值: >>> t = 'a',1,'b',2,'c',3>>> t('a', 1, 'b', 2, 'c', 3)&g ...
- iOS---------开发中 weak和assign的区别
weak和assign的区别-正确使用weak.assign 一.区别 1.修饰变量类型的区别weak只可以修饰对象.如果修饰基本数据类型,编译器会报错-“Property with ‘weak’ a ...
- react-native自定义Modal模态框|仿ios、微信弹窗RN版
前序 纵观每个优质项目,无论web端还是native原生应用开发,弹窗都是不可忽视的一环,能很大程度上直接决定用户体验.如:微信.支付宝.ios都有很成熟的一套弹窗UI展示场景. 最近一直沉迷在rea ...
- HTML5播放视频,并使用ffmpeg对视频转编码
网页加入视频可以用h5自带的video标签,这里用一个jQuery封装优化好的video视频组件videojs. videojs官方网站:https://docs.videojs.com/index. ...
- linux学习(六)计划任务命令
目录 at命令 @(计划任务命令) at命令 at命令用于指定在未来某一时间执行一个任务,该任务只能被执行一次 at [选项] [时间] f:指定包含具体指令的任务文件 q:指定新任务队列名称 l:显 ...
- HTML Rendering Error
刚下载的markdown弹窗提示html渲染错误 去官网 http://markdownpad.com/faq.html#livepreview-directx 页面搜索 This view h ...