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の方を変更しても反映されないので注意。
[ツッコミを入れる]