如果 Grafana 大盘加载超过 10 秒,单纯调整 Grafana 服务端并发配置往往无效,瓶颈通常位于数据源(如 Prometheus)的并发限制或查询语句本身。优化前务必先通过 Query Inspector 定位慢查询,再针对性调整数据源并发或优化 PromQL。
先说结论:Grafana 服务端默认无全局查询并发硬限制,瓶颈多在数据源侧。盲目调大并发可能导致数据库宕机。
- 先定位:使用 Grafana 内置 Query Inspector 确认是单个查询慢还是整体排队
- 先做:优化 PromQL 语句(如增加区间向量、避免全量扫描)
- 再调整:若确认为并发瓶颈,调整 Prometheus 的
`--web`.max-concurrency参数 - 最后验证:观察大盘加载时间及数据源负载
核心原因分析
大盘加载缓慢通常由以下三个原因导致,排查顺序应由易到难:
- 查询语句效率低:PromQL 语句未使用降采样函数(如
rate配合合适区间),导致扫描数据量过大。 - 数据源并发限制:Prometheus 默认并发数有限(通常等于 CPU 核心数),高并发请求会进入队列等待。
- 网络或代理超时:Grafana 与数据源之间的网络延迟,或
dataproxy超时设置过短。
注意:Grafana 主流版本配置文件 grafana.ini 中不存在 [server] 段下的 concurrent_query_limit 参数,修改该无效配置会浪费排查时间。
排查与优化步骤
1. 使用 Query Inspector 定位慢查询
这是最直接的排查手段,无需修改配置即可看到每个面板的查询耗时。
- 打开加载缓慢的大盘页面。
- 点击面板标题,选择 Inspect -> Query。
- 刷新页面,观察 Request 标签页中的
Duration。 - 如果某个查询耗时超过 5 秒,重点优化该面板的 PromQL 语句。
2. 检查 Grafana 服务端日志
确认是否有超时或代理错误,排除网络或配置问题。
grep -E "timeout|error|proxy" /var/log/grafana/grafana.log | tail -n 50
若日志中出现 context deadline exceeded,可能是数据源响应太慢,而非 Grafana 并发限制。
3. 调整 Grafana 数据源超时设置(可选)
如果查询本身需要较长时间(如大范围聚合),可适当增加数据源配置中的 Timeout 值,而非并发数。
- 进入 Grafana 页面:Configuration -> Data Sources。
- 选择对应的 Prometheus 数据源。
- 找到 Timeout 设置,默认通常为 30s,可根据实际情况调整为 60s 或更高。
- 点击 Save & Test。
4. 调整 Prometheus 并发限制(关键步骤)
如果确认是大量请求排队导致慢,需调整 Prometheus 服务端的并发处理能力。这通常在启动参数中配置。
查看当前 Prometheus 启动参数:
ps -ef | grep prometheus
修改启动脚本或 systemd 配置文件(如 /etc/systemd/system/prometheus.service),添加或修改 `--web`.max-concurrency 参数:
`--web`.max-concurrency=20
注意:该值不宜过大,建议设置为 CPU 核心数的 2-4 倍。修改后需重启 Prometheus 服务:
systemctl daemon-reload
systemctl restart prometheus
验证方法
1. 对比加载耗时
使用浏览器开发者工具(F12 -> Network),刷新大盘页面,记录 document 请求的完成时间。优化后应明显低于 10 秒。
2. 监控数据源负载
在 Prometheus 中查询自身负载,确保调大并发后没有导致 CPU 满载:
rate(process_cpu_seconds_total{job="prometheus"}[5m])
如果 CPU 使用率长期超过 80%,说明并发设置过大,需回调。
3. 观察查询排队情况
通过 Prometheus 监控指标观察查询队列长度:
prometheus_engine_queries_concurrent_max
如果该值频繁达到上限,说明并发仍需调整或需优化查询。
常见风险与坑
1. 盲目调大并发导致宕机
Prometheus 是内存敏感型应用。增加并发会线性增加内存消耗。如果服务器内存不足,直接会导致 OOM Kill,使监控服务完全不可用。
2. 忽视查询语句优化
这是最常见的误区。一个未加区间选择的 rate(metric[1h]) 在大时间范围下极其消耗资源。优化语句比调整配置更有效且安全。
3. 配置文件版本差异
Grafana 和 Prometheus 的配置方式随版本变化较大。修改前请查阅对应版本的官方文档,避免修改无效参数。
参考来源
- Grafana Official Documentation - Data Sources, https://grafana.com/docs/grafana/latest/datasources/
- Prometheus Official Documentation - Configuration, https://prometheus.io/docs/prometheus/latest/configuration/configuration/