系统监控
系统监控是运维工作的核心,通过监控系统性能指标,及时发现系统问题,保障系统稳定运行。
📋 监控体系架构
🎯 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"
}
]
}
}参考资源:
- Prometheus 官方文档
- Grafana 官方文档
- 视频推荐:Prometheus + Grafana 监控实战
- 书籍推荐:《Prometheus监控实战》
🎯 核心监控指标
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已创建
- [ ] 告警规则已配置
- [ ] 告警通知已设置
- [ ] 监控数据已存储
- [ ] 监控系统正常运行