1.3 监控云
程序的稳定运行离不开监控,监控云产品就是为实现这一目标所设立。一般来讲,监控主要从基础设施监控、应用监控、用户端监控几个方面进行。对于基础设施监控,千丁云研发小组使用业界比较流行的Prometheus+AlertManager进行监控。对于应用程序监控,主要涉及Log、Metrics、Trace几方面,为此他们评估了业界几个主流的开源产品PinPoint、SkyWalking、ElasticAPM。

由于PinPoint部署过于复杂,需要HBase环境,首先排除PinPoint。SkyWalking告警规则文档描述不清,似乎不能运行时修改告警规则。ElasticAPM不支持Dubbo,但代码结构清晰,监控数据存储在ElasticSearch中,容易扩展开发,同时Elastic APM可以与kibana结合,利用kibana丰富的可视化功能,方便的展示应用运行时信息。结合实际情况,最终他们选择了ElasticAPM做为APM,整个APM架构如下:

为了实现发送告警通知,他们参考Prometheus的PromQL查询语言实现了一套新的查询表达式,方便系统研发使用来进行告警规则设置。比如:avg(http{appname="qdp-polaris-server"} by url range 5m)> 2000,计算5分钟内qdp-polaris-server系统各个http接口的平均响应时间,如果超过2000ms则产生报警。相当于SQL中的select avg(响应时间) from table where timestamp between now() - 5m and now() group by url。值得注意的是,Skywalking 6.5.0后也实现了运行时动态配置告警规则,关于Skywalking他们则将持续关注。
用户端监控方面,目前他们使用监控宝进行监控,周期性查看来自用户端的性能报告来优化系统。