Documentation

monitor.check() function

monitor.check() checks input data and assigns a level (ok, info, warn, or crit) to each row based on predicate functions.

monitor.check() stores statuses in the _level column and writes results to the statuses measurement in the _monitoring bucket.

Function type signature
(
    <-tables: stream[J],
    data: {A with tags: E, _type: D, _check_name: C, _check_id: B},
    messageFn: (
        r: {
            F with
            _type: D,
            _time: H,
            _time: time,
            _source_timestamp: int,
            _source_measurement: G,
            _measurement: G,
            _measurement: string,
            _level: string,
            _check_name: C,
            _check_id: B,
        },
    ) => I,
    ?crit: (r: {F with _time: H, _measurement: G}) => bool,
    ?info: (r: {F with _time: H, _measurement: G}) => bool,
    ?ok: (r: {F with _time: H, _measurement: G}) => bool,
    ?warn: (r: {F with _time: H, _measurement: G}) => bool,
) => stream[{
    F with
    _type: D,
    _time: H,
    _time: time,
    _source_timestamp: int,
    _source_measurement: G,
    _message: I,
    _measurement: G,
    _measurement: string,
    _level: string,
    _check_name: C,
    _check_id: B,
}] where E: Record, J: Record

For more information, see Function type signatures.

Parameters

crit

Predicate function that determines crit status. Default is (r) => false.

warn

Predicate function that determines warn status. Default is (r) => false.

info

Predicate function that determines info status. Default is (r) => false.

ok

Predicate function that determines ok status. Default is (r) => true.

messageFn

(Required) Predicate function that constructs a message to append to each row.

The message is stored in the _message column.

data

(Required) Check data to append to output used to identify this check.

This data specifies which notification rule and notification endpoint to associate with the sent notification. The data record must contain the following properties:

  • _check_id: check ID (string)
  • _check_name: check name (string)
  • _type: check type (threshold, deadman, or custom) (string)
  • tags: Custom tags to append to output rows (record) The InfluxDB monitoring and alerting system uses monitor.check() to check statuses and automatically assigns these values. If writing a custom check task, we recommend using unique arbitrary values for data record properties.

tables

Input data. Default is piped-forward data (<-).

Examples

Monitor InfluxDB disk usage collected by Telegraf

import "influxdata/influxdb/monitor"

from(bucket: "telegraf")
    |> range(start: -1h)
    |> filter(fn: (r) => r._measurement == "disk" and r._field == "used_percent")
    |> monitor.check(
        crit: (r) => r._value > 90.0,
        warn: (r) => r._value > 80.0,
        info: (r) => r._value > 70.0,
        ok: (r) => r._value <= 60.0,
        messageFn: (r) =>
            if r._level == "crit" then
                "Critical alert!! Disk usage is at ${r._value}%!"
            else if r._level == "warn" then
                "Warning! Disk usage is at ${r._value}%."
            else if r._level == "info" then
                "Disk usage is at ${r._value}%."
            else
                "Things are looking good.",
        data: {
            _check_name: "Disk Utilization (Used Percentage)",
            _check_id: "disk_used_percent",
            _type: "threshold",
            tags: {},
        },
    )

Was this page helpful?

Thank you for your feedback!


The future of Flux

Flux is going into maintenance mode. You can continue using it as you currently are without any changes to your code.

Flux is going into maintenance mode and will not be supported in InfluxDB 3.0. This was a decision based on the broad demand for SQL and the continued growth and adoption of InfluxQL. We are continuing to support Flux for users in 1.x and 2.x so you can continue using it with no changes to your code. If you are interested in transitioning to InfluxDB 3.0 and want to future-proof your code, we suggest using InfluxQL.

For information about the future of Flux, see the following: