kapacitor批次中的衍生节点

时间:2019-04-02 06:53:44

标签: influxdb kapacitor

我正在使用派生节点来计算网络设备的带宽利用率,以下是脚本。

我使用where子句是因为我想提醒特定IP的特定接口。

// database
var database = 'router'

// measurement from where data is coming
var measurement = 'cisco_router'

// RP from where data is coming
var RP = 'autogen'

// which influx cluster to use
var clus = 'network'

// durations
var period = 7m

var every = 10s

// alerts
var crit = 320

var alertName = 'cisco_router_bandwidth_alert'

var triggerType = 'threshold'

batch
|query(''' SELECT (mean("bandwidth_in") * 8) as "value" FROM "router"."autogen"."cisco_router" where  host = '10.1.11.1' and ( interface_name = 'GigabitEthernet0/0/0' or  interface_name = 'GigabitEthernet0/0/1')  ''')
    .cluster('network')
    .period(7m)
    .every(6m)
    .groupBy(*)
|derivative('value')
    .unit(1s)
    .nonNegative()
    .as('value')
|alert()
    .crit(lambda: "value" > crit)
    .stateChangesOnly()
    .message(' {{.Level}}  for {{ index .Tags "device_name" }} on Port {{ index .Tags "name" }} {{ .Time.Local.Format "2006.01.02 - 15:04:05" }} ')
    .details('''

 <pre>
 ------------------------------------------------------------------
 CLIENT NAME : XXXXXXXX
 ENVIRONMENT : Prod
 DEVICE TYPE : Router
 CATEGORY : {{ index .Tags "type" }}
 IP ADDRESS : {{ index .Tags "host" }}
 DATE : {{ .Time.Local.Format "2006.01.02 - 15:04:05" }}
 INTERFACE NAME : {{ index .Tags "name" }}
 VALUE : {{ index .Fields "value" }}
 SEVERITY : {{.Level}}
 ------------------------------------------------------------------
 </pre>

''')
    .log('/tmp/chronograf/cisco_router_interface_alert.log')
    .levelTag('level')
    .idTag('id')
    .messageField('message')
    .email()
    .to('XXXXXXX')
|influxDBOut()
    .database('chronograf')
    .retentionPolicy(RP)
    .measurement('alerts')
    .tag('alertName', alertName)

但是当我进行kapacitor监视时,它没有显示任何内容,并且在日志中没有显示任何错误。

1 个答案:

答案 0 :(得分:0)

derivative()和诸如stateDuration()之类的其他一些节点在每个新的批处理查询上重置其状态,这与流模式相反,在流模式下,它们的状态始终保持不变。

实际上,这是因为在批处理模式下,此节点仅用于跟踪当前批处理点内的更改。

由于查询返回单点-导数()没有结果。

尝试将导数移动到查询中。并使用| httpOut()节点跟踪每个步骤的结果-有助于理解kapacitor逻辑。

这是一些示例:

dbrp "telegraf"."autogen"
var q= batch
    |query('SELECT derivative(mean("bytes_recv"), 1s) AS "bytes_recv_1s" FROM "telegraf"."autogen"."net" WHERE time < now() AND "interface"=\'eth0\' GROUP BY time(10m) fill(none)')
        .period(10m)
        .every(30s).align()
        .groupBy(time(10m))
        .fill('none')
    |last('bytes_recv_1s').as('value')
    |httpOut('query')

请注意,存在与查询解析相关的错误,需要在查询和刻度中同时指定GROUP BY https://github.com/influxdata/kapacitor/issues/971 https://github.com/influxdata/kapacitor/issues/622