AWS Lambda
API GW v1/v2Serverless observability for API Gateway and Function URL handlers.
Wraps your Lambda handler function. Supports API Gateway v1/v2 event formats and Lambda Function URLs. Errors are re-thrown after being recorded.
processMetrics is disabled by default in Lambda (no persistent process). Each invocation is one log entry.
Install
bash
npm install auto-api-observeQuick Start
The minimal setup — import, configure, and you're observing.
lambda-quick-start.js
const { withLambdaObservability } = require('auto-api-observe');
const handler = async (event) => {
return { statusCode: 200, body: JSON.stringify({ ok: true }) };
};
module.exports.handler = withLambdaObservability(handler, {
apiKey: process.env.APILENS_KEY,
});Full Example
All available options with custom fields and real-world usage.
lambda-full.js
const { withLambdaObservability, addField } = require('auto-api-observe');
const { DynamoDBClient, GetItemCommand } = require('@aws-sdk/client-dynamodb');
const dynamo = new DynamoDBClient({});
const handler = async (event) => {
const userId = event.pathParameters?.userId ?? event.queryStringParameters?.userId;
addField('userId', userId);
const result = await dynamo.send(new GetItemCommand({
TableName: 'Users',
Key: { id: { S: userId } },
}));
if (!result.Item) return { statusCode: 404, body: JSON.stringify({ error: 'Not found' }) };
return { statusCode: 200, body: JSON.stringify(result.Item) };
};
module.exports.handler = withLambdaObservability(handler, {
apiKey: process.env.APILENS_KEY,
slowThreshold: 200,
tags: { service: 'users-lambda', env: process.env.STAGE },
captureUnhandledErrors: true,
});What's Tracked Automatically
- httpMethod / requestContext.http.method
- path / rawPath
- statusCode from handler return
- Headers including x-forwarded-for
- Errors re-thrown after being recorded
Options Reference
| Option | Type | Default |
|---|---|---|
| apiKey | string | — |
| slowThreshold | number | 1000 |
| tags | Record | {} |
| captureUnhandledErrors | boolean | false |
Custom Fields
Attach any business context to the current request via AsyncLocalStorage — scoped per request, works the same on every framework.
const { addField } = require('auto-api-observe');
// In any route handler:
addField('userId', req.user.id);
addField('plan', req.user.plan);
addField('country', req.headers['cf-ipcountry']);
// Sensitive keys are auto-redacted before shipping:
addField('authorization', token); // → "[REDACTED]"
addField('password', pass); // → "[REDACTED]"Ready to observe your AWS Lambda app?
Sign up free — get your API key in under 30 seconds. No credit card required.
Get your free API key