采集设计

埋点与侵入式

对于应用程序错误数、应用程序请求量、应用平均响应时间的监控,这里是一个分水岭,因为这里想要做到无侵入的效果,需要做一些额外的工作,否则只能编写大量的“埋点”代码。比如,是不是有一个网关来统一进行流量分发?是不是有一个统一的 RPC 框架、数据库访问框架等等。如果有这样的统一模块就好办了,直接在这些模块里增加监控功能。

数据存储

关于采集到的数据如何存储,主流的选择是将数据写入到一个时序数据库中。

  • Prometheus 提供了丰富的数据模型和查询语句,容易上手,很容易集成到现有的环境中,但是 Prometheus 的集群和 HA 架构并不成熟,需要额外的开发,并不适合。

  • InfluxDB 是在 Prometheus 之后才提出的,并且提供商业的伸缩和集群化服务,相比 Prometheus 的 metrics 存储,InfluxDB 还能处理事件类型的数据,对于大部分公司而言,商业化基本不会考虑。

  • OpenTSDB 是一个基于 Hadoop 和 Hbase 的分布式事件序列数据库,相比 Prometheus 和 InfluxDB,OpenTSDB 的横向扩缩容很容易 (需要有丰富的 Hadoop/HBase 维护经验), 同时官方 Open-falcon 支持 OpenTSDB。

在 Prometheus 中收集所有指标后,你可以使用 Grafana 可视化这些指标。关于数据展示的选型,在没有自研能力的情况下,Grafana 是不二选择。Grafana 的告警功能强大方便,同时支持钉钉,Webhook 等,满足公司所有的需求。与此同时,我们将 Grafana 和 Docker 技术结合,实现了 Grafana 高可用、自愈和无限扩展能力。

下一页