外观
InfluxDB 写入指标参考
InfluxDB提供了丰富的写入指标,用于监控和分析写入性能。本文将详细介绍这些指标的名称、描述、单位、适用版本和示例,帮助用户更好地理解和使用这些指标。
InfluxDB 1.x 写入指标
write 相关指标
write_points_ok
描述:成功写入的数据点数
单位:点数
适用版本:1.x
示例查询:
txt
SELECT mean(write_points_ok) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)write_points_err
描述:写入失败的数据点数
单位:点数
适用版本:1.x
示例查询:
txt
SELECT mean(write_points_err) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)write_req_ok
描述:成功的写入请求数
单位:请求数
适用版本:1.x
示例查询:
txt
SELECT mean(write_req_ok) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)write_req_err
描述:失败的写入请求数
单位:请求数
适用版本:1.x
示例查询:
txt
SELECT mean(write_req_err) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)write_req_bytes
描述:写入请求的字节数
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(write_req_bytes) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)write_points_rate
描述:写入数据点的速率
单位:点数/秒
适用版本:1.x
示例查询:
txt
SELECT mean(write_points_rate) FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)wal 相关指标
wal_write_points_ok
描述:成功写入WAL的数据点数
单位:点数
适用版本:1.x
示例查询:
txt
SELECT mean(wal_write_points_ok) FROM "_internal"."monitor"."wal" WHERE time > now() - 5m GROUP BY time(10s)wal_write_bytes
描述:写入WAL的字节数
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(wal_write_bytes) FROM "_internal"."monitor"."wal" WHERE time > now() - 5m GROUP BY time(10s)wal_fsync_duration
描述:WAL文件同步到磁盘的持续时间
单位:纳秒
适用版本:1.x
示例查询:
txt
SELECT mean(wal_fsync_duration) FROM "_internal"."monitor"."wal" WHERE time > now() - 5m GROUP BY time(10s)wal_buffer_size
描述:WAL缓冲区的大小
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(wal_buffer_size) FROM "_internal"."monitor"."wal" WHERE time > now() - 5m GROUP BY time(10s)wal_sequence
描述:WAL序列号码
单位:整数
适用版本:1.x
示例查询:
txt
SELECT last(wal_sequence) FROM "_internal"."monitor"."wal" WHERE time > now() - 5mcache 相关指标
cache_size
描述:缓存大小
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(cache_size) FROM "_internal"."monitor"."cache" WHERE time > now() - 5m GROUP BY time(10s)cache_items
描述:缓存中的项目数
单位:项目数
适用版本:1.x
示例查询:
txt
SELECT mean(cache_items) FROM "_internal"."monitor"."cache" WHERE time > now() - 5m GROUP BY time(10s)cache_bytes
描述:缓存中的字节数
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(cache_bytes) FROM "_internal"."monitor"."cache" WHERE time > now() - 5m GROUP BY time(10s)cache_disk_bytes
描述:缓存写入磁盘的字节数
单位:字节
适用版本:1.x
示例查询:
txt
SELECT mean(cache_disk_bytes) FROM "_internal"."monitor"."cache" WHERE time > now() - 5m GROUP BY time(10s)cache_snapshot_writes
描述:缓存快照写入次数
单位:次数
适用版本:1.x
示例查询:
txt
SELECT mean(cache_snapshot_writes) FROM "_internal"."monitor"."cache" WHERE time > now() - 5m GROUP BY time(10s)InfluxDB 2.x 写入指标
httpd 相关指标
httpd_requests_total
描述:HTTP请求总数,可按方法和路径过滤
单位:请求数
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "httpd" and r["_field"] == "requests_total" and r["method"] == "POST" and r["path"] == "/api/v2/write")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")httpd_request_duration_ms
描述:HTTP请求持续时间,可按方法和路径过滤
单位:毫秒
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "httpd" and r["_field"] == "request_duration_ms" and r["method"] == "POST" and r["path"] == "/api/v2/write")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")write 相关指标
write_points_written
描述:写入的数据点数
单位:点数
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "write" and r["_field"] == "points_written")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")write_bytes_written
描述:写入的字节数
单位:字节
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "write" and r["_field"] == "bytes_written")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")write_errors
描述:写入错误数
单位:错误数
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "write" and r["_field"] == "errors")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")wal 相关指标
wal_write_bytes_total
描述:WAL写入的总字节数
单位:字节
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "wal" and r["_field"] == "write_bytes_total")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")wal_fsync_duration_seconds
描述:WAL文件同步到磁盘的持续时间
单位:秒
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "wal" and r["_field"] == "fsync_duration_seconds")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")wal_segment_count
描述:WAL段文件数量
单位:文件数
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "wal" and r["_field"] == "segment_count")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")storage 相关指标
storage_write_bytes_total
描述:存储写入的总字节数
单位:字节
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "storage" and r["_field"] == "write_bytes_total")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")storage_write_errors_total
描述:存储写入错误总数
单位:错误数
适用版本:2.x
示例查询:
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "storage" and r["_field"] == "write_errors_total")
|> aggregateWindow(every: 10s, fn: mean)
|> yield(name: "mean")通用写入指标
写入成功率
描述:成功写入的数据点占总写入数据点的百分比
单位:百分比
适用版本:1.x, 2.x
计算方法:
- 1.x: (write_points_ok / (write_points_ok + write_points_err)) * 100
- 2.x: (write_points_written / (write_points_written + write_errors)) * 100
示例查询(1.x):
txt
SELECT (mean(write_points_ok) / (mean(write_points_ok) + mean(write_points_err))) * 100 AS write_success_rate FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)示例查询(2.x):
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "write")
|> pivot(rowKey: ["_time"], columnKey: ["_field"], valueColumn: "_value")
|> map(fn: (r) => ({ r with write_success_rate: float(v: r.points_written) / float(v: r.points_written + r.errors) * 100.0 }))
|> aggregateWindow(every: 10s, fn: mean, columns: ["write_success_rate"])
|> yield(name: "mean")写入吞吐量
描述:单位时间内成功写入的数据点数
单位:点数/秒
适用版本:1.x, 2.x
计算方法:
- 1.x: write_points_ok / 时间间隔
- 2.x: write_points_written / 时间间隔
示例查询(1.x):
txt
SELECT derivative(mean(write_points_ok), 10s) AS write_throughput FROM "_internal"."monitor"."write" WHERE time > now() - 5m GROUP BY time(10s)示例查询(2.x):
txt
from(bucket: "_monitoring")
|> range(start: -5m)
|> filter(fn: (r) => r["_measurement"] == "write" and r["_field"] == "points_written")
|> aggregateWindow(every: 10s, fn: sum)
|> derivative(nonNegative: true, unit: 1s)
|> yield(name: "derivative")写入指标监控最佳实践
监控关键指标
以下是监控InfluxDB写入性能时应关注的关键指标:
- 写入成功率:应保持在99.9%以上
- 写入吞吐量:根据业务需求设置合理的阈值
- 写入延迟:应保持在毫秒级别
- WAL写入延迟:应保持在较低水平,避免影响写入性能
- 缓存大小:应在合理范围内,避免过大导致内存不足
- 写入错误数:应尽可能接近0
配置告警规则
根据关键指标设置合理的告警规则,及时发现和处理问题:
- 写入成功率告警:当写入成功率低于99.9%时触发告警
- 写入延迟告警:当写入延迟超过1秒时触发告警
- 写入错误告警:当写入错误数超过阈值时触发告警
- WAL写入延迟告警:当WAL写入延迟超过100毫秒时触发告警
- 缓存大小告警:当缓存大小超过总内存的70%时触发告警
分析写入性能问题
当发现写入性能问题时,可以通过以下步骤进行分析:
- 检查写入成功率和错误数:确定是否存在写入失败
- 分析写入延迟:确定是否存在写入延迟过高
- 检查WAL相关指标:确定是否存在WAL写入问题
- 检查缓存相关指标:确定是否存在缓存压力
- 检查系统资源:确定是否存在CPU、内存或磁盘I/O瓶颈
- 分析写入模式:确定是否存在写入突增或异常写入模式
常见问题(FAQ)
Q1: 如何监控InfluxDB的写入性能?
A1: 监控InfluxDB写入性能的方法:
- 使用内置监控指标,如write_points_ok、write_req_duration等
- 使用Telegraf收集写入相关指标
- 使用Grafana创建写入性能监控仪表盘
- 配置合理的告警规则,及时发现问题
Q2: 写入成功率低的可能原因有哪些?
A2: 写入成功率低的可能原因:
- 网络连接问题
- 磁盘空间不足
- 写入速率超过限制
- 数据格式错误
- 权限问题
- 系统资源不足
Q3: 如何提高InfluxDB的写入性能?
A3: 提高写入性能的方法:
- 优化WAL配置,如调整wal-fsync-delay
- 增加缓存大小,提高缓存使用率
- 使用批处理写入,减少请求次数
- 优化数据模型,减少标签基数
- 使用SSD存储,提高磁盘I/O性能
- 垂直或水平扩展InfluxDB
Q4: WAL写入延迟高的可能原因有哪些?
A4: WAL写入延迟高的可能原因:
- 磁盘I/O性能差
- WAL配置不合理
- 写入速率过高
- 系统资源不足
- 硬件故障
Q5: 如何理解和使用写入指标?
A5: 理解和使用写入指标的方法:
- 熟悉每个指标的含义和单位
- 建立基准值,了解正常运行状态
- 设置合理的告警阈值
- 结合多个指标进行分析,找出问题根源
- 定期审查和优化监控配置
Q6: 1.x和2.x版本的写入指标有什么区别?
A6: 1.x和2.x版本写入指标的主要区别:
- 指标命名不同,2.x版本使用更符合Prometheus规范的指标名
- 指标存储位置不同,2.x版本存储在_monitoring桶中
- 指标结构不同,2.x版本使用标签组织指标
- 查询语言不同,2.x版本使用Flux查询语言
Q7: 如何比较不同时间段的写入性能?
A7: 比较不同时间段写入性能的方法:
- 使用相同的时间范围和聚合间隔
- 计算关键指标的平均值、最大值和最小值
- 使用可视化工具直观比较
- 分析趋势变化,找出性能变化的原因
Q8: 写入指标过多会影响InfluxDB性能吗?
A8: 写入指标对性能的影响:
- 内置监控指标的开销很小,通常不会影响性能
- 过多的自定义指标可能会增加写入和存储开销
- 建议只监控必要的关键指标
- 对监控数据进行降采样,减少存储开销
