netdata/netdata · error · anyhow::Error

unsupported classifier action '{name}'

Error message

unsupported classifier action '{name}'

What it means

The classifier rule used an action-function name that the parser does not recognize — the match in `parse_action` fell through to the catch-all arm. This is the parse-time unknown-builtin error; the supported action set is fixed (Reject, Classify*, SetName, SetDescription, ClassifyExternal/Internal, ...).

Source

Thrown at src/crates/netflow-plugin/src/enrichment/classifiers/parse/action.rs:140

                arg3,
                compiled,
            ))
        }
        "SetName" => Ok(ActionExpr::SetName(one_string_arg(name, args)?)),
        "SetDescription" => Ok(ActionExpr::SetDescription(one_string_arg(name, args)?)),
        "ClassifyExternal" => {
            if !args.is_empty() {
                anyhow::bail!("ClassifyExternal() does not accept arguments");
            }
            Ok(ActionExpr::ClassifyExternal)
        }
        "ClassifyInternal" => {
            if !args.is_empty() {
                anyhow::bail!("ClassifyInternal() does not accept arguments");
            }
            Ok(ActionExpr::ClassifyInternal)
        }
        _ => anyhow::bail!("unsupported classifier action '{name}'"),
    }
}

View on GitHub (pinned to 4864de85e2)

Solutions

  1. Check the supported action list in the classifier documentation for this version and use one of those names exactly.
  2. Fix typos/casing — action names are matched literally.
  3. If you need behavior from an action that does not exist, approximate it with SetName/SetDescription plus conditions, or file a feature request.

Example fix

// before
SetRole("edge")

// after
ClassifyRole("edge")
Defensive patterns

Strategy: validation

Validate before calling

// Whitelist check before deploy
const SUPPORTED: &[&str] = &["Reject", "Classify", "ClassifyGroup", "ClassifyRole",
    "ClassifySite", "SetName", "SetDescription", "ClassifyExternal", "ClassifyInternal"];
fn action_supported(name: &str) -> bool {
    SUPPORTED.contains(&name)
}

Prevention

When it happens

Trigger: Writing any unknown function call as a rule term: `SetRole(x)`, `Drop()`, `ClassifyAS(65001)`, or a typo like `SetNam(x)`.

Common situations: Typos in action names; assuming parity with another product's classifier DSL (e.g. Akips or ntopng syntax) that has actions this engine lacks; version drift where an action was renamed or not yet available in this build.

Related errors


AI-assisted analysis of netdata/netdata@4864de85e2 (2026-08-15). Data as JSON: /api/errors/0e1ed588bbb76016. Report an issue: GitHub.