Skip to content

系统监控 ​

系统监控是运维工作的核心,通过监控系统性能指标,及时发现系统问题,保障系统稳定运行。

📋 监控体系架构 ​

🎯 Prometheus + Grafana ​

1. Prometheus 架构 ​

Prometheus是CNCF毕业的开源监控系统,采用Pull模式采集指标。

核心组件:

  • Prometheus Server:指标采集和存储
  • Exporter:指标导出器
  • AlertManager:告警管理
  • Pushgateway:Push模式网关

架构图:

2. Prometheus 配置 ​

prometheus.yml 配置示例:

yaml
global:
  scrape_interval: 15s
  evaluation_interval: 15s
  external_labels:
    cluster: 'production'
    replica: '0'

alerting:
  alertmanagers:
    - static_configs:
        - targets: ['alertmanager:9093']

rule_files:
  - "alert_rules.yml"

scrape_configs:
  # 监控Prometheus自身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']
  
  # 监控应用服务
  - job_name: 'app-service'
    static_configs:
      - targets: ['app1:8080', 'app2:8080']
    metrics_path: '/actuator/prometheus'
  
  # 监控MySQL
  - job_name: 'mysql'
    static_configs:
      - targets: ['mysql-exporter:9104']
  
  # 监控Redis
  - job_name: 'redis'
    static_configs:
      - targets: ['redis-exporter:9121']
  
  # 监控系统资源
  - job_name: 'node-exporter'
    static_configs:
      - targets: ['node1:9100', 'node2:9100']

3. Grafana 可视化 ​

Grafana是开源的数据可视化平台,支持多种数据源。

Dashboard 配置示例:

json
{
  "dashboard": {
    "title": "系统监控Dashboard",
    "panels": [
      {
        "title": "CPU使用率",
        "targets": [
          {
            "expr": "100 - (avg(irate(node_cpu_seconds_total{mode=\"idle\"}[5m])) * 100)",
            "legendFormat": "CPU使用率"
          }
        ],
        "type": "graph"
      },
      {
        "title": "内存使用率",
        "targets": [
          {
            "expr": "(node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100",
            "legendFormat": "内存使用率"
          }
        ],
        "type": "graph"
      },
      {
        "title": "请求QPS",
        "targets": [
          {
            "expr": "rate(http_requests_total[5m])",
            "legendFormat": "QPS"
          }
        ],
        "type": "graph"
      }
    ]
  }
}

参考资源:

🎯 核心监控指标 ​

1. 系统资源指标 ​

CPU指标:

  • node_cpu_seconds_total:CPU使用时间
  • node_cpu_seconds_total{mode="idle"}:CPU空闲时间
  • CPU使用率计算公式:
    CPU使用率 = 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)

内存指标:

  • node_memory_MemTotal_bytes:总内存
  • node_memory_MemAvailable_bytes:可用内存
  • node_memory_MemFree_bytes:空闲内存
  • 内存使用率计算公式:
    内存使用率 = (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100

磁盘指标:

  • node_disk_io_time_seconds_total:磁盘IO时间
  • node_disk_read_bytes_total:磁盘读取字节数
  • node_disk_written_bytes_total:磁盘写入字节数
  • node_filesystem_size_bytes:文件系统大小
  • node_filesystem_avail_bytes:可用空间

网络指标:

  • node_network_receive_bytes_total:接收字节数
  • node_network_transmit_bytes_total:发送字节数
  • node_network_receive_errs_total:接收错误数
  • node_network_transmit_errs_total:发送错误数

2. 应用指标 ​

HTTP指标:

  • http_requests_total:HTTP请求总数
  • http_request_duration_seconds:HTTP请求耗时
  • http_request_size_bytes:请求大小
  • http_response_size_bytes:响应大小

JVM指标(Java应用):

  • jvm_memory_used_bytes:JVM内存使用
  • jvm_memory_max_bytes:JVM最大内存
  • jvm_gc_collection_seconds:GC耗时
  • jvm_threads_active:活跃线程数

数据库指标:

  • mysql_global_status_queries:查询总数
  • mysql_global_status_slow_queries:慢查询数
  • mysql_global_status_connections:连接数
  • mysql_global_status_threads_connected:已连接线程数

3. 业务指标 ​

业务指标示例:

  • 用户注册数
  • 订单创建数
  • 支付成功率
  • API调用成功率
  • 错误率

📋 监控最佳实践 ​

1. 指标设计 ​

指标设计原则:

  • 可观测性:指标应能反映系统状态
  • 可操作性:指标应能指导运维操作
  • 可扩展性:指标设计应考虑扩展性
  • 标准化:指标命名应标准化

2. 告警规则 ​

告警规则设计:

yaml
groups:
  - name: system_alerts
    rules:
      # CPU使用率告警
      - alert: HighCPUUsage
        expr: 100 - (avg(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
        for: 5m
        labels:
          severity: warning
        annotations:
          summary: "CPU使用率过高"
          description: "CPU使用率持续5分钟超过85%"
      
      # 内存使用率告警
      - alert: HighMemoryUsage
        expr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "内存使用率过高"
          description: "内存使用率持续5分钟超过90%"
      
      # 磁盘使用率告警
      - alert: HighDiskUsage
        expr: (node_filesystem_size_bytes - node_filesystem_avail_bytes) / node_filesystem_size_bytes * 100 > 85
        for: 10m
        labels:
          severity: warning
        annotations:
          summary: "磁盘使用率过高"
          description: "磁盘使用率持续10分钟超过85%"

3. Dashboard设计 ​

Dashboard设计原则:

  • 层次清晰:按照层次组织Dashboard
  • 重点突出:突出关键指标
  • 易于理解:图表清晰易懂
  • 实时更新:Dashboard实时更新

📖 学习资源 ​

视频教程 ​

书籍推荐 ​

  • 《Prometheus监控实战》 - 深入讲解Prometheus
  • 《Grafana可视化实战》 - Grafana使用指南
  • 《监控的艺术》 - 监控系统设计和实践
  • 《SRE:Google运维解密》 - Google SRE实践

网站资源 ​

工具推荐 ​

  • 监控工具:Prometheus、Grafana、Zabbix、Nagios
  • Exporter:node-exporter、mysql-exporter、redis-exporter
  • 告警工具:AlertManager、PagerDuty、OpsGenie

✅ 系统监控检查清单 ​

  • [ ] 监控系统已部署
  • [ ] 监控指标已配置
  • [ ] Dashboard已创建
  • [ ] 告警规则已配置
  • [ ] 告警通知已设置
  • [ ] 监控数据已存储
  • [ ] 监控系统正常运行

上一章节:运维与监控概览
下一章节:日志监控
返回目录:工程架构能力