Я пытаюсь заставить kapacitor запускать оповещение на основе собранных данных в infxdb. Я основываю свой файл тиков на ответе в используя kapacitor с infxdb и collectd.
stream
// Select just the cpu measurement from our example database.
|from()
.measurement('cpu_value')
.where(lambda: "type" == 'percent' AND "type_instance" == 'idle')
|alert()
.crit(lambda: "value" < 98)
// Whenever we get an alert write it to a file.
.log('/tmp/alerts.log')
Я определил предупреждение в соответствии с документами kapacitor:
kapacitor define cpu_alert -type stream -tick cpu_alert.tick -dbrp collectd.default
Соответствующие данные отправляются в InfxDB из collectd и доступны через запрос:
select value from /cpu_value/ where type='percent' and type_instance = 'idle' order by time desc limit 10;
Однако работает:
kapacitor record stream -task cpu_alert -duration 20s &
не записывает никаких данных:
$ kapacitor list recordings
ID Type Status Size Date
48e5c04a-68c2-44a3-ba80-f2c12d952994 stream running 0 B 19 Jul 16 11:57 IST
я подозреваемый что я могу неправильно ссылаться на базу данных при регистрации задачи, но не вижу, где у меня есть ошибка.
Основная причина - неправильная конфигурация. Обратите внимание на разделы «Infxdb.subscriptions» и «Infxdb.excluded-subscriptions» в файле kapacitor.conf.
По умолчанию kapacitor подписывается на все БД Influx. Я хотел, чтобы он подписался только на одну БД, но по ошибке включил это в раздел «Infxdb.excluded-subscriptions», а не в «Influxdb.subscriptions».
Вы можете увидеть, какие подписки активны, выполнив запрос «SHOW SUBSCRIPTIONS» к infxdb.