Skip to content

Commit 06c7ec7

Browse files
srikanthccvdyladan
andauthored
Update Jaeger exporter span transformation (#1914)
Co-authored-by: Daniel Dyla <[email protected]>
1 parent 11d9b19 commit 06c7ec7

File tree

2 files changed

+50
-54
lines changed

2 files changed

+50
-54
lines changed

packages/opentelemetry-exporter-jaeger/src/transform.ts

Lines changed: 23 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -50,19 +50,23 @@ export function spanToThrift(span: ReadableSpan): ThriftSpan {
5050
const tags = Object.keys(span.attributes).map(
5151
(name): Tag => ({ key: name, value: toTagValue(span.attributes[name]) })
5252
);
53-
tags.push({ key: 'status.code', value: span.status.code });
54-
tags.push({ key: 'status.name', value: SpanStatusCode[span.status.code] });
55-
if (span.status.message) {
56-
tags.push({ key: 'status.message', value: span.status.message });
53+
if (span.status.code !== SpanStatusCode.UNSET) {
54+
tags.push({
55+
key: 'otel.status_code',
56+
value: SpanStatusCode[span.status.code],
57+
});
58+
if (span.status.message) {
59+
tags.push({ key: 'otel.status_description', value: span.status.message });
60+
}
5761
}
5862
// Ensure that if SpanStatus.Code is ERROR, that we set the "error" tag on the
5963
// Jaeger span.
6064
if (span.status.code === SpanStatusCode.ERROR) {
6165
tags.push({ key: 'error', value: true });
6266
}
6367

64-
if (span.kind !== undefined) {
65-
tags.push({ key: 'span.kind', value: SpanKind[span.kind] });
68+
if (span.kind !== undefined && span.kind !== SpanKind.INTERNAL) {
69+
tags.push({ key: 'span.kind', value: SpanKind[span.kind].toLowerCase() });
6670
}
6771
Object.keys(span.resource.attributes).forEach(name =>
6872
tags.push({
@@ -71,11 +75,22 @@ export function spanToThrift(span: ReadableSpan): ThriftSpan {
7175
})
7276
);
7377

78+
if (span.instrumentationLibrary) {
79+
tags.push({
80+
key: 'otel.library.name',
81+
value: toTagValue(span.instrumentationLibrary.name),
82+
});
83+
tags.push({
84+
key: 'otel.library.version',
85+
value: toTagValue(span.instrumentationLibrary.version),
86+
});
87+
}
88+
7489
const spanTags: ThriftTag[] = ThriftUtils.getThriftTags(tags);
7590

7691
const logs = span.events.map(
7792
(event): Log => {
78-
const fields: Tag[] = [{ key: 'message.id', value: event.name }];
93+
const fields: Tag[] = [{ key: 'event', value: event.name }];
7994
const attrs = event.attributes;
8095
if (attrs) {
8196
Object.keys(attrs).forEach(attr =>
@@ -110,7 +125,7 @@ function spanLinksToThriftRefs(
110125
return links
111126
.map((link): ThriftReference | null => {
112127
if (link.context.spanId === parentSpanId) {
113-
const refType = ThriftReferenceType.CHILD_OF;
128+
const refType = ThriftReferenceType.FOLLOWS_FROM;
114129
const traceId = link.context.traceId;
115130
const traceIdHigh = Utils.encodeInt64(traceId.slice(0, 16));
116131
const traceIdLow = Utils.encodeInt64(traceId.slice(16));

packages/opentelemetry-exporter-jaeger/test/transform.test.ts

Lines changed: 27 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -104,17 +104,7 @@ describe('transform', () => {
104104
Utils.encodeInt64(hrTimeToMicroseconds(readableSpan.startTime))
105105
);
106106
assert.strictEqual(thriftSpan.tags.length, 9);
107-
const [
108-
tag1,
109-
tag2,
110-
tag3,
111-
tag4,
112-
tag5,
113-
tag6,
114-
tag7,
115-
tag8,
116-
tag9,
117-
] = thriftSpan.tags;
107+
const [tag1, tag2, tag3, tag4, tag5, tag6, tag7] = thriftSpan.tags;
118108
assert.strictEqual(tag1.key, 'testBool');
119109
assert.strictEqual(tag1.vType, 'BOOL');
120110
assert.strictEqual(tag1.vBool, true);
@@ -124,31 +114,25 @@ describe('transform', () => {
124114
assert.strictEqual(tag3.key, 'testNum');
125115
assert.strictEqual(tag3.vType, 'DOUBLE');
126116
assert.strictEqual(tag3.vDouble, 3.142);
127-
assert.strictEqual(tag4.key, 'status.code');
128-
assert.strictEqual(tag4.vType, 'DOUBLE');
129-
assert.strictEqual(tag4.vDouble, api.SpanStatusCode.OK);
130-
assert.strictEqual(tag5.key, 'status.name');
117+
assert.strictEqual(tag4.key, 'otel.status_code');
118+
assert.strictEqual(tag4.vType, 'STRING');
119+
assert.strictEqual(tag4.vStr, 'OK');
120+
assert.strictEqual(tag5.key, 'service');
131121
assert.strictEqual(tag5.vType, 'STRING');
132-
assert.strictEqual(tag5.vStr, 'OK');
133-
assert.strictEqual(tag6.key, 'span.kind');
134-
assert.strictEqual(tag6.vType, 'STRING');
135-
assert.strictEqual(tag6.vStr, 'INTERNAL');
136-
assert.strictEqual(tag7.key, 'service');
137-
assert.strictEqual(tag7.vType, 'STRING');
138-
assert.strictEqual(tag7.vStr, 'ui');
139-
assert.strictEqual(tag8.key, 'version');
140-
assert.strictEqual(tag8.vType, 'DOUBLE');
141-
assert.strictEqual(tag8.vDouble, 1);
142-
assert.strictEqual(tag9.key, 'cost');
143-
assert.strictEqual(tag9.vType, 'DOUBLE');
144-
assert.strictEqual(tag9.vDouble, 112.12);
122+
assert.strictEqual(tag5.vStr, 'ui');
123+
assert.strictEqual(tag6.key, 'version');
124+
assert.strictEqual(tag6.vType, 'DOUBLE');
125+
assert.strictEqual(tag6.vDouble, 1);
126+
assert.strictEqual(tag7.key, 'cost');
127+
assert.strictEqual(tag7.vType, 'DOUBLE');
128+
assert.strictEqual(tag7.vDouble, 112.12);
145129
assert.strictEqual(thriftSpan.references.length, 0);
146130

147131
assert.strictEqual(thriftSpan.logs.length, 1);
148132
const [log1] = thriftSpan.logs;
149133
assert.strictEqual(log1.fields.length, 2);
150134
const [field1, field2] = log1.fields;
151-
assert.strictEqual(field1.key, 'message.id');
135+
assert.strictEqual(field1.key, 'event');
152136
assert.strictEqual(field1.vType, 'STRING');
153137
assert.strictEqual(field1.vStr, 'something happened');
154138
assert.strictEqual(field2.key, 'error');
@@ -198,23 +182,20 @@ describe('transform', () => {
198182
assert.deepStrictEqual(thriftSpan.parentSpanId, ThriftUtils.emptyBuffer);
199183
assert.deepStrictEqual(thriftSpan.flags, 1);
200184
assert.strictEqual(thriftSpan.references.length, 0);
201-
assert.strictEqual(thriftSpan.tags.length, 5);
202-
const [tag1, tag2, tag3, tag4, tag5] = thriftSpan.tags;
203-
assert.strictEqual(tag1.key, 'status.code');
204-
assert.strictEqual(tag1.vType, 'DOUBLE');
205-
assert.strictEqual(tag1.vDouble, 2);
206-
assert.strictEqual(tag2.key, 'status.name');
185+
assert.strictEqual(thriftSpan.tags.length, 6);
186+
const [tag1, tag2, tag3, tag4] = thriftSpan.tags;
187+
assert.strictEqual(tag1.key, 'otel.status_code');
188+
assert.strictEqual(tag1.vType, 'STRING');
189+
assert.strictEqual(tag1.vStr, 'ERROR');
190+
assert.strictEqual(tag2.key, 'otel.status_description');
207191
assert.strictEqual(tag2.vType, 'STRING');
208-
assert.strictEqual(tag2.vStr, 'ERROR');
209-
assert.strictEqual(tag3.key, 'status.message');
210-
assert.strictEqual(tag3.vType, 'STRING');
211-
assert.strictEqual(tag3.vStr, 'data loss');
212-
assert.strictEqual(tag4.key, 'error');
213-
assert.strictEqual(tag4.vType, 'BOOL');
214-
assert.strictEqual(tag4.vBool, true);
215-
assert.strictEqual(tag5.key, 'span.kind');
216-
assert.strictEqual(tag5.vType, 'STRING');
217-
assert.strictEqual(tag5.vStr, 'CLIENT');
192+
assert.strictEqual(tag2.vStr, 'data loss');
193+
assert.strictEqual(tag3.key, 'error');
194+
assert.strictEqual(tag3.vType, 'BOOL');
195+
assert.strictEqual(tag3.vBool, true);
196+
assert.strictEqual(tag4.key, 'span.kind');
197+
assert.strictEqual(tag4.vType, 'STRING');
198+
assert.strictEqual(tag4.vStr, 'client');
218199
assert.strictEqual(thriftSpan.logs.length, 0);
219200
});
220201

@@ -261,7 +242,7 @@ describe('transform', () => {
261242
assert.strictEqual(ref1.traceIdLow.toString('hex'), '92b449d5929fda1b');
262243
assert.strictEqual(ref1.traceIdHigh.toString('hex'), 'a4cda95b652f4a15');
263244
assert.strictEqual(ref1.spanId.toString('hex'), '3e0c63257de34c92');
264-
assert.strictEqual(ref1.refType, ThriftReferenceType.CHILD_OF);
245+
assert.strictEqual(ref1.refType, ThriftReferenceType.FOLLOWS_FROM);
265246
});
266247

267248
it('should left pad trace ids', () => {

0 commit comments

Comments
 (0)