influxDBのbackup、join

influxDBのデータをバックアップして、別のinfluxDBにjoinするシェルを作りました。

backupコマンド

開始日時、終了日時などを指定

influxd backup -portable -database "<DB名>" -start <timestamp> -end <timestamp> -host <DBhost> <backuppath>


joinコマンド

<リストア用DB>は一時DBなので、適用な名前をつける。
一時DBにリストアして、データを既存DBにjoinする感じ。

influxd restore -portable -db <DB名> -newdb <リストア用DB名> <backupfile>
influx -database '<リストア用DB名>' -execute 'SELECT * INTO <DB名>..:MEASUREMENT FROM /.*/ GROUP BY *'
influx -database '<リストア用DB名>' -execute 'DROP DATABASE <リストア用DB名>'


シェルにするとこんな感じ。

cronで日時処理してます。
backup

predate=`date -u "+%Y-%m-%dT%H:%M:%SZ" --date '1 day ago'`
enddate=`date -u "+%Y-%m-%dT%H:%M:%SZ"`
dbhost=192.168.10.10:8088
bkpath=/etc/influxdb/mysnap

influxd backup -portable -database "telegraf" -start $predate -end $enddate -host $dbhost $bkpath


join

bkfile=/etc/influxdb/mysnap/`date +%Y%m%d`/telegraf

influxd restore -portable -db telegraf -newdb telegraf_bak $bkfile
influx -database 'telegraf_bak' -execute 'SELECT * INTO telegraf..:MEASUREMENT FROM /.*/ GROUP BY *'
influx -database 'telegraf_bak' -execute 'DROP DATABASE telegraf_bak'


もっと効率の良いやり方があるかもしれません・・。