Extensions for the aws-embedded-metrics npm module, adding flatcount metrics that emit a total count instead of an array of each individual count, and the ability to disable metrics without removing metrics method calls.
The package is available on npm as @shutterstock/aws-embedded-metrics-flatten
npm i @shutterstock/aws-embedded-metrics-flatten
import { FlatCountMetrics, metricScopeDummy } from '@shutterstock/aws-embedded-metrics-flatten';
- Flattens count metrics into a single emitted line
- This works around the max length limitation of CloudWatch Embedded Metrics log messages
- Rather than emitting an array, such as
[1, 1, 1, 1, 1]
, it emits a single count of[5]
, dramatically reducing the size of the log message when counting thousands of iterations in a Lambda function
- Gives the ability to disable the metrics without having to protect each metric emit with a conditional
CloudWatch embedded metrics (parsed from CloudWatch logs) have a limit of something like 1,000 items in a metrics log statement. Metrics beyond that point will be ignored.
aws-embedded-metrics
will emit metrics with 10,000
calls to .putMetric('MyMetric', 1, metricUnit.Count);
as an array with 10,000 elements all with the value of 1
... and about 9,000
of those will get ignored as a result.
metricScopeDummy
is a replacement for metricScope
that will pass an MetricsLoggerDummy
instance instead of a MetricsLogger
instance to the callback function. MetricsLoggerDummy
implements the same interface as MetricsLogger
but it does not accumulate data and does not emit any logs.
Coupled with a configuration setting / env var it is possible to emit metrics or not emit metrics by changing which function is used to create the metrics
object.
nvm use
npm i
npm run build
npm run lint
npm run test
npm run example:metrics-flatten
- Will print 2 lines of metrics
MyFlatMetric
will have a single value of10000
FLATTEN_METRICS=false npm run example:metrics-flatten
- Will print many lines of metrics
MyFlatMetric
will have 10,000 values of1
across many different lines
npm run example:metrics-optional
- Metrics will print
EMIT_METRICS=false npm run example:metrics-optional
- Metrics will not print