fluent/fluentd · error · Fluent::ConfigError

Parameter '#{name}: #{string}' has timestamp placeholders, b

Error message

Parameter '#{name}: #{string}' has timestamp placeholders, but chunk key 'time' is not configured

What it means

The parameter string contains strftime time directives (e.g. `%Y%m%d`) but the buffer does not chunk on `time` — `time` is not in the chunk keys, so `@chunk_key_time`/timekey is unset. Directives would never be expanded per-chunk (extract_placeholders only formats time when `@chunk_key_time` is set), leaving literal `%Y...` in paths, so `validate_time!` (`sec && !timekey`) rejects the mismatch.

Source

Thrown at lib/fluent/plugin/output.rb:736

        def validate!
          case @type
          when :time then validate_time!
          when :tag  then validate_tag!
          when :keys then validate_keys!
          end
        end

        def validate_time!
          sec = @argument[:sec]
          title = @argument[:title]
          example = @argument[:example]
          timekey = @argument[:timekey]
          if !sec && timekey
            raise Fluent::ConfigError, "Parameter '#{name}: #{string}' doesn't have timestamp placeholders for timekey #{timekey.to_i}"
          end
          if sec && !timekey
            raise Fluent::ConfigError, "Parameter '#{name}: #{string}' has timestamp placeholders, but chunk key 'time' is not configured"
          end
          if sec && timekey && timekey < sec
            raise Fluent::ConfigError, "Parameter '#{name}: #{string}' doesn't have timestamp placeholder for #{title}('#{example}') for timekey #{timekey.to_i}"
          end
        end

        def validate_tag!
          parts = @argument[:parts]
          tagkey = @argument[:tagkey]
          if tagkey && parts.empty?
            raise Fluent::ConfigError, "Parameter '#{name}: #{string}' doesn't have tag placeholder"
          end
          if !tagkey && !parts.empty?
            raise Fluent::ConfigError, "Parameter '#{name}: #{string}' has tag placeholders, but chunk key 'tag' is not configured"
          end
        end

        def validate_keys!

View on GitHub (pinned to dd45c6e18d)

Solutions

  1. Add `time` to the chunk keys and set a matching `timekey`: `<buffer time,tag>` + `timekey 1d`
  2. Or strip the time directives from the parameter if time chunking is not intended
  3. Remember `timekey` is required once `time` becomes a chunk key, or error 204 follows

Example fix

# before
<buffer tag>
  @type file
</buffer>
path /logs/${tag}/app.%Y%m%d.log

# after
<buffer time,tag>
  @type file
  timekey 1d
</buffer>
path /logs/${tag}/app.%Y%m%d.log
Defensive patterns

Strategy: validation

Validate before calling

fluentd --dry-run -c /etc/fluent/fluent.conf

Prevention

When it happens

Trigger: `path /logs/app.%Y%m%d.log` with `<buffer tag>` or `<buffer tenant>` (no `time` key); any placeholder-validated parameter mixing time directives with a non-time buffer configuration.

Common situations: Removing `time` from chunk keys (or the whole `<buffer>` block defaulting to tag-only) while keeping a dated path template; copy/pasting a dated path into a tag-partitioned output.

Related errors


AI-assisted analysis of fluent/fluentd@dd45c6e18d (2026-08-21). Data as JSON: /api/errors/da35fcf6b2d2ca0e. Report an issue: GitHub.