时序数据库InfluxDB

InfluxDB是一个用于存储和分析时间序列数据的开源数据库。也是使用最多的一个时序数据库。


常见选项的默认配置 (influxdb.conf)

# 禁止报告开关,默认  24 小时往 usage.influxdata.com 发送报告
reporting-disabled = false
# 用于备份和恢复的 RPC 服务的绑定地址
bind-address = "127.0.0.1:8088"

[meta]
# 元数据存储目录
dir = "/var/lib/influxdb/meta"
# retention policy 自动创建开关
retention-autocreate = true
# 元数据服务日志开关
logging-enabled = true

[data]
# 数据目录
dir = "/var/lib/influxdb/data"
# 预写日志目录(write ahead log)
wal-dir = "/var/lib/influxdb/wal"
# fsync 调用之前的写等待时间,默认为 0s,SSD 设置为 0s,非 SSD 推荐设置为 0ms-100ms
wal-fsync-delay = "0s"
# inmem 内存索引(需要大量内存),tsi1 基于磁盘的时序索引
index-version = "inmem"
# 查询日志开关
query-log-enabled = true
# 分片缓存在拒绝 /write 请求前能写入的最大内存大小,默认为 1g
cache-max-memory-size = "1g"
# tsm 引擎将快照缓存并将其写入 tsm 文件的缓存大小,完成后释放内存
cache-snapshot-memory-size = "25m"
# 持续一段时间后,如果分片没有收到写入或删除,tsm 引擎将对缓存进行快照并将其写入新的 TSM 文件
cache-snapshot-write-cold-duration = "10m"
# 持续一段时间后,如果 tsm 引擎未收到写入或删除,tsm 引擎将压缩分片中的所有 TSM 文件
compact-full-write-cold-duration = "4h"
# tsm 压缩每秒写入磁盘的最大数据量,短暂突发期间可以被设置为 compact-throughput-burst
compact-throughput = "48m"
# tsm 压缩在短暂突发期间每秒写入磁盘的最大数据量
compact-throughput-burst = "48m"
# 最大并发压缩数,默认值 0 会将 50% CPU 核心数用于压缩
max-concurrent-compactions = 0
# inmem 设置项:在删除写入之前每个数据库允许的 series 的最大数量,设置 0 则不限制
max-series-per-database = 1000000
# inmem 设置项:每个 tag 键允许的 tag 值的最大数量,设置 0 则不限制
max-values-per-tag = 100000
# tsi1 设置项:预写日志 wal 文件将压缩为索引文件时的阈值大小
# 较小的阈值将导致日志文件更快地压缩,并导致较低的堆内存使用量,但会以写入吞吐量为代价
# 更大的阈值将不会频繁地压缩,在内存中存储更多的 series,并提供更高的写入吞吐量
max-index-log-file-size = "1m"
# tsi1 设置项:tsi 索引中用于存储先前计算的 series 结果的内部缓存大小
# 缓存结果将从缓存中快速返回,而不需要对匹配 tag 键值的后续查询进行重新计算
# 将此值设置为 0 将禁用缓存,这可能会导致查询性能问题
series-id-set-cache-size = 100

[coordinator]
# 写入请求超时时间
write-timeout = "10s"
# 最大并发查询数,默认值 0 表示不限制
max-concurrent-queries = 0
# 在终止查询之前允许执行查询的最长持续时间,默认值 0 表示不限制
query-timeout = "0s"
# 慢查询的最大持续时间,一个查询超出该时间将打印 Detected slow query 日志
# 默认值 0s 表示不记录慢查询
log-queries-after = "0s"

[retention]
# 执行保留策略并淘汰旧数据开关
enabled = true
# 执行保留策略的检查时间间隔
check-interval = "30m0s"

[monitor]
# 内部记录统计信息开关,生产环境中若数据量较大,建议关闭
store-enabled = true
# 记录统计信息的数据库
store-database = "_internal"
# 记录统计信息的时间间隔
store-interval = "10s"

[http]
# http 开关
enabled = true
# http 绑定地址
bind-address = ":8086"
# 认证开关
auth-enabled = false
# http 请求日志
log-enabled = true
# 详细写入日志开关
write-tracing = false
# flux 查询开关
flux-enabled = false
# flux 查询日志开关
flux-log-enabled = false
# pprof http 开关,用于故障排除和监控
pprof-enabled = true
# 启用 /pprof 端点并绑定到 localhost:6060,用于调试启动性能问题
debug-pprof-enabled = false
# https 开关
https-enabled = false
# https 证书
https-certificate = "/etc/ssl/influxdb.pem"
# https 私钥
https-private-key = ""
# 查询返回的最大行数,默认值 0 允许无限制
max-row-limit = 0
# 最大连接数,超过限制的新连接将被丢弃,默认值 0 禁用限制
max-connection-limit = 0
# 客户端请求 body 的最大大小(以字节为单位),设置为 0 则禁用限制
max-body-size = 25000000
# 访问日志路径,若设置并当 log-enabled 启用时,请求日志将写入到该文件
# 默认则写入 stderr,与 influxdb 日志混合在一起
access-log-path = ""
# 请求记录状态过滤,例如 ["4xx", "5xx"],默认 [] 表示无过滤,所有请求被记录打印
access-log-status-filters = []
# 最大并发处理的写入数,设置为 0 则禁用限制
max-concurrent-write-limit = 0
# 最大排队等待处理的写入数,设置为 0 则禁用限制
max-enqueued-write-limit = 0
# 写入在待处理队列中等待的最大持续时间
# 设置为 0 或将 max-concurrent-write-limit 设置为 0 则禁用限制
enqueued-write-timeout = "30s"

[logging]
# 日志等级,error、warn、info(默认)、debug
level = "info"


重点配置 (cpu/内存/磁盘io/超时/日志)

# 禁用报告,默认为 false
reporting-disabled = true

[meta]
# 元数据存储目录
dir = "/var/lib/influxdb/meta"

[data]
# 数据目录
dir = "/var/lib/influxdb/data"
# 预写日志目录(write ahead log)
wal-dir = "/var/lib/influxdb/wal"
# fsync 调用之前的写等待时间,默认为 0s,SSD 设置为 0s,非 SSD 推荐设置为 0ms-100ms
# 若要降低磁盘 io,则适当调大
wal-fsync-delay = "20ms"
# inmem 内存索引(需要大量内存),tsi1 基于磁盘的时序索引,默认为 inmem
index-version = "tsi1"
# 查询日志开关,可视情况关闭
query-log-enabled = true
# 分片缓存在拒绝 /write 请求前能写入的最大内存大小,默认为 1g
# 若服务器内存较小,则适当调小;若要降低磁盘 io,则适当调大
cache-max-memory-size = "1g"
# tsm 引擎将快照缓存并将其写入 tsm 文件的缓存大小,完成后释放内存,默认为 25m
# 若服务器内存较小,则适当调小;若要降低磁盘 io,则适当调大
cache-snapshot-memory-size = "25m"
# 持续一段时间后,如果分片没有收到写入或删除,tsm 引擎将对缓存进行快照并将其写入新的 TSM 文件,默认为 10m
# 若要降低 cpu 压缩计算和磁盘 io,则适当调大,但避免时间过长一直占用内存
cache-snapshot-write-cold-duration = "10m"
# 持续一段时间后,如果 tsm 引擎未收到写入或删除,tsm 引擎将压缩分片中的所有 TSM 文件,默认为 4h
# 若要降低 cpu 压缩计算和磁盘 io,则适当调大,例如 24h
compact-full-write-cold-duration = "24h"
# tsm 压缩每秒写入磁盘的最大数据量,默认为 48m
# 若要降低磁盘 io,则适当调大
compact-throughput = "48m"
# tsm 压缩在短暂突发期间每秒写入磁盘的最大数据量,默认为 48m
# 若要降低磁盘 io,则适当调大
compact-throughput-burst = "48m"
# 最大并发压缩数,默认值 0 会将 50% CPU 核心数用于压缩
# 若要降低 cpu 压缩计算和磁盘 io,则适当调小,但避免过小导致压缩周期变长
max-concurrent-compactions = 0
# tsi1 设置项:预写日志 wal 文件将压缩为索引文件时的阈值大小
# 较小的阈值将导致日志文件更快地压缩,并导致较低的堆内存使用量,但会以写入吞吐量为代价
# 更大的阈值将不会频繁地压缩,在内存中存储更多的 series,并提供更高的写入吞吐量
# 若要降低 cpu 压缩计算和磁盘 io,则适当调大,但避免过大导致一直占用内存
# 若服务器内存较小,则适当调小或保持不变
max-index-log-file-size = "1m"
# tsi1 设置项:tsi 索引中用于存储先前计算的 series 结果的内部缓存大小
# 缓存结果将从缓存中快速返回,而不需要对匹配 tag 键值的后续查询进行重新计算
# 将此值设置为 0 将禁用缓存,这可能会导致查询性能问题
# 若服务器内存较小,则适当调小
series-id-set-cache-size = 100

[coordinator]
# 写入请求超时时间,默认为 10s
write-timeout = "20s"

[monitor]
# 内部记录统计信息开关,生产环境中若数据量较大,会影响内存及cpu,建议关闭
store-enabled = true
# 记录统计信息的时间间隔,生产环境中若数据量较大,但需要开启监控,则调大间隔
store-interval = "10s"

[http]
# http 请求日志,可视情况关闭
log-enabled = true

[logging]
# 日志等级,error、warn、info(默认)、debug,可视情况调整等级
level = "info"