监控报警中心平台技术选型及实战复盘
2020-03-15 本文已影响0人
hugoren
监控的分类
-
从服务视角,一般可以是看成金字塔的形式
image.png
- 从技术的视角,可看成是三分天下的形式
基于 Tracing(调用链)监控
基于Metrics(指标)监控
基于Logging(日志) 的监控。
image.png
根据分类选择适用的技术组合
- 金子塔型选择有大而全的zabbix,nagios
图片来源官网
早期还开发了一个app(安卓),通过调用zabbix的api, 显示,操作主机,应用
image.png
nagios
图片来源官网
- Tracing, Logging, Metrices型选择,每一类都有不同的选择组合(开源或造轮子)
Tracing: 也有人叫调用链系统,做应用性能监控(APM)这块是必不可少的, 如zipkin, SKYwalking, pingpont, cat....
image.png
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的方式采集数据,提供常用组件,还有很多社区开源的组件,不过这已经够用了。
- 自定义数据通过http传输
# hugo表示指标
echo "hugo 889" | curl --data-binary @- http://119.29.98.155:9091/metrics/job/hugo
- pushgateway传输
"""
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)
-
效果
image.png
log监控的选择ES, ClickHouse
这个监控的思路就比较简单些,定时任务或队列的方式去分析数据,根据业务需求,告警防抖,限流等。
开源定时任务Yelp/elastalert,elastalert是基scheduler封装的,也可以自定义封装。
如果是用kafka作队列,使用流式传输# robinhood/faust
如果是redis作队列,使用pipeline方式
智能监控
这块我还没实践过,不敢多言。看过x度AIOPS的公众号,大概是思路是根据异常检测算法,策略编排算法,流量调度算法等建立模型,提供多维的数据作决策。希望有机会试试。
复盘
通过以上从面到点的构建一套监控体系,让我们能主动,预先感知服务的承载能力,业务的服务情况。
参考
如何做监控?Google SRE 解密
Prometheus 与 Grafana:监控报警系统中的银弹
zipkin原理
基于sanic的微服务框架链路跟踪
图片来源官网
image.png
图片来源官网