外观
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_ok | write_points_ok | 简化了前缀 |
| influxdb_query_duration | query_duration | 简化了前缀 |
| influxdb_http_requests_total | http_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 系统指标:
- 查询
_internal数据库:SELECT * FROM "_internal"."monitor"."write" WHERE time > now() - 1h - HTTP API:访问
http://localhost:8086/metrics获取 Prometheus 格式的指标 - 使用
influxCLI: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: 设置指标告警的方法:
- 使用 InfluxDB 2.x 内置的告警功能
- 集成 Prometheus + Alertmanager
- 使用 Grafana Alerting
- 自定义脚本监控关键指标
Q6: 系统指标中的百分位指标如何解读?
A6: 百分位指标(如 P50、P95、P99)表示:
- P50:50% 的请求在该时间内完成
- P95:95% 的请求在该时间内完成
- P99:99% 的请求在该时间内完成
百分位指标比平均值更能反映系统的真实性能,特别是对于长尾延迟。
Q7: 如何监控 InfluxDB 集群状态?
A7: 监控 InfluxDB 集群状态的关键指标:
cluster_write_points_ok和cluster_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数据库 - 设置定期备份任务
- 对于关键指标,可以考虑复制到其他存储系统
指标故障排除
指标收集失败
症状
- 无法查询到系统指标
- 监控仪表盘显示无数据
- 日志中出现指标相关错误
解决方法
- 检查
_internal数据库是否存在 - 检查 InfluxDB 配置中的监控设置
- 验证访问权限是否正确
- 检查网络连接是否正常
指标数据不准确
症状
- 指标值与实际情况不符
- 指标值波动异常
- 不同来源的指标数据不一致
解决方法
- 检查指标收集频率是否合理
- 验证指标计算方法是否正确
- 检查是否存在指标重复收集
- 验证时间同步是否正常
指标查询性能差
症状
- 指标查询响应慢
- 占用大量系统资源
- 影响正常业务查询
解决方法
- 优化查询语句
- 增加查询超时时间
- 考虑使用降采样数据
- 调整指标存储策略
生产环境指标监控案例
案例一:写入性能监控
监控指标
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 天:警告
