第一章 创建钉钉应用(用于发送报警信息给单独某个用户)

打开钉钉管理后台: 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 钉钉报警的更多相关文章

  1. 钉钉机器人zabbix报警

    首先在钉钉群聊里添加一个自定义的机器人 并复制webhook的内容 https://oapi.dingtalk.com/robot/send?access_token=37e23308d1b84eb4 ...

  2. elk报警监控之sentinl 钉钉+邮件告警

    注:我的elk sentinl版本都是6.5.1 前期知识 es的查询语法.es watcher使用方法. https://www.cnblogs.com/pilihaotian/p/5830754. ...

  3. aws cloudwatch监控怎么通过钉钉机器人报警

    最近在完善海外业务在aws服务的CloudWatchh监控,发现CloudWatch报警通知要通过aws的sns服务,直接支持的通道有短信和邮件,但是我们想推到钉钉群里面的群机器人里面这个就要借助aw ...

  4. Zabbix监控进程(进程消失后钉钉报警)

    用于python报警的脚本如下:(钉钉机器人的连接需要修改) #!/usr/bin/python3# -*- coding: utf-8 -*-# Author: aiker@gdedu.ml# My ...

  5. zabbix钉钉报警

    我们在钉钉上建立群聊,然后在群聊上添加钉钉机器人: 编写,脚本需要放在zabbix 的alertscripts目录下(如果不知道该目录的位置,可以使用find命令查找) find / -iname a ...

  6. zabbix 配合钉钉群机器人(webhook) 报警

    首先建钉钉群,添加一个自定义机器人拿到webhook zabbix添加一个报警媒介 搞一个shell脚本来启动Python脚本(直接用zabbix调Python脚本不行,不知道什么原因) vim di ...

  7. prometheus报警消息钉钉通知

    设置prometheus 的web hook 为对应服务: 报警的配置如下,设置了web hook url,报警就会把消息发给web hookurl,但是这里的数据格式和钉钉要求的格式不一样,所以后面 ...

  8. zabbix利用python脚本发送钉钉报警

    #!/usr/bin/python # -*- coding: utf-8 -*- import requests import json import sys import os headers = ...

  9. 使用python对mysql主从进行监控,并调用钉钉发送报警信息

    1.编写python的监控脚本 A.通过获取mysql库中的状态值来判断这个mysql主从状态是否正常 B.进行两个状态值的判断 C.进行调取钉钉机器人,发送消息 2.设置定时任务进行脚本运行 cro ...

随机推荐

  1. 【安富莱】RTX嵌入式操作系统教程发布,支持F103,F407和F429,含81个配套例程(2017-10-17)

    前言说明:1. 首先感谢大家对我们安富莱电子一年来的支持,2016年我们会再接再厉推出更好的教程. 2. 估计也有网友会问RTX的优势在那里,针对这个问题,教程中第一章分为6条专门回答了这个问题,有兴 ...

  2. 好看的鼠标hover效果

    0919自我总结 常见的鼠标hover效果 展示效果:http://ianlunn.github.io/Hover/ 部分动画制作 <style><!-- .container { ...

  3. 使用策略模式重构switch case 代码

    目录 1.背景 2.案例 3.switch…case…方式实现 4.switch…case…带来的问题 5.使用策略模式重构switch…case…代码 6.总结 1.背景 之前在看<重构    ...

  4. css知识笔记:水平居中(别只看,请实操!!!)

    css实现元素的水平居中. (尝试采用5W2H方法说明): 别只看,请实操!!! What: 1.这篇文档主要描述元素水平方向居中的几种最常见和最实用的几种方式,并说明优缺点. 2.写这篇文章的目的, ...

  5. SAP MM 无料号采购申请单中'评估价格'之填写

    SAP MM 无料号采购申请单中'评估价格'之填写 1),SAP系统中,采购申请里的'评估价格'来源有二, a)如果是有物料号的采购,则该价格来自于物料主数据里里的成本价(移动平均价或者标准价),自动 ...

  6. OpenCV:图像的开运算与闭运算

    导包: import numpy as np import cv2 import matplotlib.pyplot as plt def show(image): plt.imshow(image) ...

  7. 如何通过RMAN使用传输表空间迁移到不同的Endian平台 (Doc ID 371556.1)

    How to Migrate to different Endian Platform Using Transportable Tablespaces With RMAN (Doc ID 371556 ...

  8. [Linux] shell中for循环grep正则统计指定关键字

    需求是统计某个业务的访问个数日志服务器上的目录结构是如下,搜索最近7天的指定关键字数据,并排重统计个数: drwxr-xr-x root root Nov : -- drwxr-xr-x root r ...

  9. postman---postman生成测试报告

    做完测试后,都会编写一份测试报告,测试报告中最主要的就是呈现出测试结果,哪些用例通过了,哪些用例没有通过.像postman这么强大的功能也可以自动生成报告,供我们测试同学进行查看,显得更加有B格~~~ ...

  10. 如何在Markdown格式下插入动图/gif

    上传GIF动图与上传普通图片是一样的,都需要以下在markdown语法中 ![]() 的小括号内填写图片的地址.问题在于如何获取本地gif的地址呢? 核心的东西就是要把这个gif动图传上网络,这样图片 ...