Skip to content

InfluxDB 查询指标参考

核心查询指标

1. 查询执行指标

指标名称描述测量值字段标签
query查询执行统计_internalqueriesTotal, queriesActive, queriesExecuted, queriesFaileddatabase, queryType
queryExecutor查询执行器统计_internalqueriesExecuted, queryDurationNsdatabase
queryQueue查询队列统计_internalqueueSize, queueLengthdatabase

2. 查询性能指标

指标名称描述测量值字段标签
queryDuration查询持续时间_internaldurationNsdatabase, queryType, query
queryResult查询结果统计_internalrows, seriesdatabase, queryType
queryMemory查询内存使用_internalallocatedBytes, maxAllocatedBytesdatabase, queryType

3. 查询缓存指标

指标名称描述测量值字段标签
queryCache查询缓存统计_internalhits, misses, sizedatabase
queryCacheMemory查询缓存内存使用_internalallocatedBytesdatabase

4. 查询优化指标

指标名称描述测量值字段标签
queryOptimizer查询优化器统计_internaloptimizations, rulesApplieddatabase, queryType
queryPlan查询计划统计_internalplanDurationNs, seriesScanned, pointsScanneddatabase, queryType

指标获取方法

1. 使用 InfluxDB CLI

bash
# 查询所有查询相关指标
influx -database _internal -execute "SHOW MEASUREMENTS WHERE measurement =~ /^query/"

# 查询特定查询指标
influx -database _internal -execute "SELECT mean(queriesActive) FROM _internal..query WHERE time > now() - 1h GROUP BY time(1m)"

2. 使用 InfluxDB API

bash
# 使用 API 查询查询指标
curl -G 'http://localhost:8086/query' \
  --data-urlencode 'db=_internal' \
  --data-urlencode 'q=SELECT mean(queryDurationNs) FROM _internal..queryExecutor WHERE time > now() - 1h GROUP BY time(1m)'

3. 使用监控工具

Grafana

  1. 添加 InfluxDB 数据源:配置 Grafana 连接到 InfluxDB _internal 数据库
  2. 创建查询指标仪表板:添加面板显示查询执行指标、性能指标和缓存指标
  3. 设置警报:为关键指标设置警报,如查询失败率、查询延迟等

Chronograf

  1. 连接 InfluxDB 数据源:配置 Chronograf 连接到 InfluxDB 实例
  2. 创建查询监控仪表板:使用内置模板或自定义创建查询监控仪表板
  3. 设置通知规则:为关键查询指标设置通知规则

指标详细说明

1. query 测量值

字段说明

  • queriesTotal:总查询数
  • queriesActive:当前活跃查询数
  • queriesExecuted:已执行的查询数
  • queriesFailed:失败的查询数

标签说明

  • database:查询所属的数据库
  • queryType:查询类型(如 read, write

2. queryExecutor 测量值

字段说明

  • queriesExecuted:查询执行器执行的查询数
  • queryDurationNs:查询执行的持续时间(纳秒)

标签说明

  • database:查询所属的数据库

3. queryDuration 测量值

字段说明

  • durationNs:查询持续时间(纳秒)

标签说明

  • database:查询所属的数据库
  • queryType:查询类型
  • query:查询语句(可选)

4. queryCache 测量值

字段说明

  • hits:缓存命中次数
  • misses:缓存未命中次数
  • size:缓存中的查询结果数量

标签说明

  • database:查询所属的数据库

5. queryPlan 测量值

字段说明

  • planDurationNs:查询计划生成的持续时间(纳秒)
  • seriesScanned:查询扫描的系列数量
  • pointsScanned:查询扫描的数据点数

标签说明

  • database:查询所属的数据库
  • queryType:查询类型

指标使用示例

1. 监控查询执行情况

sql
-- 查询最近 1 小时的活跃查询数
SELECT mean(queriesActive) FROM _internal..query WHERE time > now() - 1h GROUP BY time(1m), database

-- 查询最近 24 小时的查询失败率
SELECT sum(queriesFailed) / sum(queriesExecuted) * 100 FROM _internal..query WHERE time > now() - 24h GROUP BY time(1h), database

2. 监控查询性能

sql
-- 查询最近 1 小时的平均查询持续时间
SELECT mean(durationNs) / 1000000000 as avgDurationSeconds FROM _internal..queryDuration WHERE time > now() - 1h GROUP BY time(1m), database

-- 查询最近 1 小时的 95th 百分位查询持续时间
SELECT percentile(durationNs, 95) / 1000000000 as p95DurationSeconds FROM _internal..queryDuration WHERE time > now() - 1h GROUP BY time(1m), database

3. 监控查询缓存

sql
-- 查询最近 1 小时的查询缓存命中率
SELECT sum(hits) / (sum(hits) + sum(misses)) * 100 as cacheHitRate FROM _internal..queryCache WHERE time > now() - 1h GROUP BY time(1m), database

-- 查询最近 1 小时的查询缓存大小
SELECT mean(size) as avgCacheSize FROM _internal..queryCache WHERE time > now() - 1h GROUP BY time(1m), database

4. 监控查询资源使用

sql
-- 查询最近 1 小时的查询内存使用
SELECT mean(allocatedBytes) / 1024 / 1024 as avgMemoryMB FROM _internal..queryMemory WHERE time > now() - 1h GROUP BY time(1m), database

-- 查询最近 1 小时的最大查询内存使用
SELECT max(maxAllocatedBytes) / 1024 / 1024 as maxMemoryMB FROM _internal..queryMemory WHERE time > now() - 1h GROUP BY time(1m), database

指标监控最佳实践

1. 定义关键指标

  • 查询成功率:确保查询成功率高于 99.9%
  • 查询延迟:根据业务需求定义合理的延迟阈值
  • 活跃查询数:监控活跃查询数,避免系统过载
  • 查询缓存命中率:确保缓存命中率高于 50%

2. 设置合理的警报阈值

指标建议警报阈值严重程度
查询失败率> 1%
95th 百分位查询延迟> 5s
活跃查询数> CPU 核心数 * 2
查询缓存命中率< 30%

3. 定期分析指标

  • 每日分析:监控每日查询性能趋势
  • 每周分析:分析查询模式变化
  • 每月分析:评估系统容量和性能

4. 优化查询性能

  • 根据查询指标优化慢查询
  • 调整查询缓存配置
  • 优化查询执行器配置
  • 考虑增加系统资源

常见问题(FAQ)

Q1: 如何获取特定查询的执行指标?

A1: 可以使用 queryDuration 测量值,该测量值包含查询语句标签(如果启用),可以通过查询语句过滤特定查询的执行指标。

Q2: 如何监控慢查询?

A2: 可以使用 queryDuration 测量值,查询持续时间超过阈值的查询,并设置警报。例如:

sql
SELECT query, durationNs / 1000000000 as durationSeconds FROM _internal..queryDuration WHERE durationNs > 5000000000 AND time > now() - 1h

Q3: 如何提高查询缓存命中率?

A3: 可以通过以下方法提高查询缓存命中率:

  • 增加查询缓存大小
  • 优化查询模式,减少唯一查询的数量
  • 调整查询缓存的过期时间
  • 使用更通用的查询语句

Q4: 如何监控查询资源使用?

A4: 可以使用 queryMemory 测量值监控查询的内存使用情况,使用 queryPlan 测量值监控查询扫描的数据点数和系列数。

Q5: 如何区分不同类型的查询?

A5: 可以使用 queryType 标签区分不同类型的查询,如 read, write, delete 等。