CloudWatch metrics utility for AWS Lambda functions using Embedded Metric Format with asynchronous metric emission
CloudWatch metrics utility for AWS Lambda using Embedded Metric Format (EMF). Emits custom metrics asynchronously without impacting function latency.
npm install @aws-lambda-powertools/metricsimport { Metrics, MetricUnit, MetricResolution } from '@aws-lambda-powertools/metrics';
import { logMetrics } from '@aws-lambda-powertools/metrics/middleware';
import type { MetricsOptions, Dimensions, ExtraOptions } from '@aws-lambda-powertools/metrics/types';import { Metrics, MetricUnit } from '@aws-lambda-powertools/metrics';
const metrics = new Metrics({
namespace: 'serverlessAirline',
serviceName: 'orders',
defaultDimensions: { environment: 'prod' }
});
export const handler = async (event: { requestId: string }) => {
metrics.addMetadata('request_id', event.requestId);
metrics.addDimension('region', 'us-west-2');
metrics.addMetric('successfulBooking', MetricUnit.Count, 1);
metrics.publishStoredMetrics();
};Metrics Class: Main interface for metric operations. Buffers up to 100 metrics per EMF blob, supports dimensions (max 29), metadata, and automatic/manual flushing.
Metric Buffering: Automatically buffers metrics and flushes when buffer reaches 100 metrics or 100 values per metric.
Dimensions: Low-cardinality key-value pairs for filtering/grouping metrics in CloudWatch (max 29). Cleared after publishing except default dimensions.
Metadata: High-cardinality contextual data searchable in CloudWatch Logs but not in Metrics UI. No limit on entries.
EMF Serialization: Converts metrics to CloudWatch Embedded Metric Format for asynchronous processing via stdout.
const MetricUnit = {
// Time
Seconds: 'Seconds', Microseconds: 'Microseconds', Milliseconds: 'Milliseconds',
// Size
Bytes: 'Bytes', Kilobytes: 'Kilobytes', Megabytes: 'Megabytes', Gigabytes: 'Gigabytes', Terabytes: 'Terabytes',
// Bits
Bits: 'Bits', Kilobits: 'Kilobits', Megabits: 'Megabits', Gigabits: 'Gigabits', Terabits: 'Terabits',
// Other
Percent: 'Percent', Count: 'Count',
// Rate (per second)
BytesPerSecond: 'Bytes/Second', KilobytesPerSecond: 'Kilobytes/Second', MegabytesPerSecond: 'Megabytes/Second',
GigabytesPerSecond: 'Gigabytes/Second', TerabytesPerSecond: 'Terabytes/Second', BitsPerSecond: 'Bits/Second',
KilobitsPerSecond: 'Kilobits/Second', MegabitsPerSecond: 'Megabits/Second', GigabitsPerSecond: 'Gigabits/Second',
TerabitsPerSecond: 'Terabits/Second', CountPerSecond: 'Count/Second',
// None
NoUnit: 'None'
} as const;const MetricResolution = {
Standard: 60, // 60 seconds - lower cost
High: 1 // 1 second - higher cost, better granularity
} as const;Install with Tessl CLI
npx tessl i tessl/npm-aws-lambda-powertools--metrics