【问题标题】:How to set default retention policy and duration for InfluxDB via configuration如何通过配置为 InfluxDB 设置默认保留策略和持续时间
【发布时间】:2017-05-27 23:57:22
【问题描述】:

我使用的是官方的 InfluxDB docker 镜像。我想将保留策略默认设置为14 days。

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

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

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

是否有人知道: 1) 一种通过配置更改默认保留期限的方法 要么 2) 一种通过配置创建保留策略的方法

【问题讨论】:

    标签: configuration influxdb


    【解决方案1】:

    无法通过配置为所有数据库 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
    

    【讨论】:

      【解决方案2】:

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

      例如:

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

        CREATE DATABASE 示例 CREATE RETENTION POLICY twoweeks ON 示例 DURATION 14d 复制 1 默认

      • 其次,创建一个 bash 脚本,将这个文件直接上传到 Influx 命令行:

        #!/usr/bin/env bash

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

      将其封装在图像中并将其作为作业上传 - 然后您就可以自动完成了。

      希望我能提供一点帮助。

      【讨论】:

        【解决方案3】:

        为了回答那些来自 google 并使用现有数据库的问题(这是我的情况),设置保留政策的方法有以下三种:

        • 在新数据库上,使用数据库创建(如上)
        • 在创建保留策略时,通过在创建语句末尾添加 DEFAULT
        • 通过更改现有的保留政策成为数据库的默认设置(见下文)

        创建数据库

        用 DURATION 3d REPLICATION 1 SHARD DURATION 1h NAME “liquid”创建数据库“NOAA_water_database”

        制定政策

        在“NOAA_water_database”DURATION 1d REPLICATION 1 上创建保留政策“one_day_only”

        更新现有政策

        ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT

        因此,对于您希望设为默认的现有数据库和保留策略,最简单的解决方案是使用更改保留策略。

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

        【讨论】:

          【解决方案4】:

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

          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
          

          【讨论】:

          • 谢谢,这为我解决了问题。我们也在通过配置在 InfluxDB 中创建一个数据库,我们只指定名称。对我来说似乎很愚蠢,但是我们在 kubernetes pod 的 docker 容器中运行 InfluxDB,我还不清楚如何自动化这部分设置。在 kubernetes 创建 pod 之前,不会创建 InfluxDB 的 docker 卷,所以......另一天的另一个问题。
          • 查看this documentation 看起来您可以更改默认的retentopn 政策:在“NOAA_water_database”上创建保留政策“one_day_only” DURATION 23h60m REPLICATION 1 DEFAULT
          • 您也可以使用alter retention policy "autogen" on "mydb" duration 2w shard duration 1w replication 1 default更改现有的自动生成策略。
          • 谢谢@hlovdal,这正是我想要的。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2022-01-11
          • 2022-08-24
          • 1970-01-01
          • 1970-01-01
          • 2019-10-15
          • 2019-09-19
          • 1970-01-01
          相关资源
          最近更新 更多