如何通过配置为 InfluxDB 设置默认保留策略和持续时间
How to set default retention policy and duration for InfluxDB via configuration
我正在使用官方的 InfluxDB docker 图像。我想将保留策略默认设置为 14 days
。
我可以设置各种 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>]]
如果允许用户通过配置设置默认保留期限,命令的结果
CREATE DATABASE mydb
因实例而异。虽然这不一定有问题,但也不理想。
The problem is that this default policy has a duration of 7 days. I need to set it to 14 days.
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
要回答来自 google 的那些使用现有数据库的问题(这是我的情况),可以通过三种方式设置保留策略:
- 在新数据库上,使用数据库创建(如上所述)
- 在创建保留策略时,在创建语句末尾添加 DEFAULT
- 通过改变现有的保留策略成为数据库的默认策略(见下文)
正在创建数据库
CREATE DATABASE "NOAA_water_database" WITH DURATION 3d REPLICATION 1 SHARD DURATION 1h NAME "liquid"
正在创建策略
CREATE RETENTION POLICY "one_day_only" ON "NOAA_water_database" DURATION 1d REPLICATION 1
更新现有政策
ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT
因此,对于您希望设为默认值的现有数据库和保留策略,最简单的解决方案是使用 alter retention policy。
关于 adding/updating 现有数据库政策的一点注意事项 - 政策到期前的数据将立即删除,因此您将丢失所有旧数据。
这里没有人真正回答这个问题。答案是您不能使用配置文件或环境变量创建保留策略。因此,为了自动化解决方案,您需要创建一个“K8s 作业”,将您的命令导入 influx CLI。
例如:
首先创建此命令文件并将其包装到“db_init.txt”文件中:
CREATE DATABASE 示例 CREATE RETENTION POLICY twoweeks ON 示例
持续时间 14d 复制 1 默认值
其次,创建一个bash脚本将这个文件直接上传到Influx
CLI:
#!/usr/bin/env bash
influx -import -path=/tmp/db-init.txt
将其包裹在图片中并将其作为作业上传 - 然后您就实现了自动化。
希望我能帮上一点忙。
无法通过配置为所有数据库 influxDB 设置保留策略。很可能是因为 retention policy
是一个包含实际压缩时间序列数据的容器。它是每个单独数据库的 属性。更改一个数据库的保留策略不会更改任何其他数据库的保留策略。
If a retention policy is deleted then all the data it contains will be deleted. But altering the retention policy will not delete any data.
所以这里有一个 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
事实上,提到的更改influxdb保留策略的环境变量不起作用,例如hub.docker. That's why this issue中提到的DOCKER_INFLUXDB_INIT_RETENTION
自2018年至今开放。
尽管如此,我使用 .iql
文件来设置保留策略,该策略应位于容器内的目录 /docker-entrypoint-initdb.d/
中,内容如下:
setretention.iql
:
CREATE RETENTION POLICY "two_hours" ON "metrics" DURATION 2h REPLICATION 1 SHARD DURATION 1h DEFAULT
实际上,我在 metrics 数据库上创建了一个名为 two_years 的新保留策略,持续时间为 2h
,并且提到的其他东西。因此,其 docker 命令如下:
docker run --rm -d --name influxdb \
-e INFLUXDB_REPORTING_DISABLED=true \
-e INFLUXDB_DB=metrics \
-e INFLUXDB_USER=retention_test \
-e INFLUXDB_USER_PASSWORD=testing123! \
-v ./setretention.iql:/docker-entrypointinitdb.d/setretention.iql \
influxdb:1.7.11
要检查:
$ docker exec -it influxdb influx
> show retention policies on metrics
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
two_hours 2h0m0s 1h0m0s 1 true
[注意]:
- 请记住,请按照 this table 为相关
retention policy duration
以及 shard group duration
选择正确的值。
[2022 年 4 月更新]
显然,由于此批准 pull request,您可以直接使用提到的 .iql
查询作为从 influxdb 1.9 开始的环境。
我正在使用官方的 InfluxDB docker 图像。我想将保留策略默认设置为 14 days
。
我可以设置各种 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>]]
如果允许用户通过配置设置默认保留期限,命令的结果
CREATE DATABASE mydb
因实例而异。虽然这不一定有问题,但也不理想。
The problem is that this default policy has a duration of 7 days. I need to set it to 14 days.
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
要回答来自 google 的那些使用现有数据库的问题(这是我的情况),可以通过三种方式设置保留策略:
- 在新数据库上,使用数据库创建(如上所述)
- 在创建保留策略时,在创建语句末尾添加 DEFAULT
- 通过改变现有的保留策略成为数据库的默认策略(见下文)
正在创建数据库
CREATE DATABASE "NOAA_water_database" WITH DURATION 3d REPLICATION 1 SHARD DURATION 1h NAME "liquid"
正在创建策略
CREATE RETENTION POLICY "one_day_only" ON "NOAA_water_database" DURATION 1d REPLICATION 1
更新现有政策
ALTER RETENTION POLICY "what_is_time" ON "NOAA_water_database" DURATION 3w SHARD DURATION 2h DEFAULT
因此,对于您希望设为默认值的现有数据库和保留策略,最简单的解决方案是使用 alter retention policy。
关于 adding/updating 现有数据库政策的一点注意事项 - 政策到期前的数据将立即删除,因此您将丢失所有旧数据。
这里没有人真正回答这个问题。答案是您不能使用配置文件或环境变量创建保留策略。因此,为了自动化解决方案,您需要创建一个“K8s 作业”,将您的命令导入 influx CLI。
例如:
首先创建此命令文件并将其包装到“db_init.txt”文件中:
CREATE DATABASE 示例 CREATE RETENTION POLICY twoweeks ON 示例 持续时间 14d 复制 1 默认值
其次,创建一个bash脚本将这个文件直接上传到Influx CLI:
#!/usr/bin/env bash
influx -import -path=/tmp/db-init.txt
将其包裹在图片中并将其作为作业上传 - 然后您就实现了自动化。
希望我能帮上一点忙。
无法通过配置为所有数据库 influxDB 设置保留策略。很可能是因为 retention policy
是一个包含实际压缩时间序列数据的容器。它是每个单独数据库的 属性。更改一个数据库的保留策略不会更改任何其他数据库的保留策略。
If a retention policy is deleted then all the data it contains will be deleted. But altering the retention policy will not delete any data.
所以这里有一个 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
事实上,提到的更改influxdb保留策略的环境变量不起作用,例如hub.docker. That's why this issue中提到的DOCKER_INFLUXDB_INIT_RETENTION
自2018年至今开放。
尽管如此,我使用 .iql
文件来设置保留策略,该策略应位于容器内的目录 /docker-entrypoint-initdb.d/
中,内容如下:
setretention.iql
:
CREATE RETENTION POLICY "two_hours" ON "metrics" DURATION 2h REPLICATION 1 SHARD DURATION 1h DEFAULT
实际上,我在 metrics 数据库上创建了一个名为 two_years 的新保留策略,持续时间为 2h
,并且提到的其他东西。因此,其 docker 命令如下:
docker run --rm -d --name influxdb \
-e INFLUXDB_REPORTING_DISABLED=true \
-e INFLUXDB_DB=metrics \
-e INFLUXDB_USER=retention_test \
-e INFLUXDB_USER_PASSWORD=testing123! \
-v ./setretention.iql:/docker-entrypointinitdb.d/setretention.iql \
influxdb:1.7.11
要检查:
$ docker exec -it influxdb influx
> show retention policies on metrics
name duration shardGroupDuration replicaN default
---- -------- ------------------ -------- -------
autogen 0s 168h0m0s 1 false
two_hours 2h0m0s 1h0m0s 1 true
[注意]:
- 请记住,请按照 this table 为相关
retention policy duration
以及shard group duration
选择正确的值。
[2022 年 4 月更新]
显然,由于此批准 pull request,您可以直接使用提到的 .iql
查询作为从 influxdb 1.9 开始的环境。