I’m trying to write a threshold check in influx v2. The Monitoring & Alerting section appears to allow basic checks where you pick one field, one aggregate function, and set some thresholds. I can’t seem to pull up a script editor in this workflow. So instead i’m hoping i can create a monitor in the tasks section with the code below. The code as it sits throws this error “An internal error has occurred”
I’d like to alert if i haven’t received a point for a series after some amount of time.
import "experimental"
import "influxdata/influxdb/monitor"
t1 = from(bucket: "telegraf")
|> range(start: -30m)
|> filter(fn: (r) => r._measurement == "processes")
|> filter(fn: (r) => r._field == "dead")
|> last()
t2 = from(bucket: "telegraf")
|> range(start: -30m)
|> filter(fn: (r) => r._measurement == "processes")
|> filter(fn: (r) => r._field == "dead")
|> last()
|> map(fn: (r) => ({
r with
_time: experimental.addDuration(d: 0h, to: now()),
}))
curr_elapsed = union(tables: [t1, t2])
|> sort(columns: ["_time"], desc: false)
|> elapsed()
avg_elapsed = from(bucket: "telegraf")
|> range(start: -30m)
|> filter(fn: (r) => r._measurement == "processes")
|> filter(fn: (r) => r._field == "dead")
|> elapsed()
|> mean(column: "elapsed")
data = {
_check_id: "000000000000000a",
_check_name: "threshold check",
_type: "threshold",
_measurement: "telegraf",
tags: {aaa: "vaaa", bbb: "vbbb"}
}
join(tables: {current: curr_elapsed, avg: avg_elapsed}, on: ["host"])
|> rename(columns: {_measurement_avg: "_measurement", _field_avg: "_field", })
|> monitor.check(
crit: (r) => r.elapsed_current > r.elapsed_avg ,
messageFn: (r) => "TEST",
data: data
)
i used this a a reference: check_test.flux
If i comment out monitor.check it yields results as i’d expect it to.
#group | FALSE | FALSE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | TRUE | FALSE | FALSE | FALSE | FALSE | TRUE |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
#datatype | string | long | string | string | string | string | dateTime:RFC3339 | dateTime:RFC3339 | dateTime:RFC3339 | dateTime:RFC3339 | dateTime:RFC3339 | long | double | long | string |
#default | _result | ||||||||||||||
result | table | _field | _field_current | _measurement | _measurement_current | _start_avg | _start_current | _stop_avg | _stop_current | _time | _value | elapsed_avg | elapsed_current | host | |
0 | dead | dead | processes | processes | 2019-12-09T18:11:30.909468818Z | 2019-12-09T18:11:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 0 | 10 | 10 | host1 | ||
1 | dead | dead | processes | processes | 2019-12-09T18:11:30.909468818Z | 2019-12-09T18:11:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 2019-12-09T18:41:30.909468818Z | 0 | 10 | 0 | host2 |
Any idea on how to make the monitor.check work?
Thanks for looking