ackee-node-monitor-module
v0.0.16
Published
`Ackee Node Monitor Module` collects request and response data and sends this information using [winston-elasticsearch](https://www.npmjs.com/package/winston-elasticsearch) to collector [Elasticsearch](https://www.elastic.co/) defined in configuration
Downloads
5
Keywords
Readme
Ackee Node Monitor Module
Ackee Node Monitor Module
collects request and response data and sends
this information using winston-elasticsearch
to collector Elasticsearch defined in configuration file.
Ackee Node Monitor Module sends request to collector once per timeout specified in config
and only if at least one request is in collection.
Installation
# Install from npm
npm install ackee-node-monitor-module --save
Usage
First add Ackee Node Monitor Module
configuration into config.js
:
disabled
: enable or disable loggingexcludedUrls
: urls excluded from logging, e.g. assets, css or js files ...elastic
:host
: specify url of Elasticsearchlog
: log level (debug, info, trace, error)
winston
:level
: log level (silly, debug, verbose, info, warn, error)indexPrefix
: the prefix used to generate the index name according to the pattern indexPrefix-[YYYY.MM.DD]timeout
: flushInterval - distance between bulk writes in ms, default: 2000
customHeaders
: array of request custom headers logged toElastic
customResponseHeaders
: array of response custom headers logged toElastic
customReqData
: array of custom request data logged toElastic
customPayload
: custom payload logged toElastic
Events
Ackee Node Monitor Module listens for close
event and finish
event:
- close: Indicates that the underlying connection was terminated before response.end().
- finish: Emitted when the response has been sent.
Example
module.exports = {
...
ackeeNodeMonitor: {
disabled: false,
excludedUrls: ['/bower_components/', '/img/', '/js/', '/css/'],
elastic: {
host: 'someelastic.com:9200',
log: 'trace',
},
winston: {
level: 'silly',
indexPrefix: 'nodetemplate-monitor',
timeout: 10000
},
customHeaders: [
'User-Agent'
],
customReqData: [
{
path: 'user',
name: 'user'
},
{
path: 'body.user.id',
name: 'userId'
},
],
customPayload: {
appName: 'appName',
appEnv: 'appEnv'
},
}
...
}
then require and init Ackee Node Monitor Module
in server.js
before calling createServer
(app.listen(port);
):
...
const express = require('express');
const config = require('config');
// require and init ackee-node-monitor-module
require('ackee-node-monitor-module')(config.ackeeNodeMonitor);
const app = express();
...
const server = app.listen(port);
Console output
...
AckeeNodeMonitor init
...
TRACE: 2016-11-07T09:41:22Z
-> POST http://localhost:9200/_bulk?consistency=one&timeout=10000ms
{"index":{"_index":"test-2016.11.07","_type":"log"}}
{"@timestamp":"2016-11-07T09:41:22.375Z","message":"Time measuring log","severity":"info","fields":{"resTime":25.395093,"method":"GET","statusCode":200,"baseUrl":"/service","path":"/test","User-Agent":"ApacheBench/2.3","user":{"userId":1},"appName":"test"}}
<- 200
{
"took": 136,
"errors": false,
"items": [
{
"create": {
"_index": "test-2016.11.07",
"_type": "log",
"_id": "AVg-KeQJoqW3YlfWUnaJ",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"status": 201
}
}
]
}
DEBUG: 2016-11-07T09:41:22Z
Request complete
Collected data
{
"fields": {
"resTime": "response time in [ms] or null",
"method": "HTTP method",
"statusCode": "HTTP status code or 0",
"baseUrl": "express baseUrl",
"path": "express path",
"timestamp": "timestamp"
}
}
Example
onFinish
{
"fields": {
"resTime": 25.395093,
"method": "GET",
"statusCode": 200,
"baseUrl": "/services",
"path": "/test",
"timestamp": 1474290310129,
"User-Agent": "ApacheBench/2.3",
"user": {
"userId": 1
},
"appName": "test"
}
}
onClose
{
"fields": {
"resTime": null,
"method": "GET",
"statusCode": 0,
"baseUrl": "/services",
"path": "/test",
"timestamp": 1474290310132,
"User-Agent": "ApacheBench/2.3",
"user": {
"userId": 1
},
"appName": "test"
}
}