监控报警中心平台技术选型及实战复盘

2020-03-15  本文已影响0人  hugoren

监控的分类

基于 Tracing(调用链)监控
基于Metrics(指标)监控
基于Logging(日志) 的监控。

image.png

根据分类选择适用的技术组合

zabbix

图片来源官网
早期还开发了一个app(安卓),通过调用zabbix的api, 显示,操作主机,应用
image.png
nagios
图片来源官网

tracing监控选择: zipkin, jaeger

openzipkin/zipkin

aegertracing/jaeger

如果有一个集团中,有不同的链路追踪组合,怎么办?可以用opentracing, openTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。


图片来源[https://zhuanlan.zhihu.com/p/44901528]
zipkin整合效果

以为python为例,下载导入py-zipkin, 调用核心代码有

def http_transport(encoded_span):
    # encoding prefix explained in https://github.com/Yelp/py_zipkin#transport
    #body = b"\x0c\x00\x00\x00\x01"+encoded_span
    body=encoded_span
    zipkin_url="xx:9411/api/v1/spans"
    #zipkin_url = "http://{host}:{port}/api/v1/spans".format(
     #   host=app.config["ZIPKIN_HOST"], port=app.config["ZIPKIN_PORT"])
    headers = {"Content-Type": "application/x-"
                               "thrift"}
    r = requests.post(zipkin_url, data=body, headers=headers)
    print(r.text)

with zipkin_span(
        service_name='webapp',
        span_name='index',
        transport_handler=http_transport,
        port=5000,
        sample_rate=100,  # 0.05, # Value between 0.0 and 100.0
):
    with zipkin_span(service_name='webapp', span_name='do_test'):
        print("test")

当前版本ui比之前好用,好看些, 虽然用上全链路临控,但这种方式是有侵入性,对性能是有影响,因为每次请求,都加上自定义的headers,把这一次的信息传给zipkin。


image.png
jaeger整合效果

metrix监控的选择promethes

promethes采用pull或push的方式采集数据,提供常用组件,还有很多社区开源的组件,不过这已经够用了。

# hugo表示指标
 echo "hugo 889" | curl --data-binary @- http://119.29.98.155:9091/metrics/job/hugo
"""
Author: Hugo
Date: 14/3/2020 2:05 PM
Desc: 
"""
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway

registry = CollectorRegistry()
g = Gauge('job_last_success_unixtime', 'Last time a batch job successfully finished', registry=registry)
g.set_to_current_time()
push_to_gateway('119.29.98.155:9091', job='batch_hugo', registry=registry)

log监控的选择ES, ClickHouse

这个监控的思路就比较简单些,定时任务或队列的方式去分析数据,根据业务需求,告警防抖,限流等。
开源定时任务Yelp/elastalert,elastalert是基scheduler封装的,也可以自定义封装。
如果是用kafka作队列,使用流式传输# robinhood/faust
如果是redis作队列,使用pipeline方式

智能监控

这块我还没实践过,不敢多言。看过x度AIOPS的公众号,大概是思路是根据异常检测算法,策略编排算法,流量调度算法等建立模型,提供多维的数据作决策。希望有机会试试。

复盘

通过以上从面到点的构建一套监控体系,让我们能主动,预先感知服务的承载能力,业务的服务情况。

参考

如何做监控?Google SRE 解密
Prometheus 与 Grafana:监控报警系统中的银弹
zipkin原理
基于sanic的微服务框架链路跟踪

上一篇 下一篇

猜你喜欢

热点阅读