外观
InfluxDB 查询指标参考
核心查询指标
1. 查询执行指标
| 指标名称 | 描述 | 测量值 | 字段 | 标签 |
|---|---|---|---|---|
query | 查询执行统计 | _internal | queriesTotal, queriesActive, queriesExecuted, queriesFailed | database, queryType |
queryExecutor | 查询执行器统计 | _internal | queriesExecuted, queryDurationNs | database |
queryQueue | 查询队列统计 | _internal | queueSize, queueLength | database |
2. 查询性能指标
| 指标名称 | 描述 | 测量值 | 字段 | 标签 |
|---|---|---|---|---|
queryDuration | 查询持续时间 | _internal | durationNs | database, queryType, query |
queryResult | 查询结果统计 | _internal | rows, series | database, queryType |
queryMemory | 查询内存使用 | _internal | allocatedBytes, maxAllocatedBytes | database, queryType |
3. 查询缓存指标
| 指标名称 | 描述 | 测量值 | 字段 | 标签 |
|---|---|---|---|---|
queryCache | 查询缓存统计 | _internal | hits, misses, size | database |
queryCacheMemory | 查询缓存内存使用 | _internal | allocatedBytes | database |
4. 查询优化指标
| 指标名称 | 描述 | 测量值 | 字段 | 标签 |
|---|---|---|---|---|
queryOptimizer | 查询优化器统计 | _internal | optimizations, rulesApplied | database, queryType |
queryPlan | 查询计划统计 | _internal | planDurationNs, seriesScanned, pointsScanned | database, 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
- 添加 InfluxDB 数据源:配置 Grafana 连接到 InfluxDB
_internal数据库 - 创建查询指标仪表板:添加面板显示查询执行指标、性能指标和缓存指标
- 设置警报:为关键指标设置警报,如查询失败率、查询延迟等
Chronograf
- 连接 InfluxDB 数据源:配置 Chronograf 连接到 InfluxDB 实例
- 创建查询监控仪表板:使用内置模板或自定义创建查询监控仪表板
- 设置通知规则:为关键查询指标设置通知规则
指标详细说明
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), database2. 监控查询性能
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), database3. 监控查询缓存
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), database4. 监控查询资源使用
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() - 1hQ3: 如何提高查询缓存命中率?
A3: 可以通过以下方法提高查询缓存命中率:
- 增加查询缓存大小
- 优化查询模式,减少唯一查询的数量
- 调整查询缓存的过期时间
- 使用更通用的查询语句
Q4: 如何监控查询资源使用?
A4: 可以使用 queryMemory 测量值监控查询的内存使用情况,使用 queryPlan 测量值监控查询扫描的数据点数和系列数。
Q5: 如何区分不同类型的查询?
A5: 可以使用 queryType 标签区分不同类型的查询,如 read, write, delete 等。
