Skip to content

Commit 241167a

Browse files
CemDKjriguera
andcommitted
[receiver/cloudfoundryreceiver] WIP: Add functionality to fill trace id and span id from RTR Logs
Co-authored-by: Jose Riguera <[email protected]>
1 parent 05c6974 commit 241167a

File tree

1 file changed

+49
-1
lines changed

1 file changed

+49
-1
lines changed

receiver/cloudfoundryreceiver/converter.go

+49-1
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,14 @@
44
package cloudfoundryreceiver // import "github.com/open-telemetry/opentelemetry-collector-contrib/receiver/cloudfoundryreceiver"
55

66
import (
7+
"strings"
78
"time"
89

910
"code.cloudfoundry.org/go-loggregator/rpc/loggregator_v2"
1011
"go.opentelemetry.io/collector/pdata/pcommon"
1112
"go.opentelemetry.io/collector/pdata/plog"
1213
"go.opentelemetry.io/collector/pdata/pmetric"
14+
"go.opentelemetry.io/otel/trace"
1315
)
1416

1517
const (
@@ -47,9 +49,23 @@ func convertEnvelopeToLogs(envelope *loggregator_v2.Envelope, logSlice plog.LogR
4749
// TODO: review log attributes and tags from the envelope
4850
log := logSlice.AppendEmpty()
4951
log.SetTimestamp(pcommon.Timestamp(envelope.GetTimestamp()))
52+
log.SetObservedTimestamp(pcommon.NewTimestampFromTime(startTime))
5053
log.Body().SetStr(string(envelope.GetLog().GetPayload()))
51-
log.SetSeverityNumber(plog.SeverityNumber(envelope.GetLog().GetType()))
54+
switch envelope.GetLog().GetType() {
55+
case loggregator_v2.Log_OUT:
56+
log.SetSeverityText(plog.SeverityNumberInfo.String())
57+
log.SetSeverityNumber(plog.SeverityNumberInfo)
58+
case loggregator_v2.Log_ERR:
59+
log.SetSeverityText(plog.SeverityNumberError.String())
60+
log.SetSeverityNumber(plog.SeverityNumberError)
61+
}
62+
5263
copyEnvelopeAttributes(log.Attributes(), envelope)
64+
65+
if value, found := log.Attributes().Get("org.cloudfoundry.source_type"); found && value.AsString() == "RTR" {
66+
parseLogTracedID(log)
67+
}
68+
5369
}
5470
}
5571

@@ -66,3 +82,35 @@ func copyEnvelopeAttributes(attributes pcommon.Map, envelope *loggregator_v2.Env
6682
attributes.PutStr(attributeNamePrefix+"instance_id", envelope.InstanceId)
6783
}
6884
}
85+
86+
func parseLogTracedID(log plog.LogRecord) error {
87+
s := log.Body().AsString()
88+
quoted := false
89+
a := strings.FieldsFunc(s, func(r rune) bool {
90+
if r == '"' {
91+
quoted = !quoted
92+
}
93+
return !quoted && r == ' '
94+
})
95+
96+
traceIDStr := strings.Split(a[21], ":")[1]
97+
traceIDStr = strings.Trim(traceIDStr, "\"")
98+
99+
spanIDStr := strings.Split(a[22], ":")[1]
100+
spanIDStr = strings.Trim(spanIDStr, "\"")
101+
102+
traceID, err := trace.TraceIDFromHex(traceIDStr)
103+
if err != nil {
104+
return err
105+
}
106+
107+
spanID, err := trace.SpanIDFromHex(spanIDStr)
108+
if err != nil {
109+
return err
110+
}
111+
112+
log.SetTraceID([16]byte(traceID))
113+
log.SetSpanID([8]byte(spanID))
114+
115+
return nil
116+
}

0 commit comments

Comments
 (0)