otelcol.connector.spanlogs
otelcol.connector.spanlogs accepts traces telemetry data from other otelcol components and outputs logs telemetry data for each span, root, or process.
This allows you to automatically build a mechanism for trace discovery.
Note
otelcol.connector.spanlogsis a custom component unrelated to any components from the OpenTelemetry Collector. It’s based on theautomatic_loggingcomponent in the traces subsystem of Grafana Agent Static.
You can specify multiple otelcol.connector.spanlogs components by giving them different labels.
Usage
otelcol.connector.spanlogs "<LABEL>" {
output {
logs = [...]
}
}Arguments
You can use the following arguments with otelcol.connector.spanlogs:
The values listed in labels should be the values of either span, process, or event attributes.
Warning
Setting either
spansoreventstotruecould lead to a high volume of logs.
Blocks
You can use the following blocks with otelcol.connector.spanlogs:
output
RequiredThe output block configures a set of components to forward resulting telemetry data to.
The following arguments are supported:
You must specify the output block, but all its arguments are optional.
By default, telemetry data is dropped.
Configure the logs argument accordingly to send telemetry data to other components, .
overrides
The overrides block configures overrides for keys that will be logged in the body of the log line.
The following arguments are supported:
Exported fields
The following fields are exported and can be referenced by other components:
input accepts otelcol.Consumer data for any telemetry signal (metrics, logs, or traces).
Component health
otelcol.connector.spanlogs is only reported as unhealthy if given an invalid configuration.
Debug information
otelcol.connector.spanlogs doesn’t expose any component-specific debug information.
Example
The following configuration sends logs derived from spans to Loki.
Additionally, otelcol.processor.attributes is configured with a “hint” so that otelcol.exporter.loki promotes the span’s “attribute1” attribute to a Loki label.
otelcol.receiver.otlp "default" {
grpc {}
output {
traces = [otelcol.connector.spanlogs.default.input]
}
}
otelcol.connector.spanlogs "default" {
spans = true
roots = true
processes = true
events = true
labels = ["attribute1", "res_attribute1"]
span_attributes = ["attribute1"]
process_attributes = ["res_attribute1"]
event_attributes = ["log.severity", "log.message"]
output {
logs = [otelcol.processor.attributes.default.input]
}
}
otelcol.processor.attributes "default" {
action {
key = "loki.attribute.labels"
action = "insert"
value = "attribute1"
}
output {
logs = [otelcol.exporter.loki.default.input]
}
}
otelcol.exporter.loki "default" {
forward_to = [loki.write.local.receiver]
}
loki.write "local" {
endpoint {
url = "loki:3100"
}
}For an input trace like this:
{
"resourceSpans": [
{
"resource": {
"attributes": [
{
"key": "service.name",
"value": { "stringValue": "TestSvcName" }
},
{
"key": "res_attribute1",
"value": { "intValue": "78" }
},
{
"key": "unused_res_attribute1",
"value": { "stringValue": "str" }
},
{
"key": "res_account_id",
"value": { "intValue": "2245" }
}
]
},
"scopeSpans": [
{
"spans": [
{
"trace_id": "7bba9f33312b3dbb8b2c2c62bb7abe2d",
"span_id": "086e83747d0e381e",
"name": "TestSpan",
"attributes": [
{
"key": "attribute1",
"value": { "intValue": "78" }
},
{
"key": "unused_attribute1",
"value": { "intValue": "78" }
},
{
"key": "account_id",
"value": { "intValue": "2245" }
}
],
"events": [
{
"name": "log",
"attributes": [
{
"key": "log.severity",
"value": { "stringValue": "INFO" }
},
{
"key": "log.message",
"value": { "stringValue": "TestLogMessage" }
}
]
}
]
}
]
}
]
}
]
}The output log coming out of otelcol.connector.spanlogs looks like this:
{
"resourceLogs": [
{
"scopeLogs": [
{
"log_records": [
{
"body": {
"stringValue": "span=TestSpan dur=0ns attribute1=78 svc=TestSvcName res_attribute1=78 tid=7bba9f33312b3dbb8b2c2c62bb7abe2d"
},
"attributes": [
{
"key": "traces",
"value": { "stringValue": "span" }
},
{
"key": "attribute1",
"value": { "intValue": "78" }
},
{
"key": "res_attribute1",
"value": { "intValue": "78" }
}
]
},
{
"body": {
"stringValue": "span=TestSpan dur=0ns attribute1=78 svc=TestSvcName res_attribute1=78 tid=7bba9f33312b3dbb8b2c2c62bb7abe2d"
},
"attributes": [
{
"key": "traces",
"value": { "stringValue": "root" }
},
{
"key": "attribute1",
"value": { "intValue": "78" }
},
{
"key": "res_attribute1",
"value": { "intValue": "78" }
}
]
},
{
"body": {
"stringValue": "svc=TestSvcName res_attribute1=78 tid=7bba9f33312b3dbb8b2c2c62bb7abe2d"
},
"attributes": [
{
"key": "traces",
"value": { "stringValue": "process" }
},
{
"key": "res_attribute1",
"value": { "intValue": "78" }
}
]
},
{
"body": { "stringValue": "span=TestSpan dur=0ns attribute1=78 svc=TestSvcName res_attribute1=78 tid=7bba9f33312b3dbb8b2c2c62bb7abe2d log.severity=INFO log.message=TestLogMessage" },
"attributes": [
{
"key": "traces",
"value": { "stringValue": "event" }
},
{
"key": "attribute1",
"value": { "intValue": "78" }
},
{
"key": "res_attribute1",
"value": { "intValue": "78" }
},
{
"key": "log.severity",
"value": { "stringValue": "INFO" }
},
{
"key": "log.message",
"value": { "stringValue": "TestLogMessage" }
}
]
}
]
}
]
}
]
}Compatible components
otelcol.connector.spanlogs can accept arguments from the following components:
- Components that export OpenTelemetry
otelcol.Consumer
otelcol.connector.spanlogs has exports that can be consumed by the following components:
- Components that consume OpenTelemetry
otelcol.Consumer
Note
Connecting some components may not be sensible or components may require further configuration to make the connection work correctly. Refer to the linked documentation for more details.



