Open-falcon运维监控系统——微信接口二次开发

1、Open-falcon运维监控系统简介

OpenFalcon是一款由小米运维团队从互联网公司的需求出发, 根据多年的运维经验,结合市面上使用的一些运维监控系统的使用经验和反馈,开发的一套企业级、高可用、可扩展的开源监控解决方案。简单了使用一下Open-falcon运维监控,结合使用过的zabbix,cacti,nagios来说,觉得有以下几个优点:

  1. 支持用户主动push,可以结合一些业务需求采集数据,同时也支持用户自定义的插件。
  2. 支持策略模板,模板继承和覆盖,多种告警方式,支持callback调用
  3. 由于dashboard采用的是rrd数据,结合rrdtool的数据归档策略,可以及时返回历史数据
  4. 多维度的数据展示,用户可以自定义Screen。
  5. 有着完善的开源社区,开源社区提供了各种第三方应用的监控插件。目前的插件支持Linux、Windows、Mysql、Redis、Memache、RabbitMQ和交换机监控。

在这里就不再赘述Open-falcon运维监控系统各种组件,以及如何部署,官方文档写的十分明白,有兴趣的可以去看看官方文档。

官方文档地址:http://book.open-falcon.org/
Open-falcon的github地址:https://github.com/open-falcon/

2、遇到的问题

在使用Open-falcon的过程中遇到过这么一个问题,就是在发送微信报警的时候,发现只能绑定一个企业微信中的应用,如果监控的机器多起来,各种类型的报警成堆的在一个微信应用中出现。所以面对不同的报警类型的告警信息需要把他归类在不同的应用发送,这样面对不同的问题时便可以更加方便的解决。查看了官方提供的微信网关,研究了一下,官方使用go语言写,对于go语言没怎么接触,所以打算用python写一个微信的接口,能够自定义添加绑定不同的应用。

官方的微信接口:https://github.com/Yanjunhui/chat

3、解决的方案及思路

大概思路就是,python从wechat.conf配置文件中提取配置信息,定时获取微信的access_token,并且存入到指定access_token.conf的配置文件中,绑定端口监听Open-falcon发送过来的数据,解析提取关键的信息,判断告警类型,并且从access_token.conf配置文件中获取指定应用access_token,然后发送到指定的url。
企业微信API:https://work.weixin.qq.com/api/doc

4、详细解决方法及代码分析

4.1、首先需要统一配置文件的格式:wechat.conf、access_token.conf

wechat.conf

access_token.conf

4.2、获取wechat.conf配置文件的配置项,定时获取access_token

def get_accesstoken():
url = ‘https://qyapi.weixin.qq.com/‘
ap = ConfigParser.SafeConfigParser()
cp = ConfigParser.SafeConfigParser()
ap.read(‘./config/wechat.conf‘)
config = ap.sections()
for i in config:
    if i != ‘http‘ and i != ‘weixin‘:
        agentid = ap.get(i, ‘AgentId‘)
        corpid = ap.get(i, ‘CorpID‘)
        corpsecret = ap.get(i, ‘Secret‘)
        token_url = ‘%s/cgi-bin/gettoken?corpid=%s&corpsecret=%s‘ % (url, corpid, corpsecret)
        access_token = json.loads(urllib.urlopen(token_url).read().decode())[‘access_token‘]
        cp.add_section(i)
        cp.set(i,"AgentId",agentid)
        cp.set(i, "access_token", access_token)
        cp.write(open(‘./config/access_token.conf‘,‘w‘))
global timer
timer = threading.Timer(3600,get_accesstoken)
timer.start()

4.3、收集Open-falcon发送到端口的数据

关键代码如下:
#继承threading.Thread类,重写方法,绑定指定端口,接收数据
    def __init__(self,port):
        threading.Thread.__init__(self)
        self.port = port
        self.sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
        self.sock.bind((‘0.0.0.0‘,port))
        self.sock.listen(0)
    #对于接收到的数据进行url解码
        def run(self):
        while True:
            data = self.client.recv(BUFSIZE)
            if(data):
                string = urllib.unquote(data)
                self.handle_String(string)
                #print string
            else:
                break

4.4、对于获取到的数据进行字符串截取

具体用法如下图:

字符串截取代码具体如下:
def handle_String(self,s):
        a = s.split(‘&‘)
        dict = {}
        for i in range(len(a)):
            if len(re.split(‘\[‘,a[i]))>1:
               dict[‘content‘]=re.split(‘content=‘,a[i])[1]
            elif len(re.split(‘tos=‘,a[i]))>1:
                dict[‘tos‘]=re.split(‘tos=‘,a[i])[1]
        flag = re.split(‘\[‘,dict[‘content‘])[5].split(‘*‘)[0]
        touser = dict[‘tos‘]
        content = dict[‘content‘]
        obj = wechat.Weixin(flag, content)
        obj.message(touser)
        logging.debug(‘Send to %s Wechat %s %s  ‘ % (touser,flag,content))

4.5、对于截取过的数据封装在对象中,并且判断获取指定的access_token和配置项,封装发送。

关键代码如下:
    def message(self,touser):
        url = ‘https://qyapi.weixin.qq.com/‘
        cp = ConfigParser.SafeConfigParser()
        ap = ConfigParser.SafeConfigParser()
        cp.read(‘./config/wechat.conf‘)
        ap.read(‘./config/access_token.conf‘)
        config = cp.sections()
        access_config = ap.sections()
        agentname = ‘test4‘
        agentid = cp.get(‘test4‘, ‘AgentId‘)
        self.token = ap.get(‘test4‘,‘AgentId‘)
                #遍历配置项是否有对应告警类型的应用
        for i in config:
            if i !=‘http‘ and i!= ‘weixin‘:
                value = cp.get(‘weixin‘,i)
                if self.flag == value:
                    agentname = i
                    agentid = cp.get(i, ‘AgentId‘)
        for k in access_config:
            if k == agentname:
                self.token = ap.get(k,‘access_token‘)

        values = {
            "touser": touser,
            "msgtype": ‘text‘,
            "agentid": agentid,
            "text": {‘content‘:self.content},
            "safe": 0
        }
        return self.send_message(url,json.dumps(values))

4.6、发送告警信息到指定应用

关键代码如下:
    def send_message(self,url,data):
        send_url = "%s/cgi-bin/message/send?access_token=%s" %(url,self.token)
        self.response = urllib.urlopen(urllib.Request(url=send_url,data=data)).read()
        x = json.loads(self.response.decode())[‘errcode‘]
        if x==0 :
            logging.debug(‘Successfully %s ‘ % (data))
            return ‘Successfully‘
        else:
            logging.debug(‘Faild %s‘ % (data))
            return ‘Failed‘

**最后效果图** 

总结

因为只在自己的几台虚拟机上运行,暂时还没发现出问题。如果有什么问题希望大家指正,自己学python不久,自己写这个东西学到了很多,遇到问题就不要怕解决,就怕不思考。
接口的源代码:https://github.com/libuliduobuqiuqiu/openfalcon-wechat

原文地址:http://blog.51cto.com/mbb97/2137379

时间: 2024-11-06 10:38:32

Open-falcon运维监控系统——微信接口二次开发的相关文章

运维监控系统 PIGOSS BSM 为银行运维监控提供全力保障

IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成为判断信息系统安全运行状态的主要依据.因此,进行银行业IT运维监控指标体系研究与构建,建立IT统一运维监控指标体系至关重要. 从信息系统期理论出发,信息系统大致分为规划与设计.开发与测试(或购买).实施.运维管理与持续改进五个阶段.而前三个阶段从时间角度看,只占整个周期的20%,其余时间基本上是对其进行运行维护.这就决定了IT运维服务在银行信息化建设和运行中的核心地位,而定量.实时的交易数据.事件和性能指标成

江西畅行高速IT运维监控平台--PIGOSS BSM

案例所属行业:高速公路行业 项目实施时间:2014年 1.1    项目背景     江西畅行高速工程(以下简称"畅行高速")与高速公路周边系统的建设基于用户的消费账户支付系统和结算系统.既包括高速公路的收费,也包括高速公路周边的连锁超市的消费,互联网业务为江西畅行高速周边服务. 目前,江西畅行高速进行网络建设和核心生产平台应用系统的建设.随着江西畅行高速信息化应用的不断推广,核心生产平台的稳定运行对项目的影响越来越大.随 着更多江西畅行高速业务系统上线运行和日常办公对业务系统的日益依

【解决方案】IDC、MA服务商IT运维监控解决方案

       文章摘自 pigoss 官网 http://www.netistate.com  如需转载,请标明出处! IDC与MA服务商现状 目前,大部分传统IDC服务商仍然处于卖场地.卖资源的阶段,通过租赁有限的场地和资源,同质化竞争和低价竞争愈演愈烈严重.如何为用户提供差异化增值IT运维服务成为新一代IDC的竞争目标. 同 样,大部分传统MA服务商的经营模式为提供维保服务,成熟.有经验的工程师便成为了众多MA服务商的重点争夺人才,人力成本不断攀升.技术人员巨大的人才 缺口,注定了专家级工程

IT运维监控解决方案介绍

现状 ?小公司/ 创业团队?< 500台服务器规模? 开源方案:Zabbix.Nagios.Cacti-? 云服务提供商:监控宝.oneAlert等 ?BAT级别?> 10万台服务器? 投入大量的人力,内部自研,与业务严重耦合?没法作为产品推出 ?中间阶层 无从可选   早期,选用Zabbix ?Zabbix是一款开源的企业级监控系统 ?对其进行二次开发.封装.调优... ?为什么选择Zabbix ?Cacti ?Collectd ?RRDtool ?Nagios ?openTSDB   Za

Zabbix运维监控平台快速搭建实录

一.Zabbix运行架构 Zabbix是一个企业级的分布式开源监控解决方案.它能够监控各种服务器的健康型.网络的稳定性以及各种应用系统的可靠性.当监控出现异常时,Zabbix通过灵活i的告警策咯,可以为任何事件配置基于邮件.短信.微信等告警机制.而这所有的一切,都可以通过Zabbix提供的Web界面进行配置和操作,基于Web的前端页面还提供了出色的报告和数据可视化功能.这些功能和特性使运维人员可以非常轻松的搭建一套功能强大的运维监控管理平台. Zabbix的运行架构图如下: 从图中可以看出Zab

企业运维监控平台架构设计与实现(ganglia篇)

一.Cacti/Nagios/Zabbix/centreon/Ganglia之抉择 1.cacti Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具. 简单的说Cacti 就是一个PHP 程序.它通过使用SNMP 协议获取远端网络设备和相关信息,(其实就是使用Net-SNMP 软件包的snmpget 和snmpwalk 命令获取)并通过RRDTOOL 工具绘图,通过PHP 程序展现出来.我们使用它可以展现出监控对象一段时间内的状态或者性能趋势图. 2

全新SaaS运维监控平台构建书

第一部分 引言 伴随的IT服务的发展,IT服务的概念也在发生着巨大的变化.IT运维服务已经由原来局限在用户自身环境下的IT服务,延伸到覆盖公用云.私有云.外包服务商等多纬度.全天候的SaaS运维模式, 从狭义理解,IT服务仅仅是为了解决信息系统出现的故障,在系统出现停顿的时候可以快速的恢复.而目前的IT服务已经包含了更多的内容,IT服务渗透在信息系统的整个生命周期之中.本文基于该理念,对IT服务系统的实现进行分析研究.文章基于网脊运维通SaaS(Software as aService)模式理念

【IT运维监控】集团宕机引发对运维人员的思考 

前不久某大型集团官网和APP突然无法正常使用引发热议,不少人幸灾乐祸,也引发出了各种的谣言和段子,根本难以体会集团内部所受的压力,特别是作为一个大集团内部的运维人员所承受的各种压力和不安. 后 来,原支付宝运维团队负责人针对此事发表了一篇文章,让不少的运维人员深有感触,作为肩负运维监控使命的运维监控工具--PIGOSS BSM 也同样感同身受.面对层出不穷的运维安全隐患,当下运维人员急需一套高效的7*24小时都能担负监控任务的工具,为自身的运维工作减负,告别之前加班熬夜 但没有工作成绩的"怪现像

【IT运维监控】讨论哪种运维监控工具才是IT运维人员的最爱?

选择运维工具的几大要素:一是看我哪些指标需要监控,二是看我监控到什么 三是看这种运维监控工具能监控到什么程度 有可能,这几个问题IT运维人员自己都没有弄的很明白,那么我们先看一下整个运维行业目前的现状: 目前来说,传统企业的IT运维大部分还是用户在使用过程中发现故障,然后通知运维人员,再邮运维人员确定是什么问题,采用哪种方式可以解决.大部分的运维人员目前还是充当的只是一个救火员的身份,没有起到真正的IT运维监控的作用.运维人员的大部分时间和经历都花在了处理简单而重复的问题上,导致同事及领导的不满