@ovotech/datadog-metrics-tracker
v1.3.22
Published
Track metrics and store them in DataDog
Downloads
100
Maintainers
Keywords
Readme
Datadog Metrics Tracker
Track metrics and store them in Datadog, with secondary logging if Datadog is unavailable or invalid input is provided.
Using
yarn add @ovotech/datadog-metrics-tracker
import { createDataDogConnection, MetricsTracker } from '@ovotech/datadog-metrics-tracker';
import { Logger } from '@ovotech/winston-logger';
import * as winston from 'winston';
// Define a specific tracker
class PerformanceMetricsTracker extends MetricsTracker {
private static queryTimeMeasurementName = 'query-time';
async trackQueryTime(timeMs: number, queryName: string) {
await this.trackPoint(
PerformanceMetricsTracker.queryTimeMeasurementName,
{ queryName },
{ timeMs: Math.round(timeMs) },
);
}
}
// Create Logger and Datadog instances
const winstonLogger = winston.createLogger(...);
const logger = new Logger(winstonLogger, { traceToken: req.headers['X-Trace-Token'] });
const datadog = createDataDogConnection(process.env);
// Create the tracker
const metricsMeta = {
extraTagName: 'some-value',
};
const tracker = new PerformanceMetricsTracker(datadog, logger, metricsMeta);
// Track a point
await tracker.trackQueryTime(12.34, 'myFirstQuery')
As well as a base class that allows you to define custom trackers, there are pre-defined trackers for common operations. These allow services to use a common interface and not re-implement the same functionality.
ExternalRequestMetricsTracker
- track information about calling other servicesKafkaMetricsTracker
- track actions around the lifecycle of Kafka eventsResponseMetricsTracker
- track information about responses from an API
Beware
Don't add too many unique / varying possibilities, e.g. monetary amounts, to the tags
- they will set off DataDog Monitor alerts within the business, because too many "custom metrics" escalate DataDog costs.
Multi-variant values, e.g. monetary amounts, should be in the value(s)
.
Running the tests
Then you can run the tests with:
yarn test
Coding style (linting, etc) tests
Style is maintained with prettier and tslint
yarn lint
Deployment
Deployment is preferment by lerna automatically on merge / push to master, but you'll need to bump the package version numbers yourself. Only updated packages with newer versions will be pushed to the npm registry.
Contributing
Have a bug? File an issue with a simple example that reproduces this so we can take a look & confirm.
Want to make a change? Submit a PR, explain why it's useful, and make sure you've updated the docs (this file) and the tests (see test folder).
License
This project is licensed under Apache 2 - see the LICENSE file for details