IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> Nagios篇之使用钉钉机器人关联Nagios报警信息实现自动发送 -> 正文阅读

[系统运维]Nagios篇之使用钉钉机器人关联Nagios报警信息实现自动发送

一、前言
在使用Nagios监控时,一般情况下,我们想要实时获取服务器的报警信息,比如哪个服务出了问题,哪个进程挂了,还有服务器的一些相关信息,比如Disk、CPU、Mem等相关信息时,因为我们总不能时刻去关注着Nagios的web监控,因为这一点,那么第三方的应用关联,使得我们在手机端就能查看服务器的相关信息,就变得异常重要~

第三方应用钉钉就可以实现这项功能~

接下来介绍下钉钉是如何实现的

二、实现报警步骤
1、创建钉钉应用【用于发送报警信息给单独某个用户】
首先需要进入钉钉管理后台:https://oa.dingtalk.com
如图所示:
在这里插入图片描述
填写相关信息
在这里插入图片描述
在这里插入图片描述
注意:这里的服务器出口IP,即为允许哪个IP地址来调用此接口
2、然后进行创建
创建成功后,会产生三个变量的值。分别为:“AgentID”、“AppKey”、“AppSecret”。
在这里插入图片描述
在这里插入图片描述
3、创建钉钉机器人
注:该机器人用于发送报警信息到监控群中,也就是平时需要关注的信息
3.1、创建钉钉群
3.2、添加群机器人,如下所示:
在这里插入图片描述
3.3、然后点击下方的自定义机器人

在这里插入图片描述
3.4、填写自定义机器人信息
在这里插入图片描述
注:这里需要注意的是,要记录该机器人的webhook。【因为需要进行脚本检测,关联钉钉机器人,所以需要在编写的报警脚本中进行调用】。

到此,钉钉报警机器人的创建就已经完成~
然后就是利用脚本编写Nagios报警信息

三、编写报警信息脚本
注:当服务器出现异常时,该脚本就会被调用
假设脚本为: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='09386937241216057'
baihe_id='165726012126376472'
tiantaotao_id='215023131029727888'
wangfujun_id='014610392229410999'
maoweijian_id='014506344727183149'
caie_id='01461056511094710'
zhaozhibo_id='121027651935582616'
 
#项目的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、配置钉钉报警
4.1、给Nagios添加报警配置
在Nagios的配置文件中找到对应的commands.cfg,一般情况下是在/usr/local/nagios/etc/objects/commands.cfg
然后编辑该配置文件

vim commands.cfg
###钉钉报警###
define command{
   command_name server_bj
   command_line /opt/python-3.4/bin/python3.4【Python脚本执行】 /usr/local/nagios/python/dingding.py   "$NOTIFICATIONTYPE$""$SERVICEDESC$""$HOSTALIAS$""$HOSTADDRESS$""$SERVICESTATE$""$LONGDATETIME$""$SERVICEOUTPUT$" register 1
}

:这里的 /opt/python-3.4/ 为Python脚本的执行路径,后面的 /usr/local/nagios/python/dingding.py 为刚才编写的Python监控脚本

4.2、联系人调用报警

# 1、编辑 contacts.cfg 文件
vim /usr/local/nagios/etc/objects/contacts.cfg
# 2、设置调用报警联系人
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 server_bj #调用commands.cfg文件中定义的命令
  host_notification_commands server_bj
  register 1
}
# 3、将钉钉联系人添加到组
# 组1
define contactgroup{ 
  contactgroup_name group1 # 组名:group1
  alias Nagios Administrators
  members dingding,zq-weixin,mao-weixin,baihe-weixin  # members为组中的成员
}
# 组2
define contactgroup{
  contactgroup_name group2  # 组名:group2
  alias paiyou
  members nagiosadmin,dingding,zhanghu-weixin,yujie-weixin # members为组中成员
}

4.3、查看主机、服务调用的模板

vim /usr/local/nagios/etc/aliyun/host.cfg
define host{
  use server_aliyun #应用的模板名称
  host_name server01 # 主机名
  alias SERVER01 # 别名
  address 120.26.121.119  # 对应的IP地址
  hostgroups server_group 
}
[zhuyuliang@nagios ~]$ vim /usr/local/nagios/etc/services/check_ad.cfg

define service{
  host_name       server01
  use generic_service    #引用的模板名称
  name check_ad 
  service_description Check ad
  check_command check_nrpe!check_ad
}

4.4、修改模板【调用联系人】

vim /usr/local/nagios/etc/templates/host_templates.cfg
define host{
    name        server_aliyun
    use        linux_server
}           #找到了主机引用的模板,但是此模板还有父级模板,所以要继续找到父级模板添加联系人

define host{
   name linux_server
   use generic_host
#…  省略
   contact_groups group1    #修改联系人组,为我们定义的组
   register 0
}

#vim /usr/local/nagios/etc/templates/service_templates.cfg
define service{
   name generic_service
   use      services-pnp
… 省略
   contact_groups group1    #修改联系人组,为我们定义的组
}

4.5、配置报警的逻辑总结
主机引用模板 -> 模板引用联系人组 -> 联系人组包含联系人 -> 联系人中调用报警命令 -> 报警命令引用脚本

配置完成后,然后重启nagios服务

4.6、检查Nagios的配置文件,然后重启

/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg
#如果nagios配置了开机启动的话,可以进行如下执行
/etc/init.d/nagios restart
#如果没有配置的话,进行如下配置
cp /usr/local/nagios/bin/nagios /etc/init.d/nagios
sudo chkconfig --add nagios
sudo chkconfig nagios on

OK~完结!

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-08-06 10:14:35  更:2021-08-06 10:15:09 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 19:36:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码