1. 技术栈选型背景
在企业运维领域,服务器监控就像医院的心电图监测仪。传统方案如Zabbix需要复杂配置,Nagios界面不够直观。而Prometheus+Grafana这对黄金组合,就像给运维团队装上了「超清夜视仪」:
- Prometheus:时序数据库+多维数据模型,支持灵活查询
- Grafana:可视化领域的瑞士军刀,提供丰富的仪表盘模板
- Exporter生态:覆盖硬件、中间件、数据库等200+监控指标采集
2. 环境搭建手记
(Ubuntu 22.04示例)
2.1 Prometheus安装三部曲
sudo useradd --no-create-home --shell /bin/false prometheus
# 下载二进制包(版本根据实际需求调整)
wget https://github.com/prometheus/prometheus/releases/download/v2.47.1/prometheus-2.47.1.linux-amd64.tar.gz
tar xvf prometheus-*.tar.gz
# 配置systemd服务(重点关注--web.enable-lifecycle参数)
sudo tee /etc/systemd/system/prometheus.service <<EOF
[Unit]
Description=Prometheus Monitoring
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
ExecStart=/usr/local/bin/prometheus \
--config.file=/etc/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus/data \
--web.enable-lifecycle \
--web.listen-address=0.0.0.0:9090
Restart=always
[Install]
WantedBy=multi-user.target
EOF
关键参数解析:
--web.enable-lifecycle
:支持API热重载配置storage.tsdb.path
:数据存储路径需确保权限正确web.listen-address
:生产环境建议绑定内网IP
3. 监控数据采集实战
3.1 Node Exporter部署(主机级监控)
# prometheus.yml 配置片段
scrape_configs:
- job_name: 'node'
scrape_interval: 15s
static_configs:
- targets: ['192.168.1.10:9100', '192.168.1.11:9100']
relabel_configs:
- source_labels: [__address__]
target_label: instance
replacement: $1
action: replace
实战技巧:
- 使用
relabel_configs
规范化实例标签 - 混合云环境可通过服务发现动态获取targets
3.2 自定义指标采集(Shell脚本示例)
#!/bin/bash
# 自定义磁盘inode监控指标
INODE_USAGE=$(df -i | grep '/dev/sda1' | awk '{print $5}' | tr -d '%')
echo "node_inode_usage{device=\"sda1\"} $INODE_USAGE" > /var/lib/node_exporter/textfile_collector/inode.prom
定时任务配置:
* * * * * /opt/scripts/inode_monitor.sh
说明:
- 输出文件需存放到textfile_collector目录
- 指标命名遵循
exportername_metricname
格式
4. Grafana可视化工程
4.1 仪表盘模板化管理
// 折线图panel配置片段
{
"aliasColors": {},
"dashLength": 10,
"datasource": "Prometheus",
"fieldConfig": {
"defaults": {
"custom": {
"drawStyle": "line",
"fillOpacity": 10,
"lineWidth": 2
},
"unit": "percent"
}
},
"targets": [
{
"expr": "100 - (avg by(instance) (rate(node_cpu_seconds_total{mode=\"idle\"}[1m])) * 100)",
"legendFormat": "{{instance}} CPU使用率"
}
]
}
可视化优化点:
- 使用
$interval
变量实现动态时间窗口 - 添加Annotations标记运维事件时间轴
5. 报警体系构建
5.1 Alertmanager配置精要
route:
group_by: ['alertname', 'cluster']
group_wait: 30s
group_interval: 5m
repeat_interval: 3h
receiver: 'wechat_team'
receivers:
- name: 'wechat_team'
wechat_configs:
- corp_id: 'YOUR_CORPID'
to_user: '@all'
agent_id: '1000002'
api_secret: 'YOUR_SECRET'
报警策略黄金法则:
- 避免过多层级路由导致通知延迟
- 分级设置:warning(工单)、critical(电话通知)
- 配置静默规则处理计划内维护时段
6. 应用场景剖析
6.1 经典使用案例
- 混合云资源监控:统一采集AWS、Azure、本地物理机指标
- K8s监控体系:配合kube-state-metrics实现全栈监控
- 业务指标追踪:通过Pushgateway收集批处理任务指标
6.2 技术优势解码
优势项 | 说明 |
---|---|
多维数据模型 | 支持标签动态过滤,比传统三维监控更灵活 |
PromQL查询语言 | 类SQL语法实现秒级聚合分析 |
联邦集群 | 支持跨地域、跨集群数据聚合 |
7. 避坑指南(血泪经验)
- 时间序列膨胀:定期检查
rate()
函数的使用,避免高基数标签 - 存储优化实践:SSD硬盘+独立磁盘分区,设置保留策略(推荐15-30天)
- 权限安全管控:Grafana匿名访问必须禁用,Prometheus启用basic auth
- 版本兼容风险:Exporter与Prometheus版本差距不宜超过6个月
8. 终极性能调优
通过调整资源分配实现监控系统自监控:
# 限制Prometheus内存使用(根据实际硬件调整)
--storage.tsdb.retention.time=30d \
--storage.tsdb.max-block-duration=2h \
--storage.tsdb.min-block-duration=2h \
--query.max-concurrency=20 \
--query.timeout=2m
指标监控黄金组合:
prometheus_tsdb_head_series
:监控时间序列数量process_resident_memory_bytes
:内存占用趋势
9. 生态扩展方案
当基础监控满足后,可接入:
- Loki:日志监控联动
- Thanos:实现长期存储和跨集群查询
- Blackbox Exporter:网络探测与接口监控