Skip to content

Commit b876a0f

Browse files
committed
add gzip
1 parent 6fb6d7f commit b876a0f

File tree

8 files changed

+99
-93
lines changed

8 files changed

+99
-93
lines changed

CHANGELOG.md

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,14 @@ All notable changes to this project will be documented in this file.
55

66
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
77

8+
## [0.1.14] 2023-07-07
9+
10+
- Add lots of aws lambda resource spans
11+
- GZIP
12+
813
## [0.1.13] 2023-07-05
914

1015
- Make sure flushing is not canceled
11-
12-
The latest layer is: `arn:aws:lambda:${your-region-here}:097948374213:layer:baselime-node:9`
13-
14-
The latest layer is: `arn:aws:lambda:${your-region-here}:374211872663:layer:baselime-node:17`
15-
16-
17-
The latest layer is: `arn:aws:lambda:${your-region-here}:374211872663:layer:baselime-node:18`
1816

1917
## [0.1.12] 2023-06-28
2018

multiRegion.json

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,16 @@
11
{
22
"regions": [
3-
"eu-west-2"
3+
"eu-west-1",
4+
"eu-west-2",
5+
"us-east-1",
6+
"us-east-2",
7+
"us-west-2",
8+
"eu-central-1",
9+
"ap-south-1",
10+
"ap-southeast-1",
11+
"ap-southeast-2",
12+
"ap-northeast-1",
13+
"ca-central-1"
414
],
515
"output": "md"
616
}

package-lock.json

Lines changed: 30 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@baselime/lambda-node-opentelemetry",
3-
"version": "0.1.13",
3+
"version": "0.1.14",
44
"description": "OpenTelemetry auto tracer for Node.JS based AWS Lambda functions",
55
"keywords": [
66
"nodejs",
@@ -37,6 +37,7 @@
3737
"homepage": "https://github.com/Baselime/tracer-node#readme",
3838
"devDependencies": {
3939
"@tsconfig/node16": "^1.0.4",
40+
"@types/flat": "^5.0.2",
4041
"@types/node": "^20.1.7",
4142
"aws-cdk-lib": "2.79.1",
4243
"constructs": "10.1.156",
@@ -54,6 +55,7 @@
5455
"@opentelemetry/instrumentation-aws-sdk": "^0.34.2",
5556
"@opentelemetry/instrumentation-http": "^0.40.0",
5657
"@opentelemetry/sdk-trace-base": "^1.14.0",
57-
"@opentelemetry/sdk-trace-node": "^1.14.0"
58+
"@opentelemetry/sdk-trace-node": "^1.14.0",
59+
"flat": "^5.0.2"
5860
}
5961
}

src/index.ts

Lines changed: 40 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
import api, { trace, context, propagation, Context as OtelContext, ROOT_CONTEXT, Attributes } from "@opentelemetry/api";
22
import { Handler, DynamoDBStreamEvent, S3Event } from "aws-lambda";
3-
import { flattenObject } from './utils';
3+
import { flatten } from "flat"
44
import { Context } from 'aws-lambda';
55
export * as logger from './logger';
66

7-
declare const global : {
8-
baselimeLambdaFlush: () => Promise<void>;
7+
declare const global: {
8+
baselimeLambdaFlush: () => Promise<void>;
99
}
1010

1111
type FaasDocument = {
@@ -23,17 +23,17 @@ export function wrap(handler: Handler) {
2323
const trigger = triggerToServiceType(service);
2424
const parent = determinParent(event, service);
2525
let document: FaasDocument | null = null;
26-
if(trigger === 'datasource') {
27-
if(service === 'dynamodb') {
26+
if (trigger === 'datasource') {
27+
if (service === 'dynamodb') {
2828
document = getDynamodbStreamDocumentAttributes(event);
29-
}
29+
}
3030

31-
if(service === 's3') {
31+
if (service === 's3') {
3232
document = getS3DocumentAttributes(event);
3333
}
3434
}
3535
const span = tracer.startSpan(lambda_context.functionName, {
36-
attributes: flattenObject({
36+
attributes: flatten({
3737
event,
3838
context: lambda_context,
3939
faas: {
@@ -53,16 +53,16 @@ export function wrap(handler: Handler) {
5353
}, parent);
5454
coldstart = false;
5555
const ctx = trace.setSpan(context.active(), span);
56-
56+
5757
try {
5858
const result = await context.with(ctx, handler as (args: any[]) => any, null, event, lambda_context);
59-
span.setAttributes(flattenObject(result, 'result') as Attributes);
59+
span.setAttributes(flatten({ result }) as Attributes);
6060
span.end();
6161
return result;
6262
} catch (e) {
6363
const err = e as Error;
6464
span.recordException(err);
65-
span.setAttributes(flattenObject({ name: err.name, message: err.message, stack: err.stack }, 'error') as Attributes);
65+
span.setAttributes(flatten({ error: { name: err.name, message: err.message, stack: err.stack } }) as Attributes);
6666
span.end();
6767
throw e
6868
} finally {
@@ -75,35 +75,35 @@ export function wrap(handler: Handler) {
7575

7676

7777
function detectService(event: any) {
78-
if (event.requestContext?.apiId) {
79-
return "api-gateway";
80-
}
78+
if (event.requestContext?.apiId) {
79+
return "api-gateway";
80+
}
8181

82-
if(event.requestContext?.apiId && event.version === "2.0") {
82+
if (event.requestContext?.apiId && event.version === "2.0") {
8383
return "api-gateway-v2";
8484
}
8585

86-
if (event.Records && event.Records[0]?.EventSource === "aws:sns") {
87-
return "sns";
88-
}
86+
if (event.Records && event.Records[0]?.EventSource === "aws:sns") {
87+
return "sns";
88+
}
8989

90-
if(event.Records && event.Records[0]?.eventSource === "aws:sqs") {
90+
if (event.Records && event.Records[0]?.eventSource === "aws:sqs") {
9191
return "sqs";
9292
}
9393

94-
if(event.Records && event.Records[0]?.eventSource === "aws:kinesis") {
94+
if (event.Records && event.Records[0]?.eventSource === "aws:kinesis") {
9595
return "kinesis";
9696
}
9797

98-
if(event.Records && event.Records[0]?.eventSource === "aws:dynamodb") {
98+
if (event.Records && event.Records[0]?.eventSource === "aws:dynamodb") {
9999
return "dynamodb";
100100
}
101101

102-
if(event.Records && event.Records[0]?.eventSource === "aws:s3") {
102+
if (event.Records && event.Records[0]?.eventSource === "aws:s3") {
103103
return "s3";
104104
}
105105

106-
return 'unknown'
106+
return 'unknown'
107107
}
108108

109109
function triggerToServiceType(service: string) {
@@ -127,21 +127,21 @@ function triggerToServiceType(service: string) {
127127
}
128128

129129
const headerGetter = {
130-
keys(carrier: Object): string[] {
131-
return Object.keys(carrier);
132-
},
133-
get(carrier: Record<string, string>, key: string): string | undefined {
134-
return carrier[key];
135-
},
130+
keys(carrier: Object): string[] {
131+
return Object.keys(carrier);
132+
},
133+
get(carrier: Record<string, string>, key: string): string | undefined {
134+
return carrier[key];
135+
},
136136
};
137137

138138
const snsGetter = {
139-
keys(carrier:Object): string[] {
140-
return Object.keys(carrier);
141-
},
142-
get(carrier: Record<string, { Value: string }>, key: string): string | undefined {
143-
return carrier[key]?.Value;
144-
},
139+
keys(carrier: Object): string[] {
140+
return Object.keys(carrier);
141+
},
142+
get(carrier: Record<string, { Value: string }>, key: string): string | undefined {
143+
return carrier[key]?.Value;
144+
},
145145
};
146146

147147
function determinParent(event: any, service: string): OtelContext {
@@ -153,7 +153,7 @@ function determinParent(event: any, service: string): OtelContext {
153153
return extractedContext;
154154
}
155155

156-
if(!parent) {
156+
if (!parent) {
157157
return ROOT_CONTEXT
158158
}
159159
return parent;
@@ -190,7 +190,7 @@ const DynamodbEventToDocumentOperations = {
190190

191191
function getDynamodbStreamDocumentAttributes(event: DynamoDBStreamEvent): FaasDocument {
192192
const unixTime = event?.Records[0]?.dynamodb?.ApproximateCreationDateTime || Date.now() / 1000;
193-
return {
193+
return {
194194
// TODO we could do better for collection (infer from single table design patterns?)
195195
collection: (event?.Records[0]?.eventSourceARN || '').split("/")[1],
196196
name: (event?.Records[0]?.eventSourceARN || '').split("/")[1],
@@ -202,11 +202,11 @@ function getDynamodbStreamDocumentAttributes(event: DynamoDBStreamEvent): FaasDo
202202
function getS3DocumentAttributes(event: S3Event): FaasDocument {
203203
let operation = 'unkown';
204204

205-
if(event.Records[0].eventName.startsWith('ObjectCreated')) {
205+
if (event.Records[0].eventName.startsWith('ObjectCreated')) {
206206
operation = 'insert';
207207
}
208-
209-
if(event.Records[0].eventName.startsWith('ObjectRemoved')) {
208+
209+
if (event.Records[0].eventName.startsWith('ObjectRemoved')) {
210210
operation = 'delete';
211211
}
212212
return {

src/lambda-wrapper.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import api, { Attributes, DiagConsoleLogger, DiagLogLevel } from "@opentelemetry/api";
22
import { BatchSpanProcessor } from "@opentelemetry/sdk-trace-base";
33
import {
4-
OTLPTraceExporter,
4+
OTLPTraceExporter,
55
} from "@opentelemetry/exporter-trace-otlp-http";
66
import { NodeTracerProvider } from "@opentelemetry/sdk-trace-node";
77
import { Instrumentation, registerInstrumentations } from "@opentelemetry/instrumentation";
@@ -10,7 +10,7 @@ import {
1010
} from "@opentelemetry/instrumentation-aws-sdk";
1111
import { HttpInstrumentation } from "@opentelemetry/instrumentation-http";
1212
import { Resource } from "@opentelemetry/resources";
13-
import { flattenObject } from "./utils";
13+
import { flatten } from "flat";
1414
import { existsSync } from "node:fs";
1515
import { arch } from "node:os"
1616
if (process.env.OTEL_LOG_LEVEL === "debug") {
@@ -32,15 +32,15 @@ const provider = new NodeTracerProvider({
3232
let collectorURL: string = process.env.COLLECTOR_URL || "https://otel.baselime.io/v1"
3333

3434
if (existsSync('/opt/extensions/baselime')) {
35-
collectorURL = 'http://sandbox:4323';
35+
collectorURL = 'http://sandbox:4323/otel';
3636
}
3737

3838
enum CompressionAlgorithm {
3939
GZIP = "gzip",
4040
}
4141
const spanProcessor = new BatchSpanProcessor(
4242
new OTLPTraceExporter({
43-
url: `${collectorURL}/${process.env.AWS_LAMBDA_FUNCTION_NAME}`,
43+
url: collectorURL,
4444
compression: CompressionAlgorithm.GZIP,
4545
headers: {
4646
"x-api-key": process.env.BASELIME_KEY || process.env.BASELIME_OTEL_KEY,
@@ -60,7 +60,7 @@ const instrumentations: Instrumentation[] = [
6060
request: response.request,
6161
response: response.data,
6262
};
63-
span.setAttributes(flattenObject(awsApiReqData) as Attributes);
63+
span.setAttributes(flatten(awsApiReqData) as Attributes);
6464
}
6565
},
6666
}),
@@ -71,7 +71,7 @@ registerInstrumentations({
7171
instrumentations
7272
});
7373

74-
declare const global : {
74+
declare const global: {
7575
baselimeLambdaFlush: () => void;
7676
}
7777

@@ -81,7 +81,7 @@ global['baselimeLambdaFlush'] = async () => {
8181

8282
// TODO figure out why this is 20ms on cold start vs 3 ms on regular invocation
8383
await provider.forceFlush();
84-
} catch(e) {
84+
} catch (e) {
8585
console.log(e)
8686
}
8787
};

0 commit comments

Comments
 (0)