TICKScript никогда не сбрасывает уровень в OK

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

Либо результат будет пройден, либо "не пройден" (обычно это какой-то вариант выхода из NUM).

Сценарий, который у меня есть, выглядит примерно так:

// RP: autogen
// Monitor the result of updates
// WARNING if the result is anything other than pass
batch
    |query('''SELECT * FROM "mydb"."autogen"."measurement"''')
        .period(25h)
        .every(24h)
        .groupBy('host')
    |alert()
        .id('kapacitor/{{ .TaskName }}/{{ .Group }}')
        .infoReset(lambda: TRUE)
        .warn(lambda: "result" != 'pass')
        .message(
            '{{ index .Tags "host" }}' +
            '{{ if eq .Level "OK" }} are updating again.' +
            '{{ else }}' +
            'are failing to update.' +
            '{{ end }}'
        )
        .idField('id')
        .levelField('level')
        .messageField('description')
        .stateChangesOnly()
    @alertFilterAdapter()
    @alertFilter()

Сценарий, похоже, делает свое дело, но есть критическая проблема - никогда не возвращать уровень обратно в OK.

Если я кормлю приток эти 4 балла:

time                host     name                   result
----                ----     ----                   ------
1544079584447374994 fakeS176 /usr/bin/yum update -y pass
1544079584447374994 fakeS177 /usr/bin/yum update -y exit 1
1544129084447375177 fakeS176 /usr/bin/yum update -y exit 1
1544129084447375177 fakeS177 /usr/bin/yum update -y pass

Я ожидаю 1 предупреждение и 1 ОК. Где все перечисленные выше временные метки находятся в пределах 25-часового периода.

Однако на самом деле происходит то, что я получаю 2 предупреждения и никаких ОК.

Может ли кто-нибудь дать совет о том, как двигаться вперед?

1 ответ

Решение

Обновление - коллега рассказал мне об узлах, о которых я понятия не имел. Добавление узла last() и добавление as(), а затем удаление узла infoReset(), казалось, сделали это.

// RP: autogen
// Monitor the result of updates
// WARNING if the result is anything other than pass
batch
    |query('''SELECT * FROM "mydb"."autogen"."measurement"''')
        .period(25h)
        .every(24h)
        .groupBy('host')
    |last('result')
         .as('result')
    |alert()
        .id('kapacitor/{{ .TaskName }}/{{ .Group }}')
        .warn(lambda: "result" != 'pass')
        .message(
            '{{ index .Tags "host" }}' +
            '{{ if eq .Level "OK" }} are updating again.' +
            '{{ else }}' +
            'are failing to update.' +
            '{{ end }}'
        )
        .idField('id')
        .levelField('level')
        .messageField('description')
        .stateChangesOnly()
    @alertFilterAdapter()
    @alertFilter()

Винт этот проклятый язык.

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