https://github.com/firstclasspostcodes/metrics
👓 Easily publish custom AWS CloudWatch Metrics
https://github.com/firstclasspostcodes/metrics
aws cloudwatch lambda nodejs serverless
Last synced: 7 months ago
JSON representation
👓 Easily publish custom AWS CloudWatch Metrics
- Host: GitHub
- URL: https://github.com/firstclasspostcodes/metrics
- Owner: firstclasspostcodes
- Created: 2020-05-27T10:34:39.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2021-02-19T07:21:32.000Z (about 5 years ago)
- Last Synced: 2025-03-17T22:56:29.200Z (about 1 year ago)
- Topics: aws, cloudwatch, lambda, nodejs, serverless
- Language: JavaScript
- Homepage:
- Size: 3.3 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Metrics
We use this library internally to easily integrate AWS CloudWatch Custom Metrics into our applications.
To get started:
```sh
npm i @firstclasspostcodes/metrics -s
```
Now, add a configuration file named `metrics.config.js` to the working directory. This library uses [cosmiconfig](https://www.npmjs.com/package/cosmiconfig) so name your file accordingly.
```js
module.exports = {
// Required: this is the namespace that all custom metrics will be published with
namespace: 'Test/Service',
// Required: the AWS region that the metrics will be published to
region: process.env.AWS_REGION,
// Optional: for serverless functions, specify `manualMode` to ensure that a metric
// flush interval is not started.
manualMode: true,
// Required: define the custom metrics available to the application at runtime.
metrics: {
// this is the key that a custom metric will be configured as
interestingMetric: {
// Optional: a list of dimensions for the metric
dimensions: [
{
Name: 'Function',
Value: 'normalHandler',
},
],
// Optional: define the resolution for the metric, 1-60. Defaults to 60.
resolution: 1,
// Required: the type of metric being recorded
unit: 'Count/Second',
},
longRunningFunction: {
dimensions: [
{
Name: 'Function',
Value: 'testHandler',
},
],
resolution: 1,
// For measured functions, use milliseconds
unit: 'Milliseconds',
},
},
};
```
For any deployed AWS applications, the correct IAM permissions must be configured:
```yaml
Function:
Type: 'AWS::Serverless::Function'
Properties:
# ...
Policies:
- CloudWatchPutMetricPolicy: {}
```
or defined explicitly:
```yaml
Statement:
- Effect: Allow
Action:
- cloudwatch:PutMetricData
Resource:
- '*'
```
Given the configuration above, you can use the configured metrics in the following way:
```js
const metrics = require('@firstclasspostcodes/metrics');
const { longRunningFunc } = require('./example');
exports.handler = async (event) => {
metrics.interestingMetric(event.someValue.length);
// record the same metric with a custom dimension
metrics.interestingMetric(event.someValue.length, [{
countryName: 'United States',
}])
const data = await metrics.longRunningFunction(() => {
// this will measure how long it takes to execute using perf_tools
return longRunningFunc(event.someValue);
}));
// will log a warning to the console and ignore this
metrics.doesNotExistMetric();
// for lambda functions, make sure to flush metrics
// before execution ends
await metrics.flush();
return data;
};
```