分布式系统越做越大,服服务化规模也越来越复杂,为了减轻运维压力、提高排错能力,分布式系统的全链路监控系统就显得尤为重要了。监控系统通常会包括几个部分:
第一, 数据埋点和采集 ,这个相当重要,其实说白了,数据是整个监控系统最核心的部分,必须有能力快速和正确和方便地采集日志,所以我们在数据埋点和采集上做了很多文章。
第二, 指标计算 。指标计算有好几种方式,一种我可以在客户端做一些计算,通过 agent 上报计算结果,然后到服务端再做加工。还有一种策略是完全在服务端的计算,客户端只做简单的数据采集,所有的指标计算全放在服务端。这二种架构其实都有不同的优缺点。
第三, 指标存储、查询、展现 ,这个也非常重要。算完后的指标放在哪里,这些指标怎么样快速的查询出来,指标怎么样很灵活的展现给我们的运营人员、开发人员。
第四, 调用链的存储、查询、展现 。因为我们是全链路监控系统,调用链怎么存、怎么查、怎么看,这个也是非常重要的。
第五, 告警、问题定位 ,因为你单纯只有查询远远不够,我们需要一个很快速很高效的告警,同时产生告警之后,我们需要很快速的去定位这个告警是什么原因导致的。
第六, 自监控 。我们的体系需要一个自监控的功能,假如我在大促的时候挂了,我需要很快的恢复我们的平台,自监控非常重要。
第七, 治理 。大促之前需要动态地调整日志采样率,或者对日志采集做一些功能降级,例如不采集缓存相关日志。
技术栈:Spark 、 Open TSDB 、HBase 、Elastic Search,Kafka,Flume,Python;日志监控框架(Logstash, ElasticSearch, kibana)
具体参见:http://www.open-open.com/lib/view/open1470732672604.html