Files
Andrzej StencelandGitHub 7e1ed34bbf [exporter/debug] display resource and scope in normal verbosity (#13011)
#### Description

Adds displaying of resource and scope details in `normal` verbosity.

Each resource is represented with one line showing the resource's
details:
- schema URL
- resource attributes

which looks like `ResourceTraces #0 [resource-schema-url]
resource_attr1=value1 attr2=value2`.

Each instrumentation scope is represented by one line showing the
scope's details:
- scope name
- scope version
- scope schema URL
- scope attributes

which looks like `ScopeTraces #0 scope-name@scope-version
[scope-schema-url] scope_attr1=value1 attr2=value2`.

Before:

```console
2025-05-09T19:57:16.332+0200    info    Traces  {"resource": {}, "otelcol.component.id": "debug/normal", "otelcol.component.kind": "exporter", "otelcol.signal": "traces", "resource spans": 1, "spans": 2}
2025-05-09T19:57:16.332+0200    info    okey-dokey-0 ab1030bd4ee554af936542b01d7b4807 1d8c93663d043aa8 net.sock.peer.addr=1.2.3.4 peer.service=telemetrygen-client
lets-go ab1030bd4ee554af936542b01d7b4807 0d238e8a2f97733f net.sock.peer.addr=1.2.3.4 peer.service=telemetrygen-server
        {"resource": {}, "otelcol.component.id": "debug/normal", "otelcol.component.kind": "exporter", "otelcol.signal": "traces"}
```

After:

```console
2025-05-09T19:57:16.332+0200    info    Traces  {"resource": {}, "otelcol.component.id": "debug/normal", "otelcol.component.kind": "exporter", "otelcol.signal": "traces", "resource spans": 1, "spans": 2}
2025-05-09T19:57:16.332+0200    info    ResourceTraces #0 [https://opentelemetry.io/schemas/1.25.0] service.name=telemetrygen
ScopeTraces #0 telemetrygen
okey-dokey-0 ab1030bd4ee554af936542b01d7b4807 1d8c93663d043aa8 net.sock.peer.addr=1.2.3.4 peer.service=telemetrygen-client
lets-go ab1030bd4ee554af936542b01d7b4807 0d238e8a2f97733f net.sock.peer.addr=1.2.3.4 peer.service=telemetrygen-server
        {"resource": {}, "otelcol.component.id": "debug/normal", "otelcol.component.kind": "exporter", "otelcol.signal": "traces"}
```

#### Link to tracking issue

Fixes
https://github.com/open-telemetry/opentelemetry-collector/issues/10515

#### Testing

Updated unit tests.

#### Documentation

Updated example in documentation.
2025-05-21 13:44:35 +00:00

59 lines
1.8 KiB
Go

// Copyright The OpenTelemetry Authors
// SPDX-License-Identifier: Apache-2.0
package normal // import "go.opentelemetry.io/collector/exporter/debugexporter/internal/normal"
import (
"bytes"
"fmt"
"strings"
"go.opentelemetry.io/collector/pdata/ptrace"
)
type normalTracesMarshaler struct{}
// Ensure normalTracesMarshaller implements interface ptrace.Marshaler
var _ ptrace.Marshaler = normalTracesMarshaler{}
// NewNormalTracesMarshaler returns a ptrace.Marshaler for normal verbosity. It writes one line of text per log record
func NewNormalTracesMarshaler() ptrace.Marshaler {
return normalTracesMarshaler{}
}
func (normalTracesMarshaler) MarshalTraces(md ptrace.Traces) ([]byte, error) {
var buffer bytes.Buffer
for i := 0; i < md.ResourceSpans().Len(); i++ {
resourceTraces := md.ResourceSpans().At(i)
buffer.WriteString(fmt.Sprintf("ResourceTraces #%d%s%s\n", i, writeResourceDetails(resourceTraces.SchemaUrl()), writeAttributesString(resourceTraces.Resource().Attributes())))
for j := 0; j < resourceTraces.ScopeSpans().Len(); j++ {
scopeTraces := resourceTraces.ScopeSpans().At(j)
buffer.WriteString(fmt.Sprintf("ScopeTraces #%d%s%s\n", i, writeScopeDetails(scopeTraces.Scope().Name(), scopeTraces.Scope().Version(), scopeTraces.SchemaUrl()), writeAttributesString(scopeTraces.Scope().Attributes())))
for k := 0; k < scopeTraces.Spans().Len(); k++ {
span := scopeTraces.Spans().At(k)
buffer.WriteString(span.Name())
buffer.WriteString(" ")
buffer.WriteString(span.TraceID().String())
buffer.WriteString(" ")
buffer.WriteString(span.SpanID().String())
if span.Attributes().Len() > 0 {
spanAttributes := writeAttributes(span.Attributes())
buffer.WriteString(" ")
buffer.WriteString(strings.Join(spanAttributes, " "))
}
buffer.WriteString("\n")
}
}
}
return buffer.Bytes(), nil
}