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

打开钉钉管理后台: 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. ReactNative: 使用输入框TextInput组件

    一.简介 一个应用程序中,输入框基本不可或缺,它衍生的搜索功能在很多APP中随处可见.在iOS开发中,使用的输入框组件是UITextView和UITextField,在React-Native中使用的 ...

  2. SpringSession header/cookie/attribute存放 session id

    SpringSession header/cookie/attribute存放 SessionID(死磕) 疯狂创客圈 Java 高并发[ 亿级流量聊天室实战]实战系列 [博客园总入口 ] 架构师成长 ...

  3. Python爬虫的概括以及实战

    第一章主要讲解爬虫相关的知识如:http.网页.爬虫法律等,让大家对爬虫有了一个比较完善的了解和一些题外的知识点.​ 今天这篇文章将是我们第二章的第一篇,我们从今天开始就正式进入实战阶段,后面将会有更 ...

  4. git commit vim报错

    window平台,使用git bash,填写git commit时,退出时vim报错: 错误信息 启动失败 Vim: Caught deadly signal SEGV 在工程目录下,进.git目录, ...

  5. kafka速度快的原因

    我们都知道Kafka非常快,比绝大多数的市场上其他消息中间件都要快.这里来研究下那么为什么Kafka那么快(当然不会是因为它用了Scala). Kafka的消息是保存或缓存在磁盘上的,一般认为在磁盘上 ...

  6. Java描述设计模式(02):简单工厂模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景简介 1.引入场景 订餐流程简单描述 1).食品抽象类,规定食品的基础属性操作 2).鱼类,鸡肉类食品类扩展 3).订餐流程类,根 ...

  7. js调用网络摄像头

    不支持IE浏览器(需要使用flash插件), 支持移动端, 未经过完全测试 PC端使用的时候, HTML页面需要预留video标签, canvas标签 移动端使用的时候, HTML页面需要预留file ...

  8. JS基础语法---(数据)简单类型和复杂类型

    原始数据类型: number, string, boolean, undefined, null, object 基本类型(简单类型), 即值类型: number, string, boolean 复 ...

  9. Java 类集初探

    类集 类集:主要功能就是Java数据结构的实现(java.util) 类集就是动态对象数组(链表也是动态数组) Collection 接口* Collection是整个类集之中单值保存的最大 父接口 ...

  10. Swift设置只读(readOnly)属性

    class ReadOnly { private(set) var name: String init(_ name: String) { self.name = name } } let obj = ...