influxdb优化建议
#关闭上送开关
reporting-disabled = false
# bind-address = "127.0.0.1:8088"
#控制存储有关InfluxDB群集的元数据的Raft共识组的参数
[meta]
dir = "influxdb/var/lib/influxdb/meta"
#控制InfluxDB的实际分片数据的生存位置以及它从WAL中刷新的方式
[data]
dir = "influxdb/var/lib/influxdb/data"
wal-dir = "influxdb/var/lib/influxdb/wal"
#指定写入 WAL 文件后,在 fsync 到磁盘之前等待的时间。单位是毫秒(ms)
#增加 wal-fsync-delay 的值可以提高写入性能,但也会增加数据丢失的风险。因为当系统发生故障时,
#WAL 文件中未 fsync 到磁盘的数据可能会丢失。因此,在调整 wal-fsync-delay 的值时需要权衡数据的安全性和性能需求。
wal-fsync-delay = "60ms"
#在生产环境中,由于查询量可能非常大,持续记录所有查询可能会导致日志文件迅速增长,占用大量磁盘空间,
#并可能影响性能。因此,建议仅在需要时启用查询日志,例如在进行性能调优或故障排除时。
query-log-enabled = false
#限制每个shard(分片)在内存中缓存的最大数据量。当缓存的数据量超过这个限制时,InfluxDB会开始将数据写入到磁盘上的TSM
#服务器内存充足且查询负载较重,可以适当增加这个值以提高查询性能
cache-max-memory-size = "2g"
#当shard中的缓存数据量达到这个阈值时,InfluxDB会触发一个快照操作,将数据从内存刷新到TSM文件中
#确保在触发快照操作之前,缓存中有足够的数据量以利用内存的优势。
cache-snapshot-memory-size = "1g"
#过于频繁的缓存快照操作可能会导致磁盘I/O成为性能瓶颈
#如果系统内存充足且写入性能是关键,那么减小cache-snapshot-write-cold-duration的值可以确保数据更快地写入磁盘,
cache-snapshot-write-cold-duration = "10m"
#如果你的系统具有高频的写入操作,可能需要将compact-full-write-cold-duration设置为一个相对较小的值。
#这样可以更频繁地压缩TSM文件,减少文件碎片,提高存储效率和查询性能
#过于频繁的文件压缩可能会增加系统的I/O负载和CPU使用率。官方常见配置为4小时,高频写入建议2小时
compact-full-write-cold-duration = "2h"
#写入密集型负载:如果你的系统主要处理大量的写入操作,并且写入性能是关键,你可能需要限制max-concurrent-compactions的值,以避免压缩操作与写入操作争用资源
#查询密集型负载:如果查询性能是重点,并且你已经观察到由于TSM文件碎片过多而导致的查询性能下降,你可以尝试增加max-concurrent-compactions的值,以加速文件的合并和优化。
#官方配置是4,从默认值开始,然后根据系统的性能监控和日志进行调整。
max-concurrent-compactions = 0
#指定了每秒允许TSM压缩操作写入磁盘的字节数限制
#高I/O性能:如果您的系统具有高性能的磁盘I/O子系统(如SSD),并且磁盘I/O不是瓶颈,那么您可以考虑增加compact-throughput的值,以允许更快的压缩操作
compact-throughput = "64m"
#在短暂突发期间,TSM压缩操作可以写入磁盘的最大字节速率。它允许系统在某些情况下超过compact-throughput的限制,以处理更多的数据或满足更高的性能需求
compact-throughput-burst = "96m"
#将内存分片索引更改为基于时间序列(TSI)的磁盘索引。
#这可以通过修改influxdb.conf配置文件中的index-version参数为tsi1来实现。
index-version = "tsi1"
#限制每个数据库中的最大序列(series)数量。序列是InfluxDB中的一个核心概念,它指的是在相同数据库中,
#具有相同保留策略(retention policy)、度量(measurement)和标签集(tag set)的数据点的集合,默认值是1,000,000(一百万)
#您可以将其设置为0,以允许无限数量的序列(但这可能会增加系统资源的消耗)
max-series-per-database = 0
#max-values-per-tag 是一个限制参数,用于指定 InfluxDB 数据库中每个 tag key 可以关联的不同 tag value 的最大数量
# 个人理解是tag对应的值可能有的最大数量,我们的code和origin和type 应该不会超过太多
# 默认情况下,max-values-per-tag 的值为 100,000(即10万)。
max-values-per-tag = 0
#控制内部缓存中用于存储先前计算的序列结果的大小。这个参数主要影响 TSI(Time-Structured Merge Tree)索引的性能和行为
#指定了索引写前日志(WAL, Write-Ahead Log)文件在压缩成索引文件之前的最大阈值(以字节为单位)
#较小的大小会导致日志文件被更频繁地压缩,这通常会导致较低的堆内存使用,但可能会以牺牲写入吞吐量为代价
#较大的大小会减少日志文件的压缩频率,使更多的系列保持在内存中,并提供更高的写入吞吐量
#如果你有充足的内存资源,并且希望提高写入性能,可以考虑增加这个值
#max-index-log-file-size = "100m":设置最大索引日志文件大小为 100MB。
max-index-log-file-size = "100m"
#用于存储序列 ID 集(series ID sets)的缓存大小。在 InfluxDB 中,每个测量(measurement)、标签(tag)和字段(field)的组合都表示一个序列(series)。
#这个缓存用于加速查询,因为它存储了序列 ID 集的映射,避免了在每次查询时都重新计算它们
#如果你的查询模式主要是读取,并且查询经常涉及相同的测量、标签和字段组合,那么增加 series-id-set-cache-size 可能会提高性能
#如果你的数据写入频率很高,并且经常添加新的序列,那么缓存可能会更快地达到其最大大小,导致缓存失效和性能下降
series-id-set-cache-size = 200
#控制群集服务配置
[coordinator]
#写操作超时时间,默认值: 10s。
write-timeout = "30s"
#查询操作超时时间,0无限制,默认值:0s。
query-timeout = "40s"
#慢查询超时时间,0无限制,默认值:0s。
log-queries-after = "60s"
#旧数据的保留策略
[retention]
#SHOW RETENTION POLICIES ON "history" 查询当前的保留策略
#InfluxDB在创建数据库时会自动创建一个名为“autogen”的默认保留策略,其保留时间为永久(0s表示无限制)。
#当数据超过其保留策略的保留时间后,InfluxDB将自动删除这些数据。因此,在设置保留策略时,请确保考虑您的数据需求和存储限制
#CREATE RETENTION POLICY "<policy_name>" ON "<database_name>" DURATION <duration> REPLICATION <replication_factor> [SHARD DURATION <shard_duration>]
#CREATE RETENTION POLICY "my_rp" ON "mydb" DURATION 7d REPLICATION 1 DEFAULT
#<policy_name>:保留策略的名称 <database_name>:要应用保留策略的数据库名称 <duration>:数据的保留期限,例如“1d”表示一天。
#<replication_factor>:数据的复制因子,指定数据在集群中的副本数量 <shard_duration>(可选):如果要自定义分片持续时间,则可以指定分片的持续时间
#是否启用该模块,默认值
#enabled: true
#influxdb提供的简单web管理页面。
[admin]
#是否启用该模块,默认值 :
#enabled: false。
#这一部分控制InfluxDB自有的监控系统。 默认情况下,InfluxDB把这些数据写入_internal 数据库,如果这个库不存在则自动创建。
#_internal 库默认的retention策略是7天,如果你想使用一个自己的retention策略,需要自己创建。
[monitor]
#当store-enabled设置为true时,InfluxDB会收集并存储关于其运行的统计信息,如查询性能、写入速度、内存使用情况等
#这些数据存储在_internal数据库中,可以通过InfluxDB的查询语言(InfluxQL或Flux)来查询和分析
store-enabled = false
#influxdb的http接口配置
[http]
#控制InfluxDB是否要求HTTP请求进行身份验证
#当auth-enabled设置为true时,InfluxDB会对每个HTTP请求进行身份验证。这包括检查请求中是否包含了有效的用户凭据(如用户名和密码),
#并验证这些凭据是否有效。这个过程虽然增加了额外的计算步骤,但在现代硬件上,这个开销通常是微秒级别的,因此不太可能对整体性能产生显著影响
auth-enabled = true
#当log-enabled设置为true时,InfluxDB将记录HTTP请求的日志信息。这可以帮助管理员了解系统的活动情况,包括哪些IP地址正在访问系统、访问了哪些数据、访问频率等
log-enabled = false
#控制记录器如何将日志发送到输出
[logging]
level = "info"
#控制Kapacitor接受数据的配置。
#通常与Kapacitor等外部服务相关,用于订阅InfluxDB中的实时数据流。然而,直接优化InfluxDB中的subscriber配置并不是InfluxDB配置优化的常见部分,
#因为subscriber更多是由外部服务如Kapacitor来管理和配置的
[subscriber]
#是否启用该模块,默认值 :
#enabled: true
#graphite相关配置
#Graphite是一种常用的开源监控绘图工具,它使用简单且易于扩展,主要用于实时收集、存储和显示时间序列类型的数据。
#当与InfluxDB结合使用时,Graphite通常通过Graphite插件将数据发送到InfluxDB进行存储和查询
[[graphite]]
#是否启用该模块,默认值 :
#enabled: false
# 控制一个或多个收集数据的侦听器
#主要用于收集和报告系统和应用程序的性能指标
[[collectd]]
#是否启用该模块,
#enabled: false
#opentsdb配置
#OpenTSDB(Open Time Series Database)是一个建立在HBase之上的时间序列数据库。尽管名字中包含“DB”,
#但实际上它并不是一个独立的数据库系统,而是一层建立在HBase上的数据读写服务。
#OpenTSDB主要针对时序数据进行存储和查询优化,是监控、度量收集等场景下的重要工具
[[opentsdb]]
#是否启用该模块,默认值:
#enabled: false
#udp配置
[[udp]]
#是否启用该模块,默认值:
#enabled: false
#CQs配置
#按照用户指定的查询规则,自动地、周期性地查询实时数据并执行指定运算,然后将查询结果保存在一张指定的表中
[continuous_queries]
#是否开启CQs,默认值:
#enabled: true