零基础搭建 Prometheus 集群监控体系:实战指南

以下是为零基础设计的 Prometheus 集群监控搭建完整方案,通过分步操作和实用配置,帮助您快速构建生产级监控系统:


一、Prometheus 监控架构核心组件

暴露指标
HTTP 端点
拉取/存储
查询
可视化
告警规则
通知
被监控节点
Exporter
Prometheus Server
时序数据库
Grafana
监控看板
Alertmanager
Email/Slack/Webhook

二、搭建步骤详解(含完整代码)

步骤1:规划集群拓扑

业务集群
监控集群
Node Exporter
Node Exporter
MySQL Exporter
JMX Exporter
Web节点
Web节点
MySQL
Kafka
Prometheus-主
Prometheus-备
Grafana
Alertmanager

步骤2:安装基础组件(所有节点)

# 创建监控专用目录
sudo mkdir -p /opt/monitoring/{prometheus,grafana,alertmanager}
cd /opt/monitoring

# 下载核心组件
wget https://github.com/prometheus/prometheus/releases/download/v2.45.0/prometheus-2.45.0.linux-amd64.tar.gz
wget https://github.com/prometheus/alertmanager/releases/download/v0.26.0/alertmanager-0.26.0.linux-amd64.tar.gz
wget https://dl.grafana.com/oss/release/grafana-10.1.1.linux-amd64.tar.gz

# 解压并创建符号链接
tar -xzf prometheus-*.tar.gz && ln -s prometheus-* prometheus
tar -xzf alertmanager-*.tar.gz && ln -s alertmanager-* alertmanager
tar -xzf grafana-*.tar.gz && ln -s grafana-* grafana

步骤3:配置 Prometheus 主服务器

# 创建配置文件
cat <<EOF > prometheus/prometheus.yml
global:
  scrape_interval: 15s
  evaluation_interval: 15s

# 告警规则文件
rule_files:
  - "alerts/*.yml"

# 采集目标配置
scrape_configs:
  # 监控自身
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  # 节点监控
  - job_name: 'nodes'
    static_configs:
      - targets: 
        - 'web1:9100' 
        - 'web2:9100'
        - 'db-server:9100'

  # MySQL监控
  - job_name: 'mysql'
    static_configs:
      - targets: ['db-server:9104']

  # Kafka监控
  - job_name: 'kafka'
    static_configs:
      - targets: ['kafka1:7071']

# 远程写入配置(长期存储)
remote_write:
  - url: "http://thanos-receive:19291/api/v1/receive"
EOF

# 创建告警规则
mkdir prometheus/alerts
cat <<EOF > prometheus/alerts/server.yml
groups:
- name: server-alerts
  rules:
  - alert: HighCpuUsage
    expr: 100 - (avg by(instance)(irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 85
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "高CPU使用率 ({{ $labels.instance }})"
      description: "CPU使用率超过85% 当前值: {{ $value }}%"
EOF

步骤4:部署监控代理(Exporter)

1. 节点监控(所有服务器)
# 安装 Node Exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gz
tar -xzf node_exporter-*.tar.gz
sudo mv node_exporter-*/node_exporter /usr/local/bin/

# 创建系统服务
cat <<EOF | sudo tee /etc/systemd/system/node_exporter.service
[Unit]
Description=Node Exporter

[Service]
ExecStart=/usr/local/bin/node_exporter

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now node_exporter
2. MySQL 监控(数据库节点)
# 创建监控账户
mysql -e "CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'StrongPassword' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';"

# 安装 MySQL Exporter
wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.15.0/mysqld_exporter-0.15.0.linux-amd64.tar.gz
tar -xzf mysqld_exporter-*.tar.gz
sudo mv mysqld_exporter-*/mysqld_exporter /usr/local/bin/

# 创建配置文件
echo 'DATA_SOURCE_NAME="exporter:StrongPassword@(localhost:3306)/"' > /etc/mysqld_exporter.cnf

# 创建系统服务
cat <<EOF | sudo tee /etc/systemd/system/mysqld_exporter.service
[Unit]
Description=MySQL Exporter

[Service]
EnvironmentFile=/etc/mysqld_exporter.cnf
ExecStart=/usr/local/bin/mysqld_exporter

[Install]
WantedBy=multi-user.target
EOF

# 启动服务
sudo systemctl daemon-reload
sudo systemctl enable --now mysqld_exporter

步骤5:配置 Alertmanager(告警中心)

cat <<EOF > alertmanager/alertmanager.yml
route:
  group_by: ['alertname', 'cluster']
  group_wait: 30s
  group_interval: 5m
  repeat_interval: 3h
  receiver: 'slack-alerts'

receivers:
- name: 'slack-alerts'
  slack_configs:
  - api_url: 'https://hooks.slack.com/services/XXXXX/XXXXX/XXXXX'
    channel: '#alerts'
    send_resolved: true

# 抑制规则(减少重复告警)
inhibit_rules:
- source_match:
    severity: 'critical'
  target_match:
    severity: 'warning'
  equal: ['alertname', 'instance']
EOF

步骤6:启动监控集群

# 启动 Prometheus
./prometheus/prometheus --config.file=prometheus/prometheus.yml \
  --storage.tsdb.path=/data/prometheus \
  --web.enable-lifecycle

# 启动 Alertmanager
./alertmanager/alertmanager --config.file=alertmanager/alertmanager.yml

# 启动 Grafana
./grafana/bin/grafana-server -homepath ./grafana

步骤7:配置 Grafana 数据源和仪表板

  1. 访问 http://<server-ip>:3000 (默认账号 admin/admin)
  2. 添加数据源:选择 Prometheus,URL 填写 http://localhost:9090
  3. 导入官方仪表板:
    • Node Exporter 仪表板 ID: 1860
    • MySQL 仪表板 ID: 7362
    • Kafka 仪表板 ID: 7589

三、关键优化技巧

1. 长期存储方案(Thanos)

远程写入
Prometheus
Thanos Receiver
对象存储
Grafana
Thanos Query

部署命令:

docker run -d --name thanos-receive \
  -v /path/to/config:/etc/thanos \
  quay.io/thanos/thanos:v0.32.0 receive \
  --tsdb.path /var/thanos/receive \
  --objstore.config-file /etc/thanos/minio-bucket.yml

2. 高可用配置

# prometheus.yml 片段
scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: 
        - 'prometheus1:9090'
        - 'prometheus2:9090'

3. 动态服务发现(Kubernetes)

- job_name: 'kubernetes-pods'
  kubernetes_sd_configs:
  - role: pod
  relabel_configs:
  - source_labels: [__meta_kubernetes_pod_annotation_prometheus_io_scrape]
    action: keep
    regex: true

四、性能测试监控场景实践

压测期间监控重点:

压测监控指标权重

“应用延迟” : 35
“资源饱和度” : 25
“错误率” : 20
“队列积压” : 15
“业务吞吐” : 5

关键 PromQL 查询:

-- 1. 请求延迟 (P99)
histogram_quantile(0.99, 
  sum(rate(http_request_duration_seconds_bucket[5m])) by (le, service))

-- 2. 错误率增长
rate(http_requests_total{status_code!~"2.."}[5m]) > 0.05

-- 3. 线程池使用率
max by(instance) (tomcat_threads_active / tomcat_threads_max) > 0.8

-- 4. 消息积压
avg by(topic) (kafka_consumergroup_lag) > 1000

五、避坑指南(血泪经验)

  1. 指标基数爆炸

    # prometheus.yml
    scrape_configs:
      - job_name: 'high-cardinality'
        metric_relabel_configs:
        - source_labels: [user_id]
          regex: (.+)
          replacement: "***"
          target_label: user_id
    
  2. 存储空间不足

    # 启动参数添加保留策略
    --storage.tsdb.retention.time=30d
    --storage.tsdb.retention.size=100GB
    
  3. 配置热重载

    # 动态更新配置
    curl -X POST http://prometheus:9090/-/reload
    
  4. 跨地域监控

    # 联邦配置
    scrape_configs:
      - job_name: 'federate'
        honor_labels: true
        metrics_path: '/federate'
        params:
          'match[]':
            - '{job="nodes"}'
        static_configs:
          - targets:
            - 'prometheus-us-east:9090'
            - 'prometheus-eu-west:9090'
    

六、监控体系验证清单

  1. 所有节点 Node Exporter 状态 up{job="nodes"} == 1
  2. Prometheus 自身指标可查询 prometheus_build_info
  3. Alertmanager 能接收测试告警
  4. Grafana 仪表板数据刷新正常
  5. 关键指标告警规则已配置(CPU/内存/磁盘)
  6. 历史数据可查询(范围>24小时)
  7. 压测期间指标采样频率正常

部署完成标志:在 Grafana 中看到完整的节点资源使用曲线,并成功收到测试告警通知。

通过本方案,您可以在 2小时内 完成生产可用的监控集群搭建,满足性能测试的核心监控需求。实际工作中建议配合 CI/CD 实现配置自动化管理。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐