Grafana偶现‘无数据点’但InfluxDB存在数据的问题排查求助
排查Grafana图表"No data points"且InfluxDB并行查询慢的问题
针对你遇到的长时间范围查询时Grafana频繁显示"No data points"、但直接查询InfluxDB速度快、并行查询卡顿的问题,我整理了以下针对性的排查步骤:
1. 检查Grafana数据源的查询超时设置
虽然你提到日志没显示超时,但Grafana对InfluxDB的默认查询超时(通常30秒)可能在长范围+并行查询场景下被触发,且未必会留下明确日志:
- 进入Grafana的Configuration > Data Sources,找到你的InfluxDB数据源
- 查看
Query timeout参数,尝试调大(比如改为60秒),再测试30天时间范围的查询是否恢复正常
2. 分析InfluxDB查询的执行效率(重点看索引与扫描范围)
单个查询快但并行慢,大概率是大数据量下的查询执行开销被放大了,用EXPLAIN ANALYZE深挖细节:
- 把Grafana里的查询替换成具体参数,比如:
EXPLAIN ANALYZE SELECT percentile("usage_system", 95) FROM "cpu" WHERE "host" =~ /^your-test-host$/ AND time >= now() - 30d GROUP BY time(1m), "host" - 重点关注这几个指标:
number of shards scanned:如果扫描分片数过多(比如超过5个),说明分片时间设置不合理number of points read:如果远大于最终返回点数,大概率是没用到索引——务必确认host是Tag而非Field!InfluxDB的Tag有索引,Field没有,若host是Field,正则匹配会触发全表扫描,数据量大时直接拖慢查询execution time:对比单个查询和模拟多并行查询时的执行时间差异
3. 排查InfluxDB的并发查询限制
InfluxDB默认有并发查询上限(max-concurrent-queries默认20),当仪表盘多图表同时发起查询时,会触发排队,导致Grafana端等待超时:
- 查看InfluxDB日志,搜索
max concurrent queries reached关键词 - 实时监控活跃查询数:执行
SHOW STATS,查看queries.active的值,在加载仪表盘时观察是否达到配置上限 - 若确实达到上限,可临时调大
max-concurrent-queries参数(建议不超过服务器CPU核心数的2倍),测试是否改善
4. 调整Grafana的查询并行策略
Grafana默认并行发送所有图表的查询,会瞬间压满InfluxDB的查询队列:
- 进入仪表盘的Settings > Performance,开启
Query throttling - 调整
Max concurrent queries为较小值(比如5),让查询低并行或串行执行,看是否能避免"No data"情况 - 也可尝试开启
Query caching,让重复查询直接使用缓存结果,减少对InfluxDB的压力
5. 优化InfluxDB的分片与数据存储
长时间范围查询慢,分片设置不合理是常见诱因:
- 执行
SHOW SHARD GROUPS,查看30天数据对应的分片数量,若超过3个,说明分片时间太短(默认7天),可修改数据保留策略的分片时间为30天:ALTER RETENTION POLICY "autogen" ON "your-db" DURATION 365d SHARD DURATION 30d DEFAULT - 检查TSM文件压缩情况:执行
SHOW DIAGNOSTICS,查看tsm1部分的compression_ratio,若比值低于2,说明数据压缩效果差,会影响读取速度
6. 监控服务器资源瓶颈
并行查询时的资源消耗会被放大,需确认服务器是否存在硬件瓶颈:
- 查询时用
top看CPU使用率,若InfluxDB进程CPU跑满,说明计算资源不足(percentile分位计算属于CPU密集型操作) - 用
iostat -x 1查看磁盘IO的%util,若接近100%,说明磁盘读写是瓶颈(机械硬盘尤其明显,可考虑更换为SSD) - 用
free -m查看内存,InfluxDB的cache-max-memory-size默认是内存的一半,若剩余内存不足,会导致缓存失效,频繁读磁盘
7. 验证Grafana的自动时间间隔参数
你的查询用了$__interval,这个参数会根据时间范围自动调整分组间隔,但长范围下可能导致分组过多:
- 手动替换
$__interval为固定值(比如10m),执行查询看速度是否提升 - 若提升明显,可在Grafana仪表盘设置里调整
Min interval参数,限制最小分组间隔,避免长范围下生成过多分组
内容的提问来源于stack exchange,提问作者jma




