Kapacitor: настроить предупреждающие сообщения для функции Deadman - PullRequest
0 голосов
/ 07 января 2020

Чего мы хотим добиться - это настроить шаблон сообщения, который используется функцией deadman. Сообщение, которое должно отображаться, должно зависеть от значения .Level.

Создаются две переменные (start_summary и end_summary и message), и в зависимости от значения .Level либо значение start_summary, либо переменная end_summary должна выводиться deadman.

Обычно эти переменные объявляются как переменные и получают их значение из файла переменных JSON. Ниже приведен шаблон (соответствующая часть).

Переменные start_summary и end_summary добавляются в качестве тегов с использованием DefaultNode. Эти переменные включают тег. В зависимости от значения .Level отображается правильное сообщение, однако тег в переменные не заменяется. Например, отображается следующее сообщение:

[ПРОБЛЕМА] Измерения данных отсутствуют во время выполнения {{index .Tags \ "runtime-name \"}} [Тестирование]

Возможно ли каким-либо образом получить тег, на который ссылаются переменные start_summary и end_summary, оцененный и замененный фактическим именем среды выполнения?

Эта среда выполнения, кстати, существует как тег.

Шаблон:

var start_summary = '[PROBLEM] The data measurements are missing for runtime {{ index .Tags "runtime-name" }} [Testing]'
var end_summary = '[FIXED] The data measurements are missing for runtime {{ index .Tags "runtime-name" }} [Testing]'

var message = '{{ if eq .Level "CRITICAL" }} {{index .Tags "start_summary"}} {{ else if eq .Level "OK" }}  {{index .Tags "end_summary"}} {{ end }}'

var dayRestriction lambda
var timeRestriction lambda

var qry = 'SELECT count(*) FROM "' + db + '"."' + rp + '"."' + measurement + '" WHERE ' + whereClause

var data = batch
    |query(qry)
        .period(period)
        .cron(qryCronExpr)
        .groupBy('environment', 'runtime-name')
    |default().tag('start_summary', start_summary)
    |default().tag('end_summary', end_summary)

var trigger = data
    |deadman(threshold, interval, lambda: dayRestriction AND timeRestriction)
        .message(message)
        .stateChangesOnly()
        .details('')
        .post('http://...')
...