сумма двух полей конденсатора - PullRequest
0 голосов
/ 26 мая 2020

Телеграф проверяет iptables на некоторых серверах в таблицах nat и mangle. Поля в infxdb:

time                mangle nat
----                ------ ---
1590506280000000000 1      1

Я хочу суммировать два поля из одного измерения. Мой сценарий:

var data = stream
    |from()
        .measurement('dat')
        .groupBy('cluster', 'router')
    |window()
        .period(1m)
        .every(1m)

var mangle_tab = data
    |sum('mangle')
        .as('value')

var nat_tab = data
    |sum('nat')
        .as('value')

mangle_tab
    |join(nat_tab)
        .as('magle', 'nat')
    |eval(lambda: "mangle.value" + "nat.value")
        .as('rul_count')

data
    |alert()
        .warn(lambda: int("rul_count") < 6)
        .log('/tmp/fw.txt')
        .message('Cluster: {{ index .Tags "cluster" }} no rules.')

Это не работает. Я вижу в журнале:

lvl=error msg="error evaluating expression" service=kapacitor task_master=main task=fw_check node=eval7 err="invalid math operator + for type missing"
lvl=error msg="error evaluating expression for level" service=kapacitor task_master=main task=fw_check node=alert8 err="Cannot call function \"int\" argument \"rul_count\" is missing, values in scope are []" level=WARNING

Или можно сделать два значения в alert.warn? Примерно так:

data
    |alert()
        .warn(lambda: int("mangle.value") < 3 OR int("nat.value") < 3)
        .message('Cluster: {{ index .Tags "cluster" }} no rules.')
...