elastic/elasticsearch · error · IllegalArgumentException

field [{}] is null, cannot process it.

Error message

field [{}] is null, cannot process it.

What it means

CefProcessor.execute fetches the configured source field; if the value is null and ignore_missing is false (the default), it throws. This is a pipeline-level guard: it fires before CefParser is even constructed, so no CEF-specific validation has run yet.

Source

Thrown at modules/ingest-common/src/main/java/org/elasticsearch/ingest/common/CefProcessor.java:59

        boolean ignoreMissing,
        boolean ignoreEmptyValues,
        @Nullable TemplateScript.Factory timezone
    ) {
        super(tag, description);
        this.field = field;
        this.targetField = targetField;
        this.ignoreMissing = ignoreMissing;
        this.ignoreEmptyValues = ignoreEmptyValues;
        this.timezone = timezone;
    }

    @Override
    public IngestDocument execute(IngestDocument document) {
        String line = document.getFieldValue(field, String.class, ignoreMissing);
        if (line == null && ignoreMissing) {
            return document;
        } else if (line == null) {
            throw new IllegalArgumentException("field [" + field + "] is null, cannot process it.");
        }
        ZoneId timezone = getTimezone(document);
        try (CefEvent event = new CefParser(timezone, ignoreEmptyValues).process(line)) {
            event.getRootMappings().forEach(document::setFieldValue);
            event.getCefMappings().forEach((k, v) -> document.setFieldValue(targetField + "." + k, v));
        }
        return document;
    }

    @Override
    public String getType() {
        return TYPE;
    }

    ZoneId getTimezone(IngestDocument document) {
        String value = timezone == null ? null : document.renderTemplate(timezone);
        if (value == null) {
            return ZoneOffset.UTC;

View on GitHub (pinned to db6a809a66)

Solutions

  1. Set ignore_missing: true on the cef processor if missing values are expected — those documents pass through unchanged.
  2. Verify the configured 'field' path matches the document's actual CEF-bearing field.
  3. Ensure upstream processors do not null/remove the field before cef runs.
  4. Place an on_failure pipeline if you prefer to quarantine rather than skip.

Example fix

// before — default config, missing field fails the document
//   { "cef": { "field": "message" } }
//
// after — tolerate absent fields
//   { "cef": { "field": "message", "ignore_missing": true } }
Defensive patterns

Strategy: validation

Validate before calling

// In a pipeline, the simplest guard is ignore_missing. In Java:
boolean shouldRunCef(IngestDocument doc, String field) {
    return doc.hasField(field) && doc.getFieldValue(field, Object.class) != null;
}

Try / catch

{
  "cef": {
    "field": "message",
    "ignore_missing": true,
    "on_failure": [
      { "set": { "field": "ingest.error", "value": "cef-missing-field" } },
      { "redirect": { "pipeline": "quarantine" } }
    ]
  }
}

Prevention

When it happens

Trigger: A document reaches the cef processor whose 'field' (default 'message') is absent, explicitly null, or was dropped by an earlier processor. With ignore_missing=false (default), every such document throws.

Common situations: Documents whose source field name differs from the configured 'field'; conditional pipelines where some events legitimately lack the CEF line; an upstream drop/nullify processor ran before cef; mis-typed field path.

Related errors


AI-assisted analysis of elastic/elasticsearch@db6a809a66 (2026-08-12). Data as JSON: /api/errors/f30f2073a6de1ae3. Report an issue: GitHub.