零基础学习性能测试第二章-prometheus集群数据收集体系搭建
·
目录
零基础搭建 Prometheus 集群监控体系:实战指南
以下是为零基础设计的 Prometheus 集群监控搭建完整方案,通过分步操作和实用配置,帮助您快速构建生产级监控系统:
一、Prometheus 监控架构核心组件
二、搭建步骤详解(含完整代码)
步骤1:规划集群拓扑
步骤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 数据源和仪表板
- 访问
http://<server-ip>:3000(默认账号 admin/admin) - 添加数据源:选择 Prometheus,URL 填写
http://localhost:9090 - 导入官方仪表板:
- Node Exporter 仪表板 ID: 1860
- MySQL 仪表板 ID: 7362
- Kafka 仪表板 ID: 7589
三、关键优化技巧
1. 长期存储方案(Thanos)
部署命令:
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
五、避坑指南(血泪经验)
-
指标基数爆炸
# prometheus.yml scrape_configs: - job_name: 'high-cardinality' metric_relabel_configs: - source_labels: [user_id] regex: (.+) replacement: "***" target_label: user_id -
存储空间不足
# 启动参数添加保留策略 --storage.tsdb.retention.time=30d --storage.tsdb.retention.size=100GB -
配置热重载
# 动态更新配置 curl -X POST http://prometheus:9090/-/reload -
跨地域监控
# 联邦配置 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'
六、监控体系验证清单
- 所有节点 Node Exporter 状态
up{job="nodes"} == 1 - Prometheus 自身指标可查询
prometheus_build_info - Alertmanager 能接收测试告警
- Grafana 仪表板数据刷新正常
- 关键指标告警规则已配置(CPU/内存/磁盘)
- 历史数据可查询(范围>24小时)
- 压测期间指标采样频率正常
部署完成标志:在 Grafana 中看到完整的节点资源使用曲线,并成功收到测试告警通知。
通过本方案,您可以在 2小时内 完成生产可用的监控集群搭建,满足性能测试的核心监控需求。实际工作中建议配合 CI/CD 实现配置自动化管理。
更多推荐
所有评论(0)