For the complete documentation index, see llms.txt. Markdown versions are available by appending .md to documentation URLs.

Send Fluent Bit Logs to SigNoz from VMs and Kubernetes

SigNoz Cloud - This page applies to SigNoz Cloud editions.
Self-Host - This page applies to self-hosted SigNoz editions.

Overview

This guide sends the logs that Fluent Bit collects to SigNoz. Fluent Bit sends the logs with its forward output to the OpenTelemetry Collector. The Collector receives them with the fluentforward receiver and exports them to SigNoz. On Kubernetes, the Collector also turns the pod metadata that Fluent Bit adds into separate k8s.* attributes.

Prerequisites

  • Fluent Bit. This guide uses Fluent Bit v5.1.5.
  • An instance of SigNoz (either Cloud or Self-Hosted).
  • The OpenTelemetry Collector on a VM, or the k8s-infra chart on Kubernetes.

Send Fluent Bit logs to SigNoz

Step 1. Add the fluentforward receiver to the Collector

Add the fluentforward receiver to the receivers section of the Collector configuration (/etc/otelcol-contrib/config.yaml). Then add it to the logs pipeline:

config.yaml
receivers:
  otlp:
    protocols:
      grpc:
        endpoint: 0.0.0.0:4317
      http:
        endpoint: 0.0.0.0:4318
  # On Collector v0.151.0 and newer, use "fluent_forward" to avoid a deprecation warning.
  fluentforward:
    endpoint: 0.0.0.0:24224
service:
  pipelines:
    logs:
      receivers: [otlp, fluentforward]
      processors: [batch, resourcedetection]
      exporters: [otlphttp]

The receiver listens on port 24224 for the Fluent Forward protocol. Keep the other sections of the file from the install guide.

Restart the Collector:

sudo systemctl restart otelcol-contrib

The path and the command apply to the DEB and RPM packages. For macOS and Windows, use the configuration path and the restart steps in the install guide.

Step 2. Add a forward output to Fluent Bit

Add a forward output to the Fluent Bit configuration (fluent-bit.yaml):

fluent-bit.yaml
pipeline:
  outputs:
    - name: forward
      match: '*'
      host: <collector-host>
      port: 24224
      retain_metadata_in_forward_mode: false

Verify these values:

  • <collector-host>: The host where the Collector runs. Use 127.0.0.1 when Fluent Bit runs on the same host.

Set retain_metadata_in_forward_mode to false. Fluent Bit v5.0.4 and newer set it to true by default, and the fluentforward receiver cannot read that format. The receiver then drops every log, and Fluent Bit still reports a successful flush.

Restart Fluent Bit so that it loads the new output.

If your logs carry trace_id and span_id fields, the Collector stores them as plain attributes. Move them to the trace context of the log, so that SigNoz links each log to its trace.

Add a transform processor to the processors section of the Collector configuration:

config.yaml
processors:
  transform/trace_context:
    error_mode: ignore
    log_statements:
      - set(log.trace_id.string, log.attributes["trace_id"]) where log.attributes["trace_id"] != nil
      - set(log.span_id.string, log.attributes["span_id"]) where log.attributes["span_id"] != nil
      - delete_key(log.attributes, "trace_id")
      - delete_key(log.attributes, "span_id")

Add the processor to the start of the logs pipeline:

config.yaml
service:
  pipelines:
    logs:
      receivers: [otlp, fluentforward]
      processors: [transform/trace_context, batch, resourcedetection]
      exporters: [otlphttp]

On Kubernetes, add the same processor under otelAgent.config.processors and to the logs pipeline in override-values.yaml.

Send logs without a Collector (Optional)

Fluent Bit can send logs to SigNoz Cloud over OTLP with its opentelemetry output. Use this path when you do not run a Collector. The Kubernetes mapping above needs the Collector, so this path fits a VM or Docker host. This path sends logs to SigNoz Cloud. For Self-Hosted SigNoz, use the Collector path.

fluent-bit.yaml
pipeline:
  inputs:
    - name: tail
      path: <log-file-path>
      processors:
        logs:
          - name: opentelemetry_envelope
          - name: content_modifier
            context: otel_resource_attributes
            action: upsert
            key: service.name
            value: <service-name>
  outputs:
    - name: opentelemetry
      match: '*'
      host: ingest.<region>.signoz.cloud
      port: 443
      tls: on
      tls.verify: on
      logs_uri: /v1/logs
      header: signoz-ingestion-key <your-ingestion-key>

Verify these values:

  • <log-file-path>: The log file that Fluent Bit reads, for example /var/log/app/*.log.
  • <service-name>: The name that SigNoz shows for these logs. The opentelemetry_envelope and content_modifier processors set it as the service.name resource attribute.
  • <region>: Your SigNoz Cloud region.
  • <your-ingestion-key>: Your SigNoz ingestion key.

Validate

  1. In SigNoz, open Logs > Logs Explorer.
  2. Filter by fluent.tag EXISTS. The fluentforward receiver adds the Fluent Bit tag of each log as the fluent.tag attribute. If you send logs without a Collector, filter by service.name instead.
  3. On Kubernetes, open a log and make sure that it has the k8s.pod.name, k8s.namespace.name, and k8s.container.name resource attributes, and no kubernetes attribute.
Logs Explorer filtered by fluent.tag EXISTS, with namespace and pod name columns for Fluent Bit logs from Kubernetes
Fluent Bit logs from Kubernetes, with the namespace and pod name as separate attributes

Troubleshooting

Fluent Bit reports a successful flush, but no logs arrive

Fluent Bit v5.0.4 and newer send metadata in forward mode by default. The fluentforward receiver cannot read it and drops the logs. It logs the error only at the debug level:

failed to parse forward mode e: unknown type of value: [... map[]] at Time at Entries/0

Set retain_metadata_in_forward_mode: false in the forward output, then restart Fluent Bit.

Fluent Bit cannot connect to the Collector

Fluent Bit logs no upstream connections available.

  1. Make sure that the Collector runs and that the logs pipeline lists the fluentforward receiver.
  2. Make sure that the host and port of the forward output match the Collector. On Kubernetes, run kubectl get svc -n <namespace> and make sure that the agent Service lists port 24224.

Kubernetes metadata stays in one attribute

Logs show a single kubernetes attribute when the transform/fluentbit_k8s processor does not run. Make sure that the logs pipeline in override-values.yaml lists transform/fluentbit_k8s and groupbyattrs/fluentbit_k8s, then run helm upgrade again.

Each Kubernetes log appears twice

The k8s-infra agent and Fluent Bit both read the container log files. Set presets.logsCollection.enabled to false in override-values.yaml, then run helm upgrade again.

Next steps

Get Help

If you need help with the steps in this topic, please reach out to us on SigNoz Community Slack. If you are a SigNoz Cloud user, please use in product chat support located at the bottom right corner of your SigNoz instance or contact us at cloud-support@signoz.io.

Is this page helpful

Last updated—October 23, 2026

Edit on GitHub