分布式关键技术之全栈监控

1. 前言

最近又看了一遍左耳朵耗子对分布式系统的阐述,结合最近做的项目,感觉理解又深入了一层,特总结了接下来几篇关于分布式关键技术的介绍。

2. 何谓全栈监控

在分布式系统下,系统一般分为多层,服务各种关联,需要监控的东西也特别多,如果没有一个好的监控系统,我们将无法进行自动化运维和资源调度,而全栈监控能很好的帮我们解决这个问题。
全栈监控其实就是三层监控,如下所示:

  • 基础层:监控主机和多层资源。比如:CPU、内存、网络吞吐、硬盘I/O、硬盘使用等
  • 中间层:就是中间层的监控。比如:Nginx、Redis、ActiveMQ、kafka、MySQL、Tomcat等。
  • 应用层:监控应用层的使用。比如:HTTP访问吞吐量、响应时间、返回码、性能瓶颈等。

分布式关键技术之全栈监控_第1张图片

这还需要一些监控的标准化。

  • 日志数据结构化;
  • 监控数据格式…
  • 统一的监控平台;
  • 统一的日志分析。

3. 什么才是好的监控系统

不好的监控系统一般有如下两个大的问题:
1. 监控数据是隔离开来的。因为分工的问题,开发、应用运维、系统运维,各管各的,所以很多的监控系统也是各是各的,完全串不起来。
2. 监控的数据项太多。对于监控,必须抓住重点去监控。
一个好的监控系统应该有以下几个特征:

  • 关注于整体应用的 SLA。主要从为用户服务的 API 来监控…
  • 关联指标聚合。 把有关联的系统及其指标聚合展示。主要是三层系统数据:基础层、平台中间件层和应用层。其中,最重要的是把服务和相关的中间件以及主机关联在一起,否则,对于一个分布式系统来说,定位问题犹如大海捞针。
  • 快速故障定位。 对于现有的系统来说,故障总是会发生的,而且还会频繁发生。故障发生不可怕,可怕的是故障的恢复时间过长。所以,快速地定位故障就相当关键。快速定位问题需要对整个分布式系统做一个用户请求跟踪的 trace 监控,我们需要监控到所有的请求在分布式系统中的调用链,这个事最好是做成没有侵入性的。

换句话说,一个好的监控系统主要是为以下两个场景所设计的。
“体检”

  • 容量管理。 提供一个全局的系统运行时数据的展示,可以让运维人员知道是否需要增加机器或者其它资源。
  • 性能管理。可以通过查看大盘,找到系统瓶颈,并有针对性地优化系统和相应代码。

“急诊”

  • 定位问题。可以快速地暴露并找到问题的发生点,帮助技术人员诊断问题。
  • 性能分析。当出现非预期的流量提升时,可以快速地找到系统的瓶颈,并可以帮助开发人员深入代码。

只有做到了上述的这些才能是一个好的监控系统。

你可能感兴趣的:(分布式架构)