多监控平台统一 | Hawkeye

多监控平台统一 | Hawkeye

Posted March 27, 2018

近年来出现越来越多的监控平台, 每一个监控平台都是其擅长的地方, 比方说 zabbix 监控收集, 并监控基础服务。 grafana 监控平台可以很好的展示数据, kibana 又是日志相关的监控, 可以很出色的自定义很多业务监控。 总而言之基本上大多数有一定技术规模的公司, 运维都有很多监控平台。

多监控平台虽然好, 但暴露一个问题, 那就是关注度低, 因为有时候祸绝不单行, 一个问题的爆发, 往往在底层或者高层就已经暴露出来, 而我们需要来回的切换各个平台的监控图表, 这样排查起来非常慢。 如果我们能够更立体的看全部的监控报表, 那么暴露的问题也就一目了然了。

我进入 teambition 刚开始就是在做多监控平台统一的事情, 当时想的是把所有的数据全部写到一个平台, 而后通过结构化数据统一生成图表。 但构思太大, 实现起来艰难。 于是此项目难产了。

现在用的是嵌入的方式,幸运的是 zabbix、grafana、kibana 都支持嵌入, 而且每个图表的嵌入都支持starttime和 endtime, 这使得一个页面大盘看多个平台的监控就非常直观。

各个平台的嵌入 URL 组成部分.

Zabbix

Raw

http://HOST:PORT/chart2.php?graphid=1911&period=1800&stime=20190309095657&updateProfile=1&profileIdx=web.screens&profileIdx2=1911&width=1302

Grafana

Raw

https://grafana.teambition.net/dashboard-solo/db/cpu-overview?orgId=1&panelId=5&from=1520540867986&to=1520562467987

Kibana

Raw

https://elk.teambition.net/app/kibana#/visualize/edit/API-response-time-(avg)?embed=true&_g=()&_a=(filters:!(),linked:!f,query:(query_string:(analyze_wildcard:!t,query:'*')),uiState:(),vis:(aggs:!((enabled:!t,id:'1',params:(field:req_time),schema:metric,type:avg),(enabled:!t,id:'2',params:(customInterval:'2h',extended_bounds:(),field:timestamp,interval:auto,min_doc_count:1),schema:segment,type:date_histogram)),listeners:(),params:(addLegend:!t,addTimeMarker:!f,addTooltip:!t,categoryAxes:!((id:CategoryAxis-1,labels:(show:!t,truncate:100),position:bottom,scale:(type:linear),show:!t,style:(),title:(),type:category)),defaultYExtents:!f,grid:(categoryLines:!f,style:(color:%23eee)),interpolate:linear,legendPosition:right,mode:stacked,scale:linear,seriesParams:!((data:(id:'1',label:Count),drawLinesBetweenPoints:!t,interpolate:linear,mode:stacked,show:true,showCircles:!t,type:area,valueAxis:ValueAxis-1)),setYExtents:!f,shareYAxis:!t,smoothLines:!f,times:!(),valueAxes:!((id:ValueAxis-1,labels:(filter:!f,rotate:0,show:!t,truncate:100),name:LeftAxis-1,position:left,scale:(mode:normal,type:linear),show:!t,style:(),title:(text:Count),type:value)),yAxis:()),title:'API+response+time+(avg)',type:area))

可以看到三个平台支持开始时间和结束时间, 这方便了我们 hawkeye 平台的时间选择控制。

核心处理URL代码

根据所指定的开始时间和结束时间, 对各个平台的 url 进行处理。 最后生成 url。

Python

def reload_url(s, e, items):
    s_cst = s + 28800000
    e_cst = e + 28800000
    zabbix = {
        "stime": datetime.fromtimestamp(s_cst/1000.0).strftime("%Y%m%d%H%M%S"),
        "period": (e - s) / 1000,
        "width": "600"
    }

    grafana = { "from": s, "to": e }

    kibana = {
        "from": datetime.fromtimestamp(s/1000.0).strftime("%Y-%m-%dT%H:%M:%S.%sZ"),
        "to": datetime.fromtimestamp(e/1000.0).strftime("%Y-%m-%dT%H:%M:%S.%sZ"),
    }

    kibana = {
        "_g": "(refreshInterval:(display:On,pause:!f,value:0)," + \
        "time:(from:'%s',mode:absolute,to:'%s'))" % (kibana["from"], kibana["to"])
    }

    for item in items:
        r = urlsplit(item.url)
        root = "%s://%s%s" % (r.scheme, r.netloc, r.path)

        if item.type == 'KB':
            r = urlsplit(r.fragment)

        query_dict = { k: v[0] for k, v in parse_qs(r.query).items() }

        if item.type == 'ZB':
            query_dict.update(zabbix)
        elif item.type == 'GF':
            query_dict.update(grafana)
        elif item.type == 'KB':
            query_dict.update(kibana)

        query_string = urlencode(query_dict)

        if item.type == 'KB':
            full_url = root + '#' + r.path + '?' + query_string
        else:
            full_url = root + '?' + query_string

        item.url = full_url
    return items

项目效果图

#大盘

#控制

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏互联网数据官iCDO

5招教你轻松获得手机App好评

引言:在应用程序方面,意见和评论也会影响到应用程序商店搜索结果的可见性,以及它们在app store中出现的概率。因此,如何能获得更多的好评呢?本文教你5招。 ...

3855
来自专栏微信终端开发团队的专栏

微信 Android 模块化架构重构实践(下)

重构整体架构不是一件容易事,通常也不太可能让整个团队停下来只做重构。本文是微信 Android 模块化架构重构实践的下篇,主要分享模块化架构重构的一点点经验。

1.5K5
来自专栏阮一峰的网络日志

Android,开源还是封闭?

满大街都在谈论Android。 它是当红炸子鸡。许多人觉得,iPhone将受到它的强力挑战。 ? 我也曾经对它充满了期待,但是后来的事态发展,令我改变了看法。前...

3577
来自专栏人人都是极客

计算机的基本组成

严格来讲计算机从诞生到现在经历了很多阶段,已经发展成为一种自动地、高速地、精确地进行信息处理的电子设备,也是20世纪的重大发明之一。

1352
来自专栏程序员互动联盟

单片机距离智能机器人有多远?

提到单片机很多人都很觉得不陌生,大街小巷上面电子产品都用到。近几年随着嵌入式的发展,智能机器人是未来一个大方口,其实智能机器人也是嵌入式的一种,里面融入了生物科...

3635
来自专栏FreeBuf

恶意广告又找到了新的方法绕过广告屏蔽工具

广告屏蔽工具已经称为我们对抗恶意广告活动最后的希望了,但这个最后的保护屏障似乎也已经坍塌了。因为Malwarebytes近期发布了一项研究报告并详细介绍了一种恶...

2375
来自专栏全华班

微信公众号、小程序、接口统一集成开发平台框架

RhaPHP微信平台管理系统,支持多公众号管理,小程序开发,APP接口开发、几乎集合微信功能,简洁、快速上手、快速开发微信各种各样应用。简洁、好用、快速、项目开...

4842
来自专栏HappenLee的技术杂谈

可靠的、可扩展的、可维护的数据系统 ------《Designing Data-Intensive Applications》读书笔记1

作为一个开发者来说,目前绝大多数应用程序都是数据密集型的,而不是计算密集型的。CPU的计算能力不再成为这些应用程序的限制因素,而更加亟待解决的问题是海量的数据、...

1342
来自专栏杨建荣的学习笔记

从问题的处理方式感悟学习方法 (r4笔记第39天)

有时候当你碰到一些问题一筹莫展的时候,如果能够看到某个帖子的问题和你碰到的刚好一致,那种欣喜的感觉真是难以形容。 但是有些问题尽管发生的错误一致,处理的方式却不...

3055
来自专栏大数据挖掘DT机器学习

如何入门 Python 爬虫?

刚做完一个跟python爬虫相关的项目,也来说说自己的经验,希望对想学习python爬虫的人有所帮助。 既然问的是如何入门,我想一定是助学者,而且我觉...

3829

扫码关注云+社区

领取腾讯云代金券