【问题标题】:Derivative node in kapacitor batchkapacitor批处理中的派生节点
【发布时间】:2019-04-02 06:53:43
【问题描述】:

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

我使用 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 watch 并且在日志中没有显示任何错误时它没有显示任何内容。

【问题讨论】:

    标签: influxdb kapacitor


    【解决方案1】:

    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

    【讨论】:

    • 嗨,您能否在上面的脚本中进行更改,因为我无法理解您将导数移动到查询的意思
    猜你喜欢
    • 1970-01-01
    • 2017-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多