Skip to content

InfluxDB 系统指标参考

InfluxDB 系统指标是监控和优化数据库性能的关键依据,可用于及时发现性能瓶颈、预测资源需求、排查故障原因和确保系统稳定运行。系统指标可以通过 InfluxDB 内置的 _internal 数据库、HTTP API 端点 /metrics 或第三方监控系统获取。

写入相关指标

write_points_ok

指标类型:计数器 单位:点/秒 描述:成功写入的数据点数 使用场景:监控写入吞吐量

write_points_err

指标类型:计数器 单位:点/秒 描述:写入失败的数据点数 使用场景:监控写入错误率

write_requests_total

指标类型:计数器 单位:请求/秒 描述:写入请求总数 使用场景:监控写入请求频率

write_requests_error

指标类型:计数器 单位:请求/秒 描述:写入请求错误数 使用场景:监控写入请求错误率

write_req_bytes

指标类型:计数器 单位:字节/秒 描述:写入请求的字节数 使用场景:监控写入数据量

cache_size

指标类型: gauge 单位:字节 描述:写入缓存的当前大小 使用场景:监控写入缓存使用情况

cache_written_bytes

指标类型:计数器 单位:字节/秒 描述:从缓存写入到磁盘的字节数 使用场景:监控缓存写入磁盘的速率

wal_memory_size

指标类型: gauge 单位:字节 描述:预写日志(WAL)的内存使用量 使用场景:监控 WAL 内存占用

查询相关指标

query_requests_total

指标类型:计数器 单位:请求/秒 描述:查询请求总数 使用场景:监控查询请求频率

query_requests_error

指标类型:计数器 单位:请求/秒 描述:查询请求错误数 使用场景:监控查询请求错误率

query_req_bytes

指标类型:计数器 单位:字节/秒 描述:查询请求的字节数 使用场景:监控查询数据量

query_duration

指标类型:直方图 单位:秒 描述:查询执行时间 使用场景:监控查询性能

query_memory_bytes

指标类型: gauge 单位:字节 描述:查询执行过程中使用的内存量 使用场景:监控查询内存占用

http_requests_total

指标类型:计数器 单位:请求/秒 描述:HTTP 请求总数,按端点分类 使用场景:监控 HTTP API 访问情况

http_request_duration

指标类型:直方图 单位:秒 描述:HTTP 请求处理时间,按端点分类 使用场景:监控 HTTP API 性能

存储相关指标

tsm1_read_bytes

指标类型:计数器 单位:字节/秒 描述:从 TSM 文件读取的字节数 使用场景:监控 TSM 文件读取速率

tsm1_write_bytes

指标类型:计数器 单位:字节/秒 描述:写入 TSM 文件的字节数 使用场景:监控 TSM 文件写入速率

tsm1_cache_hit

指标类型:计数器 单位:命中/秒 描述:TSM 缓存命中次数 使用场景:监控 TSM 缓存效率

tsm1_cache_miss

指标类型:计数器 单位:未命中/秒 描述:TSM 缓存未命中次数 使用场景:监控 TSM 缓存效率

shard_count

指标类型: gauge 单位:个 描述:当前活跃的分片数量 使用场景:监控分片管理情况

series_cardinality

指标类型: gauge 单位:个 描述:当前的序列基数 使用场景:监控序列数量增长

系统资源指标

memstats_alloc_bytes

指标类型: gauge 单位:字节 描述:当前分配的内存量 使用场景:监控内存使用情况

memstats_sys_bytes

指标类型: gauge 单位:字节 描述:从系统获取的总内存量 使用场景:监控系统内存占用

memstats_heap_alloc_bytes

指标类型: gauge 单位:字节 描述:堆内存分配量 使用场景:监控堆内存使用情况

memstats_heap_inuse_bytes

指标类型: gauge 单位:字节 描述:当前使用的堆内存量 使用场景:监控堆内存使用情况

cpu_usage

指标类型: gauge 单位:百分比 描述:CPU 使用率 使用场景:监控 CPU 负载

disk_usage

指标类型: gauge 单位:字节 描述:磁盘使用量 使用场景:监控磁盘空间

集群相关指标

cluster_write_points_ok

指标类型:计数器 单位:点/秒 描述:集群成功写入的数据点数 使用场景:监控集群写入吞吐量

cluster_write_points_err

指标类型:计数器 单位:点/秒 描述:集群写入失败的数据点数 使用场景:监控集群写入错误率

cluster_query_duration

指标类型:直方图 单位:秒 描述:集群查询执行时间 使用场景:监控集群查询性能

cluster_leader_duration

指标类型: gauge 单位:秒 描述:节点作为领导者的持续时间 使用场景:监控集群领导者状态

cluster_heartbeat_failures_total

指标类型:计数器 单位:次/秒 描述:集群心跳失败次数 使用场景:监控集群健康状态

cluster_replication_lag

指标类型: gauge 单位:秒 描述:集群复制延迟 使用场景:监控集群复制状态

指标查询示例

查询写入吞吐量

sql
SELECT mean("write_points_ok") AS "write_throughput" 
FROM "_internal"."monitor"."write" 
WHERE time > now() - 1h 
GROUP BY time(1m);

查询查询延迟

sql
SELECT percentile("query_duration", 95) AS "query_latency_p95" 
FROM "_internal"."monitor"."query" 
WHERE time > now() - 1h 
GROUP BY time(1m);

查询内存使用情况

sql
SELECT mean("memstats_alloc_bytes")/1024/1024 AS "memory_mb" 
FROM "_internal"."monitor"."runtime" 
WHERE time > now() - 1h 
GROUP BY time(1m);

查询序列基数

sql
SELECT mean("series_cardinality") AS "series_count" 
FROM "_internal"."monitor"."database" 
WHERE time > now() - 1h 
GROUP BY time(1m), "database";

指标使用最佳实践

指标收集频率

  • 对于生产环境,建议收集频率为 10-30 秒
  • 对于测试环境,可以降低收集频率以减少资源消耗

指标存储策略

  • 短期指标(最近 7 天):使用较高的精度(秒级)
  • 长期指标(7 天以上):使用较低的精度(分钟级或小时级)
  • 建议设置合理的保留策略,避免指标数据占用过多存储空间

指标监控告警

  • 为关键指标设置告警阈值,如:
    • 写入错误率 > 1%
    • 查询延迟 P95 > 5 秒
    • 内存使用率 > 80%
    • 磁盘使用率 > 90%

指标可视化

  • 使用 Grafana 等工具创建可视化仪表盘
  • 重点关注趋势变化,而不仅仅是绝对值
  • 结合多个指标进行关联分析

不同版本的指标差异

InfluxDB 1.x 与 2.x 指标差异

指标命名差异

1.x 指标名称2.x 指标名称说明
influxdb_write_points_okwrite_points_ok简化了前缀
influxdb_query_durationquery_duration简化了前缀
influxdb_http_requests_totalhttp_requests_total简化了前缀

指标结构差异

  • 1.x:指标存储在 _internal 数据库的 monitor 测量值中
  • 2.x:指标仍然存储在 _internal 数据库中,但组织和桶的概念被引入

新增指标

2.x 版本新增了一些指标,如:

  • task_runs_total:任务运行总数
  • task_runs_error:任务运行错误数
  • bucket_series_cardinality:按桶统计的序列基数

从 1.x 迁移到 2.x 的指标注意事项

指标查询迁移

将 1.x 指标查询迁移到 2.x 时,需要注意:

  • 简化指标名称前缀
  • 适应新的组织和桶结构
  • 调整 Flux 查询语法

示例迁移

1.x 查询:

sql
SELECT mean("influxdb_write_points_ok") FROM "_internal"."monitor"."write" WHERE time > now() - 1h;

2.x 查询(Flux):

txt
from(bucket: "_internal")
  |> range(start: -1h)
  |> filter(fn: (r) => r._measurement == "write" and r._field == "write_points_ok")
  |> mean()
  |> yield(name: "mean")

常见问题(FAQ)

Q1: 如何访问 InfluxDB 系统指标?

A1: 可以通过以下方式访问 InfluxDB 系统指标:

  1. 查询 _internal 数据库:SELECT * FROM "_internal"."monitor"."write" WHERE time > now() - 1h
  2. HTTP API:访问 http://localhost:8086/metrics 获取 Prometheus 格式的指标
  3. 使用 influx CLI:influx -database _internal -execute "SELECT * FROM monitor.write LIMIT 10"

Q2: 系统指标占用多少存储空间?

A2: 系统指标的存储空间取决于:

  • 指标收集频率
  • 保留策略设置
  • 集群规模

一般建议:

  • 对于单节点部署,每天产生约 100MB-500MB 的指标数据
  • 对于集群部署,根据节点数量线性增加

Q3: 如何减少系统指标的存储空间?

A3: 可以通过以下方式减少系统指标的存储空间:

  • 降低指标收集频率
  • 缩短保留策略时长
  • 使用降采样将长期指标聚合到较低精度
  • 只保留关键指标,过滤掉不必要的指标

Q4: 如何监控序列基数?

A4: 可以通过以下指标监控序列基数:

  • series_cardinality:全局序列基数
  • bucket_series_cardinality:按桶统计的序列基数(2.x)
  • database_series:按数据库统计的序列基数(1.x)

Q5: 如何设置指标告警?

A5: 设置指标告警的方法:

  1. 使用 InfluxDB 2.x 内置的告警功能
  2. 集成 Prometheus + Alertmanager
  3. 使用 Grafana Alerting
  4. 自定义脚本监控关键指标

Q6: 系统指标中的百分位指标如何解读?

A6: 百分位指标(如 P50、P95、P99)表示:

  • P50:50% 的请求在该时间内完成
  • P95:95% 的请求在该时间内完成
  • P99:99% 的请求在该时间内完成

百分位指标比平均值更能反映系统的真实性能,特别是对于长尾延迟。

Q7: 如何监控 InfluxDB 集群状态?

A7: 监控 InfluxDB 集群状态的关键指标:

  • cluster_write_points_okcluster_write_points_err:集群写入状态
  • cluster_query_duration:集群查询性能
  • cluster_heartbeat_failures_total:集群健康状态
  • cluster_replication_lag:集群复制状态
  • cluster_leader_duration:领导者状态

Q8: 如何区分正常和异常的指标值?

A8: 区分正常和异常指标值的方法:

  • 建立基线:了解系统在正常负载下的指标值范围
  • 设置合理的告警阈值
  • 关注趋势变化,而不仅仅是绝对值
  • 结合多个指标进行关联分析

Q9: 如何优化指标查询性能?

A9: 优化指标查询性能的方法:

  • 使用合适的时间范围,避免查询过多历史数据
  • 使用 WHERE 子句过滤不必要的数据
  • 使用聚合函数减少返回结果
  • 合理设置 GROUP BY time() 间隔
  • 为频繁查询的字段创建索引

Q10: 如何备份系统指标数据?

A10: 备份系统指标数据的方法:

  • 使用 influx backup 命令备份 _internal 数据库
  • 设置定期备份任务
  • 对于关键指标,可以考虑复制到其他存储系统

指标故障排除

指标收集失败

症状

  • 无法查询到系统指标
  • 监控仪表盘显示无数据
  • 日志中出现指标相关错误

解决方法

  1. 检查 _internal 数据库是否存在
  2. 检查 InfluxDB 配置中的监控设置
  3. 验证访问权限是否正确
  4. 检查网络连接是否正常

指标数据不准确

症状

  • 指标值与实际情况不符
  • 指标值波动异常
  • 不同来源的指标数据不一致

解决方法

  1. 检查指标收集频率是否合理
  2. 验证指标计算方法是否正确
  3. 检查是否存在指标重复收集
  4. 验证时间同步是否正常

指标查询性能差

症状

  • 指标查询响应慢
  • 占用大量系统资源
  • 影响正常业务查询

解决方法

  1. 优化查询语句
  2. 增加查询超时时间
  3. 考虑使用降采样数据
  4. 调整指标存储策略

生产环境指标监控案例

案例一:写入性能监控

监控指标

  • write_points_ok:写入吞吐量
  • write_points_err:写入错误率
  • write_requests_total:写入请求频率
  • cache_size:写入缓存使用情况
  • wal_memory_size:WAL 内存占用

告警设置

  • 写入错误率 > 1% 持续 5 分钟:警告
  • 写入错误率 > 5% 持续 1 分钟:严重
  • 写入缓存大小 > 90% 持续 10 分钟:警告

案例二:查询性能监控

监控指标

  • query_duration:查询延迟
  • query_requests_total:查询请求频率
  • query_memory_bytes:查询内存占用
  • http_requests_total:HTTP 请求情况

告警设置

  • 查询延迟 P95 > 5 秒 持续 5 分钟:警告
  • 查询延迟 P99 > 10 秒 持续 1 分钟:严重
  • 查询内存占用 > 80% 持续 10 分钟:警告

案例三:资源使用监控

监控指标

  • memstats_alloc_bytes:内存使用情况
  • cpu_usage:CPU 使用率
  • disk_usage:磁盘空间
  • series_cardinality:序列基数

告警设置

  • 内存使用率 > 80% 持续 10 分钟:警告
  • CPU 使用率 > 90% 持续 5 分钟:警告
  • 磁盘使用率 > 90% 持续 1 小时:警告
  • 序列基数日增长率 > 20% 持续 1 天:警告