查看原文
其他

Python脚本实现Zabbix自动微信告警

李逸皓 运维book思议 2024-04-22

先放个链接,万一有人关注呢

优质文章推荐

↓ ↓ ↓ ↓ ↓

只会用scp?那也太Low了

很多人安装了Ubuntu第一步就做错了

服了!新来的运维3个操作把我整蒙了

Docker容器镜像的本质是什么?

Linux系统360°全方位性能瓶颈检测



在现代信息技术领域,监控和管理复杂的计算机系统和网络基础设施至关重要。Zabbix是一个强大的开源监控解决方案,用于监视各种IT资源,从服务器和网络设备到应用程序和云服务。
Zabbix的功能
Zabbix具备广泛的功能,旨在为系统管理员、网络管理员和开发人员提供全面的监控和管理解决方案。以下是Zabbix的一些主要功能:
1. 实时监控
Zabbix能够实时监测各种资源的性能,包括CPU利用率、内存使用、磁盘空间、网络流量等。这意味着您可以随时了解系统的运行状况,及时识别问题并采取措施解决它们。
2. 告警和通知
Zabbix支持高度可定制的告警机制,可根据设定的阈值和条件发送通知,包括电子邮件、短信、Slack消息等。这有助于在问题发生时迅速采取行动,防止潜在的系统故障。
3. 数据可视化
Zabbix提供了强大的数据可视化功能,包括图表和图形报告。您可以创建自定义仪表板,将监控数据以直观的方式呈现,帮助您更好地理解趋势和性能问题。
4. 自动发现和配置
Zabbix支持自动发现新设备和服务,并自动配置监控。这减少了手动配置的工作量,使监控更加灵活和可扩展。
5. 历史数据存储
Zabbix可以长期存储历史监控数据,使您能够进行性能趋势分析和故障排除。这对于规划资源和预测问题非常有用。
6. 安全性
Zabbix提供了强大的安全性功能,包括用户身份验证、访问控制、数据加密等,以确保监控数据的完整性和保密性。
Zabbix的应用场景
Zabbix适用于各种不同的应用场景,以下是一些常见的用例:
1. 服务器监控
Zabbix可用于监控服务器的性能和可用性。您可以实时跟踪服务器的CPU负载、内存使用情况、磁盘空间等,并在出现问题时及时发出警报。
2. 网络监控
Zabbix可以监控网络设备(如交换机和路由器)的状态和流量。这有助于识别网络瓶颈、故障和安全问题。
3. 应用程序性能监控
Zabbix支持监控各种应用程序,包括Web服务器、数据库、应用程序服务器等。它可以检测潜在的性能问题,并提供有关应用程序响应时间和吞吐量的信息。
4. 云基础设施监控
对于使用云计算服务的组织,Zabbix可监控云资源的利用率和性能。它可以与主要的云提供商集成,例如AWS、Azure和Google Cloud。
Zabbix的工作原理
Zabbix的工作原理基于客户端-服务器体系结构:
Zabbix服务器:服务器负责配置、管理和存储监控数据。它定期向被监控的主机发送请求,收集性能数据。
Zabbix代理:代理是在被监控的主机上运行的小型程序,用于收集本地性能数据并将其发送到Zabbix服务器。代理可以减轻服务器的负载。
监控对象:监控对象是要监控的实际资源,如服务器、网络设备或应用程序。
数据库:Zabbix服务器使用数据库存储监控数据、配置信息和事件日志。
Zabbix的工作流程如下:
1、配置:管理员配置Zabbix服务器以监控特定资源。这包括定义监控项、触发器、图形等。
2、数据收集:Zabbix服务器通过主动或被动方式从代理或监控对象中收集性能数据。主动方式是通过轮询代理或监控对象,而被动方式是等待代理或监控对象向服务器发送数据。
3、数据存储:收集到的数据存储在数据库中,供以后的分析和可视化使用。
4、触发器和警报:基于事先定义的触发器条件,Zabbix服务器检测问题并触发警报。警报可以通过各种通知方式发送给相关人员。
5、数据可视化:管理员和运维团队可以使用Zabbix的仪表板和图形功能查看监控数据,以识别问题和趋势。
Python脚本
在实现企业微信自动告警之前,需要在Zabbix Server端中的/usr/lib/zabbix/alertscripts/路径下创建一个用于连接企业微信的Python脚本,示例代码如下。
#!/usr/bin/env python# -*- coding: utf-8 -*-import urllib,urllib2,jsonimport sysreload(sys)sys.setdefaultencoding( "utf-8" )class WeChat(object): __token_id = '' # init attribute def __init__(self,url): self.__url = url.rstrip('/') self.__corpid = 'wwa565a55049873ca6' self.__secret = 'OKVyP9Xo-WwnnzZXYbMla9SONypikYwGV-X0lqZ1kUA' # 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 responseif __name__ == '__main__': a = WeChat('https://qyapi.weixin.qq.com/cgi-bin') a.sendMessage(sys.argv[1],sys.argv[3])

上述示例中需要注意的是,有4处内容需要用户按照实际信息进行填写。其中,self.__corpid的参数值需要填写企业ID,self.__secret的参数值需要填写应用的secret信息,toparty的参数值需要填写部门ID,agentid的参数值需要填写应用的agentid信息。

脚本配置完成之后,需要为脚本文件授予权限才能执行。

Zabbix是一个强大的开源监控工具,具备实时监控、告警和通知、数据可视化、自动发现和配置等功能。它可应用于各种场景,从服务器和网络设备到应用程序和云基础设施。通过客户端-服务器架构,Zabbix能够可靠地监控和管理IT资源,帮助组织确保系统的可用性和性能。无论是小型企业还是大型组织,Zabbix都是一个强大的工具,有助于简化监控和故障排除的流程,提高IT基础设施的稳定性和可维护性。

来不及解释了,快上车!(进群看公告)

欢迎新的小伙伴加入!在这里,我们鼓励大家积极参与群内讨论和交流,分享自己的见解和经验,一起学习和成长。同时,也欢迎大家提出问题和建议,让我们不断改进和完善这个平台。

              ↓↓↓ 点个在看,无需赞赏!

继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存