InfluxDB broadcasting for Good process monitor, based on good-http. It can write to HTTP or UDP Telegraf endpoints.
Good Influx
will format your Good data according to the InfluxDB Line Protocol.
good-influx
is a write stream used to send events to InfluxDB endpoints in batches. If your endpoint
is http://
or https://
, it makes a "POST" request with a plain-text payload to the supplied endpoint
. It will make a final "POST" request to the endpoint to flush the rest of the data on "finish".
If the supplied endpoint
is a udp://
endpoint then good-influx
will send the stats via UDP. This may improve application performance since UDP does not wait for a response. Though it does fail silently, so you run the risk that your stats are failing to record and you don't know about it.
const Hapi = require('hapi');
const server = new Hapi.Server();
server.connection();
const options = {
ops: {
interval: 1000
},
reporters: {
// Send only 'ops' events to InfluxDB
influx: [{
module: 'good-squeeze',
name: 'Squeeze',
args: [{ ops: '*' }]
}, {
module: 'good-influx',
args: ['http://localhost:8086/write?db=good', {
threshold: 10,
metadata: {
serviceName: 'SuperAwesomeService',
dataCenter: 'Banff'
},
prefix: ['my', 'awesome', 'service']
}]
}]
}
};
server.register({
register: require('good'),
options: options
}, (err) => {
if (err) {
console.error(err);
} else {
server.start(() => {
console.info('Server started at ' + server.info.uri);
});
}
});
Creates a new GoodInflux object where:
endpoint
- full path to remote server's InfluxDB HTTP API end point to transmit InfluxDB statistics (e.g.http://localhost:8086/write?db=good
)config
- configuration object (Optional)[threshold]
- number of events to hold before transmission. Defaults to5
. Set to0
to have every event start transmission instantly.- Note that for UDP, threshold above
5
will be set to5
. Why? Because if UDP packets get too big they fail to transmit.
- Note that for UDP, threshold above
[errorThreshold]
- number of erroring message sends to tolerate before the plugin fails. Default is 0.[wreck]
- configuration object to pass intowreck
. Defaults to{ timeout: 60000, headers: {} }
.content-type
is always "text/plain".[udpType]
- UDP type; defaults toudp4
. Probably not necessary to change, but more documentation is available on the NodeJS Dgram Documentation[metadata]
- arbitrary tags you would like to add to your InfluxDB stats. This helps you query InfluxDB for the statistics you want.[prefix]
- applied to each measurement name. Useful if you want to limit the scope of your measurements to a specific service. You can specify a string, or an array of strings (recommended). Arrays will be joined by prefixDelimiter below. For example, usingprefix: ['my', 'awesome', 'service']
theops
measurement will be renamed tomy/awesome/service/ops
[prefixDelimiter]
- Used to delimit measurement prefix arrays defined in prefix above. Defaults to/
.[customLogFormatters]
- This options allows you to report specific log events based on tag (Note the first matching tag inevent.tags
will be used, it's better to have specific tags in practice). Ordinarily, log events are sent as a string. However, you may want to extract a custom data field and send it to Influx in a more searchable format. For example:
{
"event": "log",
"tags": ["request", "myCustomStats"],
"data": {
"inducedLatency": 40
}
}
By default, good-influx will send this to InfluxDB as:
message="{\"inducedLatency\":40}"
However, that JSON string is not searchable. You can pass in a custom formatter for tag myCustomStats:
const customFormatters = {
myCustomStats: (eventData) => {
return {
inducedLatency: eventData.inducedLatency
}
}
}
time | host | pid | error | id | method | url |
---|
time | host | pid | data* | tags |
---|
- when
config.customLogFormatters
is specified, collect all fields withinconfig.customLogFormatter[tag](log.data)
and send as individual fields
Each Ops event from the Hapi Good plugin is separated out into 5 events for InfluxDB. Why? Because ops
events are multilayered, so we can't capture the full information in one event.
Standard tags: host,pid, metadata (optional)
event | numEvents | tags | fields |
---|---|---|---|
ops | 1 | Standard | os.cpu1m, os.cpu5m, os.cpu15m, os.freemem, os.totalmem, os.uptime, os.totalmem, proc.delay, proc.heapTotal, proc.heapUsed, proc.rss, proc.uptime |
ops_requests | 1 per port | Standard + port | requestsTotal, requestsDisconnects, requests200* -- one field for each status code |
ops_concurrents | 1 per port | Standard + port | concurrents |
ops_responseTimes | 1 per port | Standard + port | avg, max |
ops_sockets | 1 | Standard | httpTotal, httpsTotal |
time | host | pid | data | id | method | path | tags |
---|
time | host | pid | httpVersion | id | instance | labels | method | path | query |
---|
referer | remoteAddress | responseTime | statusCode | userAgent |
---|