nodebrato
v0.0.7
Published
Librato bindings for node with some extra features
Downloads
3
Maintainers
Readme
Nodebrato
A node.js bindings for Librato metrics that provides advanced statistics which allow you to reduce your reporting frequency and ultimately lower your montly Librato bill.
It was originally created for http://showgoers.tv but I forked it out of that codebase to open it up for community use and contributions.
Features
- Supports pre-registering metric definitions
- Can update metric definitions automatically so that you don't have to do that manually in the librato interface. (edit: this feature hasn't quite been merged into master. Pull-requests are welcome!)
- Gives more control over how each individual metric is collected, aggregated and submitted
- Reporting intervals can be defined on a per-metric basis. This can can save you money by allowing you to only report when you need to.
- Supports defining separate client-side aggregation functions and librato-side aggregation functions
- This lets you use aggregation functions that librato doesn't support (eg. advanced stastistics and quantiles)
- By giving you more additional descriptive statistics, you can drastically increase your reporting period (less $$$) but still have a clear understanding of that stat.
- It's also useful for librato power users who make heavy use of alerts and composite functions.
- Supports Librato graph annotations (eg. for marking deployments, etc)
How is this different from librato-node
?
librato-node
aggregates all measurements inline, which limits flexibility but is more suited for extremely high performance reporting.librato-node
is written in Coffeescript.
Example
let metricDefinitions = {
'errors': {
libratoAggFunction: 'sum',
periodMs: 10000 //perhaps we want errors reported at a higher resolution than other metrics
},
'star_rating': {
libratoAggFunction: 'average',
},
'web_requests': {
clientAggFunction: 'sum',
libratoAggFunction: 'average',
libratoMetricProperties: {
display_name: 'Site Requests',
description: 'The number of requests made to the web server',
attributes: {
color: '#ff0000'
}
},
},
'response_time_ms': {
clientAggFunction: 'quantiles',
libratoAggFunction: 'min',
quantiles: [0, .1, .90, 1], //when submitted to librato, will actually create 4 separate metrics (ie. response_time_ms.q0, response_time_ms.q10, response_time_ms.q90, response_time_ms.q100)
periodMs: 30 * 60 * 1000 //because we're intelligently aggregating, we only need to report every thirty minutes
}
}
let librato = new Librato({
source: 'my_default_source',
definitions: metricDefinitions,
logging: true, //turn on debug output to console
periodMs: 10000
})
librato.start()
librato.increment('requests', 10)
librato.measure('response_time_ms', 1)
librato.measure('star_rating', 5)
librato.measure('star_rating', 4, 'another_source')
librato.measure('not_defined_metric', 1) //when using the measure method will default to "mean" as an aggregation function
librato.increment('not_defined_count', 1) //when using the increment method will default to "sum" as an aggregation function