这篇文章上次修改于 899 天前,可能其部分内容已经发生变化,如有疑问可询问作者。

1 系统监控

系统监控需要涵盖系统的整体资源使用情况,比如 CPU、内存、磁盘、文件系统和网络等各种系统资源。

1.1 USE 法

USE 法把系统资源的性能指标简化为了三个类别,使用率、饱和度和错误数。

USE 方法的指标直接表明了系统的资源瓶颈。

1.2 监控系统

需要建立监控系统,将监控的性能指标存下来;然后,根据监控到的状态自动分析和定位大概的瓶颈来源;最后,再通过告警系统把问题及时汇报给相关的团队处理。

一个完整的监控系统包括数据采集、数据存储、数据查询、数据处理、告警、可视化等多个模块。开源的监控工具包括 Zabbix、Nagios、Prometheus 等。

Prometheus 架构图:

  • Retrivel 负责采集数据,包括 Pull 模式和 Push 模式。
  • TSDB 负责将采集到的数据持久化到 SSD 等磁盘中,还提供了数据查询和基本的数据处理功能,也就是 PromQL 语言。
  • Alertmanager 提供了告警功能,包括基于 PromQL 语言的触发条件、告警规则的配置管理以及告警的发送等。还支持通过分组、抑制或静默等多种方式来聚合同类告警,并减少告警数量。
  • web UI 提供了简单的可视化界面,用于执行 PromQL 查询语句,配合 Grafana 可以构建强大的图形界面。

2 应用监控

应用程序的核心指标,不再是资源的使用情况,而是请求数、错误率和响应时间。这些指标不仅直接关系到用户的使用体验,还反映应用整体的可用性和可靠性。

另外,如下三个指标也很重要:

  • 进程的资源使用情况。
  • 应用程序之间的调用情况。
  • 应用程序内部核心逻辑执行情况,需要应用程序提供指标。

为了迅速定位跨应用的性能瓶颈,可以使用 Zipkin、Jaeger、Pinpoint 等各类开源工具,来构建全链路跟踪系统。全链路跟踪除了可以快速定位跨应用的性能问题外,还可以生成线上系统的调用拓扑图。

2.1 日志监控

日志是指标上下文信息的来源。

对日志监控来说,最经典的方法,就是使用 ELK 技术栈,即使用 Elasticsearch、Logstash 和 Kibana 这三个组件的组合。

  • Logstash 负责从各个日志源采集日志,然后进行预处理。
  • Elasticsearch 负责对日志索引,提供搜索引擎。
  • Kibana 负责对日志进行可视化分析,包括日志搜索、处理、仪表板展示等。

在资源紧张的环境中,往往使用资源消耗更低的 Fluentd 替代 Logstash。

参考

倪朋飞. Linux 性能优化实战.