Я пытаюсь интегрировать Kapacitor с нашими настройками infxdb и collectd. Однако, похоже, это не работает, и я не понимаю, почему.
Collectd и Influxdb работают правильно, и я думаю, что Kapacitor может подключиться к Influxdb. В журнале kapacitor я вижу это:
[influxdb] 2016/04/22 09:46:42 I! started UDP listener for collectd_db default
Это имя базы данных infxdb, в которой collectd записывает метрики.
Я создал следующий тик-файл, загрузил его в kapacitor и включил:
stream
.from().measurement('cpu_value')
.where(lambda: "type" == "percent")
.where(lambda: "type_instance" == "idle")
.alert()
.crit(lambda: "value" < 100)
// Whenever we get an alert write it to a file.
.log('/tmp/alerts.log')
Это был просто тестовый сценарий, который, надеюсь, даст какой-то результат.
Скрипт включен:
Name Type Enabled Executing Databases and Retention Policies
cpu_tick stream true true ["collectd_db"."default"]
Однако я не вижу записей:
[centos@ip-xx-xx-xx-xx tmp]$ kapacitor list recordings
ID Type Size Created
"cpu_value" - действительное измерение в моей базе данных.
Вот что я вижу в журнале ошибок:
[cpu_alert:stream1] 2016/04/28 13:00:51 E! error while evaluating WHERE expression: name "percent" is undefined. Names in scope: time,value,host,instance,type,type_instance
Автор Kapacitor здесь ...
В лямбда-выражениях Kapacitor одинарные кавычки и двойные кавычки имеют разное значение.
Это выражение .where(lambda: "type" == "percent")
говорит, что сохраняйте только те данные, которые type
значение поля или тега равно значению percent
поле или тег. По ошибке
[cpu_alert: stream1] 2016/04/28 13:00:51 E! ошибка при вычислении выражения WHERE: имя «процент» не определено. Имена в области: время, значение, хост, экземпляр, тип, type_instance
В percent
поле или тег не существует.
Вам нужно использовать одинарные кавычки, если вы хотите отфильтровать точки, значение типа которых равно percent
буквальный.
.where(lambda: "type" == 'percent')
То же самое, вероятно, верно и для вашего следующего выражения.
.where(lambda: "type_instance" == 'idle')
Также вы можете AND
выражения вместе, если хотите
.where(lambda: "type" == 'percent' AND "type_instance" == 'idle')
Когда Kapacitor находит несколько where
прилегающие к нему операторы преобразовывают их в выражение And'ed под капотом.
Вот соответствующие документы, объясняющие разницу в котировках. https://docs.influxdata.com/kapacitor/v0.12/introduction/getting_started/#keep-the-quotes-in-mind
Что касается того, почему нет записей, я не могу ответить без дополнительного контекста, как вы пытались создать запись.