跳到主要内容

资源使用监控

介绍

在运维和开发中,监控系统资源的使用情况是确保应用程序稳定性和性能的关键。Prometheus 是一个强大的开源监控工具,能够帮助我们收集、存储和查询各种资源使用指标。本文将介绍如何使用 Prometheus 监控 CPU、内存、磁盘和网络等资源的使用情况,并通过实际案例展示其应用。

资源使用监控的核心概念

1. 指标(Metrics)

Prometheus 通过指标来监控资源使用情况。指标是系统或应用程序中某个特定属性的数值表示,例如 CPU 使用率、内存使用量等。Prometheus 使用时间序列数据模型来存储这些指标。

2. 采集器(Exporters)

Prometheus 本身不直接采集数据,而是通过采集器(Exporters)从目标系统中获取数据。常见的采集器包括:

  • Node Exporter:用于监控主机级别的资源使用情况。
  • cAdvisor:用于监控容器资源使用情况。

3. 查询语言(PromQL)

Prometheus 提供了强大的查询语言 PromQL,用于分析和查询监控数据。通过 PromQL,我们可以计算资源使用率、检测异常等。


监控 CPU 使用率

示例:使用 Node Exporter 监控 CPU 使用率

Node Exporter 会暴露一个名为 node_cpu_seconds_total 的指标,表示 CPU 在不同模式下的使用时间(以秒为单位)。我们可以通过 PromQL 计算 CPU 使用率。

输入

promql
100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100)

输出

该查询返回过去 1 分钟内 CPU 的平均使用率(百分比)。

提示

rate() 函数用于计算时间序列的变化率,avg() 函数用于计算平均值。


监控内存使用情况

示例:使用 Node Exporter 监控内存使用量

Node Exporter 提供了 node_memory_MemTotal_bytesnode_memory_MemFree_bytes 指标,分别表示总内存和空闲内存。

输入

promql
(node_memory_MemTotal_bytes - node_memory_MemFree_bytes) / node_memory_MemTotal_bytes * 100

输出

该查询返回当前内存使用率(百分比)。


监控磁盘使用情况

示例:使用 Node Exporter 监控磁盘使用量

Node Exporter 提供了 node_filesystem_size_bytesnode_filesystem_free_bytes 指标,分别表示磁盘总大小和空闲大小。

输入

promql
(node_filesystem_size_bytes{mountpoint="/"} - node_filesystem_free_bytes{mountpoint="/"}) / node_filesystem_size_bytes{mountpoint="/"} * 100

输出

该查询返回根分区(/)的磁盘使用率(百分比)。


监控网络流量

示例:使用 Node Exporter 监控网络流量

Node Exporter 提供了 node_network_receive_bytes_totalnode_network_transmit_bytes_total 指标,分别表示接收和发送的网络字节数。

输入

promql
rate(node_network_receive_bytes_total[1m]) * 8

输出

该查询返回过去 1 分钟内网络接收流量的速率(以比特/秒为单位)。

备注

乘以 8 是为了将字节转换为比特。


实际案例:监控 Kubernetes 集群资源使用

假设我们有一个 Kubernetes 集群,需要监控其节点的资源使用情况。我们可以使用以下步骤:

  1. 部署 Node Exporter:在每个节点上部署 Node Exporter,以收集主机级别的资源使用数据。
  2. 部署 Prometheus:配置 Prometheus 从 Node Exporter 中抓取数据。
  3. 配置告警规则:例如,当 CPU 使用率超过 80% 时触发告警。

示例告警规则

yaml
groups:
- name: node-resource-usage
rules:
- alert: HighCPUUsage
expr: 100 - (avg(rate(node_cpu_seconds_total{mode="idle"}[1m])) * 100) > 80
for: 5m
labels:
severity: critical
annotations:
summary: "High CPU usage detected"
description: "CPU usage on {{ $labels.instance }} is above 80% for 5 minutes."

总结

通过 Prometheus,我们可以轻松监控系统资源的使用情况,包括 CPU、内存、磁盘和网络等关键指标。本文介绍了如何使用 Node Exporter 采集数据,并通过 PromQL 查询和分析这些数据。我们还通过实际案例展示了如何在 Kubernetes 集群中应用这些监控技术。


附加资源与练习

附加资源

练习

  1. 在你的本地环境中部署 Prometheus 和 Node Exporter。
  2. 使用 PromQL 查询 CPU 使用率,并尝试设置一个告警规则。
  3. 扩展监控范围,包括磁盘 I/O 和网络延迟等指标。

通过实践,你将更好地掌握 Prometheus 的资源使用监控功能!