我正在使用官方的InfluxDB docker镜像。我希望默认情况下将保留政策设置为14 days
。
我可以设置各种ENV
变量来更改InfluxDB的配置,例如INFLUXDB_RETENTION_POLICY
。这需要保留策略的名称,例如"默认"用作默认保留策略。
问题是此默认策略的持续时间为7天。我需要将它设置为14天。
文档很差。我找不到任何ENV
变量来调整默认持续时间。我还可以将INFLUXDB_RETENTION_POLICY
变量设置为其他保留策略的其他名称,但我不知道如何通过配置创建该保留策略。
有人知道: 1)通过配置更改保留的默认持续时间的方法 要么 2)通过配置创建保留策略的方法
答案 0 :(得分:12)
遗憾的是,无法通过配置设置默认保留策略。原因是通常在数据库创建期间定义保留策略持续时间。
CREATE DATABASE <database_name>
[WITH [DURATION <duration>] [REPLICATION <n>]
[SHARD DURATION <duration>] [NAME <retention-policy-name>]]
如果允许用户通过配置设置默认保留期限,则命令结果为
CREATE DATABASE mydb
因实例而异。虽然这不一定有问题,但也不理想。
问题是此默认策略的持续时间为7天。我需要将它设置为14天。
InfluxDB中的默认保留策略应该是无限的。
> CREATE DATABASE mydb
> SHOW RETENTION POLICIES ON mydb
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 true
我们在此处看到保留策略的持续时间为0s
,这是无限的别名,分片组的持续时间为168h0m0s
,为7天。
我认为这里混淆的主要原因是相对普遍的 - 主要是由于保留政策命名不佳。在InfluxDB中,数据库是保留策略的容器,而保留策略是实际时间序列数据的容器。也就是说,保留策略不是一个策略,而是一个容器,它对所包含的所有数据都有策略。
我的建议是在InfluxDB中创建数据库时始终完全明确。这样做将始终保证您的数据库具有正确的保留策略持续时间。因此,要创建具有14天保留策略的数据库,您需要发出命令
CREATE DATABASE mydb WITH DURATION 14d
答案 1 :(得分:1)
这里没有人真正回答过这个问题。答案是您不能使用配置文件或环境变量创建保留策略。因此,为了使解决方案自动化,您将需要创建一个“ K8s Job”,将您的命令导入到Influx CLI中。
例如:
首先创建此命令文件,并将其包装到“ db_init.txt”文件中:
创建数据库示例创建示例两周内的保留政策 DURATION 14d REPLICATION 1 DEFAULT
第二,创建一个bash脚本以将该文件直接上传到Influx 命令行:
#!/ usr / bin / env bash
涌入-import -path = / tmp / db-init.txt
将其包装在图像中并作为作业上载-您将其自动化。
希望我能有所帮助。
答案 2 :(得分:0)
要回答来自具有现有数据库的google的问题(这是我的情况),可以通过三种方法设置保留政策:
创建数据库
创建数据库“ NOAA_water_database”,持续时间为3d,复制1次,持续时间为1h,名称为“液体”
创建策略
在“ NOAA_water_database”上建立“ one_day_only”保留期限DURATION 1d REPLICATION 1
更新现有策略
更改保留政策“ what_is_time”为“ NOAA_water_database” DURATION 3w SHARD DURATION 2h DEFAULT
因此,对于要设置为默认值的现有数据库和保留策略,最简单的解决方案是使用更改保留策略。
答案 3 :(得分:0)
无法通过config为所有数据库influxDB设置保留策略。很有可能是因为retention policy
是一个包含实际压缩时间序列数据的容器。这是每个数据库的属性。更改一个数据库的保留策略不会更改任何其他数据库的保留策略。
如果删除保留策略,则包含的所有数据将被删除。但是更改保留策略不会删除任何数据。
这是一个bash脚本,用于自动执行更改保留策略的任务
for db in $(influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -execute="SHOW DATABASES"| grep <pattern_to_list_required_db>); do
influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -execute="ALTER RETENTION POLICY \"autogen\" ON \"$db\" DURATION 14d"
influx -username $INFLUX_USERNAME -password $INFLUX_PASSWORD -database="$db" -execute="SHOW RETENTION POLICIES"
done