---
title: Agent status evaluation
description: Reference documentation for Common Expression Language (CEL) expressions used to evaluate Telegraf agent status.
url: https://docs.influxdata.com/telegraf/controller/reference/agent-status-eval/
estimated_tokens: 2907
product: Telegraf
version: v1
---

# Agent status evaluation

#### Telegraf Controller is in Public Beta

Telegraf Controller is in public beta and will be part of the future Telegraf Enterprise offering. While in beta, Telegraf Controller is **not meant for production use**. The Telegraf Controller documentation is a work in progress, and we are actively working to improve it. If you have any questions or suggestions, please [submit an issue](https://github.com/influxdata/docs-v2/issues/new?labels=Telegraf%20Controller). We welcome any and all contributions.

Beta expectations

-   **No configuration or agent limits**  
    While in beta, Telegraf Controller doesn't place any limits on the number of configurations you can store or the number of Telegraf agents you can track. However, upon being generally available, the free distribution of Telegraf Controller will have limits introduced, with the option to increase limits through a Telegraf Enterprise license.
-   **Potential breaking changes**  
    While in beta, we will do our best to no longer make breaking changes to Telegraf Controller, however, they may be necessary. The majority of changes we make will be additive and non-breaking, and include any necessary migrations. When we do need to make breaking changes, we will do our best to communicate them clearly and in advance to minimize disruption.
-   **Flexible release schedule**  
    While in beta, we will continue to create new releases of Telegraf Controller, but likely at irregular intervals. We will provide [Telegraf Controller release notes](/telegraf/controller/reference/release-notes/) to make it easy to track updates.

Provide beta feedback

-   Use the **Feedback** feature in the Telegraf Controller UI.
-   [Join the InfluxDB Community Slack](https://influxdata.com/slack) and post feedback in the **#telegraf-enterprise-alpha** channel.
-   Post feedback in the [InfluxData Community](https://community.influxdata.com).

Join our public channels

-   [InfluxDB Community Slack *(Preferred)*](https://influxdata.com/slack)
-   [InfluxData Community](https://community.influxdata.com)
-   [InfluxDB Subreddit](https://reddit.com/r/influxdb)

The Telegraf [heartbeat output plugin](/telegraf/v1/output-plugins/heartbeat/) uses CEL expressions to evaluate agent status based on runtime data such as metric counts, error rates, and plugin statistics. [CEL (Common Expression Language)](https://cel.dev) is a lightweight expression language designed for evaluating simple conditions.

## How status evaluation works

You define CEL expressions for three status levels in the `[outputs.heartbeat.status]` section of your Telegraf configuration:

-   **ok** — The agent is healthy.
-   **warn** — The agent has a potential issue.
-   **fail** — The agent has a critical problem.

Each expression is a CEL program that returns a boolean value. Telegraf evaluates expressions in a configurable order (default: `ok`, `warn`, `fail`) and assigns the status of the **first expression that evaluates to `true`**.

If no expression evaluates to `true`, the `default` status is used (default: `"ok"`).

### Initial status

Use the `initial` setting to define a status before the first Telegraf flush cycle. If `initial` is not set or is empty, Telegraf evaluates the status expressions immediately, even before the first flush.

### Evaluation order

The `order` setting controls which expressions are evaluated and in what sequence.

If you omit a status from the `order` list, its expression is **not evaluated**.

## Configuration reference

Configure status evaluation in the `[outputs.heartbeat.status]` section of the heartbeat output plugin. You must include `"status"` in the `include` list for status evaluation to take effect.

```toml
[[outputs.heartbeat]]
  url = "http://telegraf_controller.example.com/agents/heartbeat"
  instance_id = "agent-123"
  interval = "1m"
  include = ["hostname", "statistics", "status"]

  [outputs.heartbeat.status]
    ## CEL expressions that return a boolean.
    ## The first expression that evaluates to true sets the status.
    ok = "metrics > 0"
    warn = "log_errors > 0"
    fail = "log_errors > 10"

    ## Evaluation order (default: ["ok", "warn", "fail"])
    order = ["ok", "warn", "fail"]

    ## Default status when no expression matches
    ## Options: "ok", "warn", "fail", "undefined"
    default = "ok"

    ## Initial status before the first flush cycle
    ## Options: "ok", "warn", "fail", "undefined", ""
    # initial = ""
```

| Option | Type | Default | Description |
| --- | --- | --- | --- |
| ok | string (CEL) | "false" | Expression that, when true, sets status to ok. |
| warn | string (CEL) | "false" | Expression that, when true, sets status to warn. |
| fail | string (CEL) | "false" | Expression that, when true, sets status to fail. |
| order | list of strings | ["ok", "warn", "fail"] | Order in which expressions are evaluated. |
| default | string | "ok" | Status used when no expression evaluates to true. Options: ok, warn, fail, undefined. |
| initial | string | "" | Status before the first flush. Options: ok, warn, fail, undefined, "" (empty = evaluate expressions). |

## [CEL variables](/telegraf/controller/reference/agent-status-eval/variables/)

Reference for variables available in CEL expressions used to evaluate Telegraf agent status in Telegraf Controller.

## [CEL functions and operators](/telegraf/controller/reference/agent-status-eval/functions/)

Reference for functions and operators available in CEL expressions used to evaluate Telegraf agent status.

## [CEL expression examples](/telegraf/controller/reference/agent-status-eval/examples/)

Real-world examples of CEL expressions for evaluating Telegraf agent status.

#### Related

-   [Set agent statuses](/telegraf/controller/agents/status/)
-   [](/telegraf/v1/output-plugins/heartbeat/)
