17.6.2 Prometheus数据源配置与最佳实践
Prometheus 作为 Grafana 的核心数据源,配置质量直接影响查询性能、告警稳定性与可视化体验。本节给出数据源配置原理、完整示例、排错流程与练习,便于落地。
原理草图(Grafana 访问 Prometheus 数据流)
安装与基础前置(Grafana 运行环境)
# 1) 安装 Grafana(以 CentOS/RHEL 为例)
sudo yum install -y https://dl.grafana.com/oss/release/grafana-10.4.2-1.x86_64.rpm
# 2) 启动并设置开机自启
sudo systemctl enable --now grafana-server
# 3) 验证服务端口
ss -lntp | grep 3000
# 预期:LISTEN 0 128 0.0.0.0:3000 ...
命令解释
- systemctl enable --now:立即启动并设置开机自启
- ss -lntp:查看监听端口,确认 Grafana 运行正常
Prometheus 数据源配置(UI 与文件化 Provisioning)
1)UI 配置关键参数(示例)
- URL:http://prometheus:9090
- Access:Server
- Min step:15s(与 Prometheus scrape_interval 对齐)
- Query Timeout:60s
2)文件化 Provisioning(推荐,避免手工漂移)
文件路径:/etc/grafana/provisioning/datasources/prometheus.yaml
apiVersion: 1
datasources:
- name: prom-prod
type: prometheus
access: proxy
url: http://prometheus:9090
isDefault: true
jsonData:
timeInterval: 15s # 对齐 scrape_interval
httpMethod: GET
queryTimeout: 60s
secureJsonData: {}
应用配置并重载:
sudo systemctl restart grafana-server
验证数据源是否可用(命令与预期)
# Grafana API 查询数据源(默认管理员账号 admin/admin)
curl -s -u admin:admin http://localhost:3000/api/datasources | jq '.[].name'
# 预期输出包含:
# "prom-prod"
命令解释
- curl -u:Basic Auth 访问 Grafana API
- jq '.[].name':只输出数据源名称,便于确认
安全与访问控制示例(Nginx 反向代理 + 基础认证)
# /etc/nginx/conf.d/prometheus.conf
server {
listen 8080;
server_name prom.example.com;
location / {
auth_basic "Prometheus";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://prometheus:9090;
proxy_set_header Host $host;
}
}
# 创建基础认证用户
sudo yum install -y httpd-tools
htpasswd -c /etc/nginx/.htpasswd promuser
sudo systemctl restart nginx
命令解释
- htpasswd -c:生成认证文件并写入用户
- proxy_pass:将 Grafana 的访问统一走代理入口
性能最佳实践示例(Min step 与录制规则)
- Min step 与抓取间隔对齐:15s 或 30s
- 热点指标使用 Recording Rules:
# /etc/prometheus/rules/recording.yml
groups:
- name: node_cpu
interval: 30s
rules:
- record: job:node_cpu:avg
expr: avg(rate(node_cpu_seconds_total[5m])) by (job)
常见问题排查(命令可直接执行)
1)数据源连接失败
# Grafana 到 Prometheus 的网络连通性
curl -s http://prometheus:9090/-/healthy
# 预期:Prometheus is Healthy.
说明:如果失败,检查 DNS、路由或防火墙。
2)查询无数据
# 检查 Prometheus 是否有目标
curl -s http://prometheus:9090/api/v1/targets | jq '.data.activeTargets[].labels.job'
说明:确认 job 标签与面板 PromQL 一致。
3)查询慢或超时
# 查看 Prometheus 查询日志/慢查询
grep "query" /var/log/prometheus/prometheus.log | tail -n 20
说明:缩小时间范围,设置合理 Min step,使用录制规则。
练习题(可操作)
1. 使用 Provisioning 创建 prom-staging 数据源并设为非默认。
2. 将 timeInterval 调整为 30s,观察 Dashboard 查询速度变化。
3. 使用 curl 调用 /api/v1/query 查询 up 指标,验证数据源正确性:
curl -s "http://prometheus:9090/api/v1/query?query=up" | jq '.data.result[0].value'
配置要点速记
- URL 使用内部访问地址,命名统一如 prom-prod
- Access 选 Server/Proxy,避免跨域
- Min step 与 scrape_interval 对齐
- Query Timeout 建议 30s~60s
- 多集群接入使用统一标签 cluster/env/job