2014-06-30 (Mon) [長年日記]
_ InfluxDBの古いデータの削除
InfluxDBを試しているが、InfluxDBには今のところ古いデータを自動で削除する機能がない(対応予定はあるようだ)。
古いshardを丸ごと削除するのが効率がよいらしい(InfluxDBでは一定期間ごとにshardが作成される)ので、以下のようなcron用スクリプトを書いてみた。
require "influxdb" USER = "root" PASS = "root" TTL = "1d" def parse_ttl(ttl) case ttl when /\A(\d+)s\z/ return $1.to_i when /\A(\d+)m\z/ return 60 * $1.to_i when /\A(\d+)h\z/ return 60 * 60 * $1.to_i when /\A(\d+)d\z/ return 24 * 60 * 60 * $1.to_i else raise "invalid TTL - #{ttl}" end end secs_to_live = parse_ttl(TTL) influxdb = InfluxDB::Client.new for shard in influxdb.get_shard_list["shortTerm"] end_time = Time.at(shard["endTime"]) if Time.now - end_time > secs_to_live influxdb.delete_shard(shard["id"], shard["serverIds"], USER, PASS) end end
InfluxDBでは小文字で始まる名前のseriesは短期間(short term)、大文字で始まる名前のseriesは長期間(long term)と決まっているが、上記のスクリプトでは短期間のshardだけ削除するようにしている。
ただ、デフォルトでは各shardの期間が7日間になっているので、それよりも短い期間でshardを削除する場合は/opt/influxdb/shared/config.tomlの設定を以下のように変更しておく必要がある(この例では6時間に設定している)。
[sharding.short-term] duration = "6h"
/opt/influxdb/current/config.tomlの方を変更しても反映されないので注意。