OpenTelemetry Envelope

The OpenTelemetry Envelope processor is used to transform your data to be compatible with the OpenTelemetry Log schema. If your data was not generated by OpenTelemetry input and your backend or destination for your logs expects to be in an OpenTelemetry schema.

Note: Both processors and this specific component can be enabled only by using the YAML configuration format. Classic mode configuration format doesn't support processors.

Configuration Parameters

The processor does not provide any extra configuration parameter, it can be used directly in your processors Yaml directive.

Usage Example

In this example, we will use the Dummy input plugin to generate a sample message per second, right after is created the processor opentelemetry_envelope is used to transform the data to be compatible with the OpenTelemetry Log schema. The output is sent to the standard output and also to an OpenTelemetry collector which is receiving data in port 4318.

Example Fluent Bit and OpenTelemetry collector configuration files:

service:
    flush: 1
    log_level: info

pipeline:
    inputs:
        - name: dummy
          dummy: '{"message": "Hello World"}'

          processors:
              logs:
                  - name: opentelemetry_envelope

    outputs:
        - name : stdout
          match: '*'

        - name: opentelemetry
          match: '*'
          host: 127.0.0.1
          port: 4318

You will notice in the standard output of Fluent Bit will print the raw representation of the schema, however, the OpenTelemetry collector will receive the data in the OpenTelemetry Log schema.

Inspecting the output file out.json you will see the data in the OpenTelemetry Log schema:

{
  "resourceLogs": [
    {
      "resource": {},
      "scopeLogs": [
        {
          "scope": {},
          "logRecords": [
            {
              "timeUnixNano": "1722904188085758000",
              "body": {
                "stringValue": "dummy"
              },
              "traceId": "",
              "spanId": ""
            }
          ]
        }
      ]
    }
  ]
}

While OpenTelemetry Envelope enrich your logs with the Schema, you might be interested into take a step further and use the Content Modifier processor to modify the content of your logs. Here is a quick example that will allow you to add some resource and scope attributes to your logs:

service:
    flush: 1
    log_level: info

pipeline:
    inputs:
        - name: dummy
          dummy: '{"message": "Hello World"}'

          processors:
              logs:
                  - name: opentelemetry_envelope

                  - name: content_modifier
                    context: otel_resource_attributes
                    action: upsert
                    key: service.name
                    value: my-service

    outputs:
        - name : stdout
          match: '*'

        - name: opentelemetry
          match: '*'
          host: 127.0.0.1
          port: 4318

The collector JSON output will look like this:

{
  "resourceLogs": [
    {
      "resource": {
        "attributes": [
          {
            "key": "service.name",
            "value": {
              "stringValue": "my-service"
            }
          }
        ]
      },
      "scopeLogs": [
        {
          "scope": {},
          "logRecords": [
            {
              "timeUnixNano": "1722904465173450000",
              "body": {
                "stringValue": "Hello World"
              },
              "traceId": "",
              "spanId": ""
            }
          ]
        }
      ]
    }
  ]
}

For more details about further processing, read the Content Modifier processor documentation.

Last updated

Was this helpful?

OSZAR »