Linux Zabbix——企业监控基于钉钉、企业微信实现自动化报警

zabbix基于企业微信、钉钉群聊机器人实现自动化报警

在企业中,我们使用zabbix去进行监控,需要时刻关注应用服务的运行情况,这就少不了实时报警,而使用即时通讯软件报警相对就很方便。

监控环境准备
部署zabbix-server【监控端】
部署zabbix-agent【被监控端】
实现对web服务器监控【监控端】
zabbix 企业微信报警【监控端】

监控环境准备–>zabbix部署参考:Zabbix——企业监控系统搭建、配置详解、代理部署参考:zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、proxy分布式监控搭建配置… --> zabbix 报警【监控端】

1、Zabbix钉钉报警

安装钉钉–创建群聊–管理页面添加机器人–自定义机器人–机器人名称自定义–IP地址填写当前服务公网IP–规则可以是IP也可以是自定义关键词–

把webhook的地址记录下来

编写python报警监控脚本【CentOS自带Python】

[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts
[root@zabbix-server alertscripts]# vim dingding.py
#!/usr/bin/python
 # -*- coding: utf-8 -*-
 # Author: sxdswc999 
import requests
import json
import sys
import os
 
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = ""  #机器人的Webhook地址
 
def msg(text):
    json_text= {
     "msgtype": "text",
        "text": {
            "content": text
        },
        "at": {
            "atMobiles": [
                ""    #手机号
            ],
            "isAtAll": False
        }
    }
    print requests.post(api_url,json.dumps(json_text),headers=headers).content
     
if __name__ == '__main__':
    text = sys.argv[1]
    msg(text)


[root@zabbix-server alertscripts]# chmod +x dingding.py

安装python-pip和requests库
[root@zabbix-server alertscripts]# yum -y install epel-release[root@zabbix-server alertscripts]# yum -y install python-pip[root@zabbix-server alertscripts]# pip install requests

测试脚本是否可行

[root@zabbix-server alertscripts]# ./dingding.py 监控报警

{"errcode":0,"errmsg":"ok"}

查看是否接收成功

创建媒介

在这里插入图片描述

将Admin用户关联到此媒介:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

创建完成–添加关联监控项及动作,动作执行微信报警项(创建不成功的话可以往下看,微信报警中有接下来步骤)

2、基于企业微信实现自动化监控报警

监控环境准备–>zabbix部署参考:Zabbix——企业监控系统搭建、配置详解、代理部署参考:zabbix可视化、监控模板配置、自定义监控参数、自动发现监控下设备、数据库监控、proxy分布式监控搭建配置… --> zabbix 微信报警【监控端】

手机APP下载企业微信–创建企业–电脑端登录后台–登陆后–应用管理–创建应用–自定义机器人–记录(AgentId、Secret)–API文档–第三方应用–工具与资源–接口测试(填入信息,200OK表示通信成功)

应用:报警机器人AgentID 1000002
Secret:2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4TkgrQ
企业 CorpID: wwd5348195e1cd09
部门id: 1

编写python报警监控脚本
需要修改脚本中的四个信息:

self.__corpid = 'wwd5348195e1cd09' //公司的corpid
self.__secret = '2QvlfpUxh4k-JeIuxVNmkh2N7ijfkCs1lzb4TkgrQ' //应用的secret
'toparty':1, //部门id
'agentid':"1000002", //应用id
[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
 # -*- coding: utf-8 -*-

import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )

class WeChat(object):
		__token_id = ''
		# init attribute
		def __init__(self,url):
				self.__url = url.rstrip('/')
				self.__corpid = 'wwd5348195e1cd09'
				self.__secret = '3gsEC6Mv3vQmdG5MOJBF65U0KzT-1v2GKQhr479uso'
		# Get TokenID
		def authID(self):
				params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
				data = urllib.urlencode(params)
				
				content = self.getToken(data)
				
				try:
						self.__token_id = content['access_token']
						# print content['access_token']
				except KeyError:
						raise KeyError
						
						
		# Establish a connection
		def getToken(self,data,url_prefix='/'):
				url = self.__url + url_prefix + 'gettoken?'
				try:
						response = urllib2.Request(url + data)
				except KeyError:
						raise KeyError
                result = urllib2.urlopen(response)
                content = json.loads(result.read())
				return content
				
				
        # Get sendmessage url
        def postData(self,data,url_prefix='/'):
				url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
				request = urllib2.Request(url,data)
				try:
						result = urllib2.urlopen(request)
				except urllib2.HTTPError as e:
                        if hasattr(e,'reason'):
                       		 	print 'reason',e.reason
                        elif hasattr(e,'code'):
                        		print 'code',e.code
                        return 0
				else:
                        content = json.loads(result.read())
                        result.close()
				return content
		# send message
		def sendMessage(self,touser,message):
                self.authID()
                data = json.dumps({
                   	 	'touser':touser,
                    	'toparty':1,
                    	'msgtype':"text",
                    	'agentid':"1000002",
                    	'text':{
                    	'content':message
                         },
						 'safe':"0"
					},ensure_ascii=False)
                    response = self.postData(data)
                    print response
if __name__ == '__main__':
        a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
        a.sendMessage(sys.argv[1],sys.argv[3]

zabbix 创建告警媒介–报警媒介–创建脚本媒介–填入脚本文件

登陆ip/zabbix 添加告警用户
创建用户组:web-group,包含vc等用户创建用户:vc等用户,并关联到微信告警希望的结果是:发微信到组web-group,组中的用户vc等人都能收到

设置用户组web-group对主机群组webserver拥有读写(发送消息)权限

为用户 关联告警媒介

Zabbix 添加报警动作
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

如果希望中文显示自行修改模板告警主机:

告警主机: {HOST.NAME}
告警地址: {HOST.IP}
监控项目: {ITEM.NAME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}
告警时间: {EVENT.DATE} {EVENT.TIME}

测试微信报警
被监控端操作
[root@web1 ~]# systemctl stop httpd

企业微信收到报警

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值