Телеграф проверяет 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.')