Используя конденсатор с притоком и сбором

Я пытаюсь интегрировать Kapacitor с нашими настройками притока и сбора. Тем не менее, это не похоже на работу, и я не понимаю, почему.

Collectd и Influxdb работают правильно, и я думаю, что Kapacitor может подключиться к influenxdb. В журнале 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

1 ответ

Решение

Автор 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/

Что касается того, почему нет никаких записей, я не могу ответить без большего контекста относительно того, как вы пытались создать запись.

Другие вопросы по тегам