Configuration 如何通过配置为XDB设置默认保留策略和持续时间

Configuration 如何通过配置为XDB设置默认保留策略和持续时间,configuration,influxdb,Configuration,Influxdb,我使用的是XDB docker的官方图像。我想将保留策略默认设置为14天 我可以设置各种ENV变量来更改InfluxDB的配置,例如InfluxDB_RETENTION_POLICY。这要求将保留策略的名称(如“default”)用作默认保留策略 问题是此默认策略的持续时间为7天。我需要设置为14天 文件很差。我找不到任何ENV变量来调整默认持续时间。我还可以将INFLUXDB_RETENTION_POLICY变量设置为不同保留策略的不同名称,但我不知道如何通过配置创建该保留策略 是否有人知道:

我使用的是XDB docker的官方图像。我想将保留策略默认设置为
14天

我可以设置各种
ENV
变量来更改InfluxDB的配置,例如
InfluxDB_RETENTION_POLICY
。这要求将保留策略的名称(如“default”)用作默认保留策略

问题是此默认策略的持续时间为7天。我需要设置为14天

文件很差。我找不到任何
ENV
变量来调整默认持续时间。我还可以将
INFLUXDB_RETENTION_POLICY
变量设置为不同保留策略的不同名称,但我不知道如何通过配置创建该保留策略

是否有人知道: 1) 通过配置更改默认保留时间的方法 或
2) 通过配置创建保留策略的方法

遗憾的是,无法通过配置设置默认保留策略。原因是,通常在创建数据库期间定义保留策略的持续时间

CREATE DATABASE <database_name>
[WITH [DURATION <duration>] [REPLICATION <n>]
      [SHARD DURATION <duration>] [NAME <retention-policy-name>]]
具体情况会有所不同。虽然这不一定有问题,但也不理想

问题是此默认策略的持续时间为7天。我需要设置为14天

XDB中的默认保留策略应该是无限的

> CREATE DATABASE mydb
> SHOW RETENTION POLICIES ON mydb
name    duration shardGroupDuration replicaN default
----    -------- ------------------ -------- -------
autogen 0s       168h0m0s           1        true
这里我们看到,保留策略的持续时间是
0s
,这是无限的别名,而碎片组的持续时间是
168h0m0s
,这是7天

我认为这里的主要混淆点比较常见,主要是因为保留策略的名称不好。在XDB中,数据库是保留策略的容器,保留策略是实际时间序列数据的容器。也就是说,保留策略与其说是一个策略,不如说是一个容器,其中包含的所有数据都有一个策略

我的建议是,在XDB中创建数据库时始终要完全明确。这样做将始终确保数据库具有正确的保留策略持续时间。因此,要创建具有14天保留策略的数据库,您需要发出以下命令

CREATE DATABASE mydb 
CREATE DATABASE mydb WITH DURATION 14d

为了回答那些来自谷歌且拥有现有数据库的用户的问题(这是我的情况),有三种方法可以设置保留策略:

  • 在新数据库上,使用数据库创建(如上所述)
  • 在创建保留策略时,在create语句末尾添加默认值
  • 通过将现有保留策略更改为数据库的默认策略(见下文)
创建数据库

创建数据库“NOAA_水_数据库”,持续时间为3d复制1个碎片持续时间1h名称为“液体”

创建策略

在“NOAA水资源数据库”持续时间1d复制1上创建保留策略“仅一天”

更新现有策略

更改“NOAA水资源数据库”上的保留策略“what_is_time”持续时间3w碎片持续时间2h默认值

因此,对于要设置为默认值的现有数据库和保留策略,最简单的解决方案是使用alter retention policy


在现有数据库上添加/更新策略时需要注意的一点是,策略过期之前的数据将立即被删除,因此您将丢失所有旧数据

这里没有人真正回答这个问题。答案是,您无法使用配置文件或环境变量创建保留策略。因此,为了使解决方案自动化,您需要创建一个“K8s作业”,将您的命令导入influx CLI

例如:

  • 首先创建此命令文件并将其包装到“db_init.txt”文件:

    创建数据库示例创建保留策略示例两周 持续时间14d复制1默认值

  • 第二,创建一个bash脚本,将此文件直接上载到Influx CLI:

    #!/usr/bin/env bash

    influx-import-path=/tmp/db-init.txt

把它包装成一张图片,然后作为作业上传——这样你就可以自动完成了


希望我能帮上一点忙。

没有办法通过配置为XDB中的所有数据库设置保留策略。很可能是因为
保留策略
是一个包含实际压缩的时间序列数据的容器。它是每个数据库的属性。更改一个数据库的保留策略不会更改任何其他数据库的保留策略

如果删除保留策略,则它包含的所有数据都将被删除。但更改保留策略不会删除任何数据

因此,下面是一个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
以美元表示的数据库(influx-username$influx\u username-password$influx\u password-execute=“SHOW DATABASES”| grep);做
流入-用户名$influx\u用户名-密码$influx\u密码-execute=“ALTER RETENTION POLICY\”autogen\”开启\“$db\”持续时间14d”
流入-用户名$influx\u用户名-密码$influx\u密码-数据库=“$db”-execute=“显示保留策略”
完成

谢谢,这帮我把事情弄清楚了。我们也通过配置在XDB中创建一个数据库,并且只指定名称。对我来说似乎很愚蠢,但我们正在kubernetes吊舱中的docker容器中运行XDB,我还不清楚如何自动化这一点设置。在kubernetes创建pod之前,不会创建InfluxDB的docker卷,因此…另一个问题将持续一天。查看它,您似乎可以更改“NOAA\u water\u数据库”上的默认保留策略:创建保留策略“仅一天”持续时间23h60m复制1默认值您还可以使用
alter retention policy”a更改现有的autogen策略