node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org ยป

simple-monitor

simple-monitor

Runtime monitoring for node.js applications written in coffescript

Introduction

simple-monitor gather vital statistics about your node.js application behavior in development or/and production use.

It provides various type of notifiers which can be configured for different environments and/or message types. Configuration is very flexible, so monitor have a lot of uses cases suitable for diverse systems

It also gives you an event systems, for system resource usage (CPU and RAM), so you can scale your system on fly depending on available resources or trigger notifications if system is overloaded

Installation & Testing

Node-monitor installs with npm and comes with an extensive suite of tests to make sure it performs well in your deployment environment.

To install and test node-monitor:

$ npm install simple-monitor
$ npm test

Error/Event Monitoring

Define monitor module as variable

var monitor = require('simple-monitor')({ config settings });

By default 4 types of events are supported:

monitor.debug('Debug message', variable = null);
monitor.event('Some important event in application', variable = null);
monitor.error('Error message', variable = null);
monitor.critical('Some critical issue', variable = null);

All of those functions are shortcuts for:

monitor.log('Debug message', variable = null, event_type, callback);

You can define our own events, with custom event_type

Configuration

Sample configuration

monitor:
	enabled: true # Enable/disable monitor globaly
	project: 'cms-tweet-farmer@desk.no' # Used in reports
	
	# CPU and RAM usage 
	usage:	
		cycle: 0 # 0 - every system tick (nextTick), -1 - one time, false - disabled, other integer - period in milliseconds
		resources: 	
			ram: 
				enabled: true
				handler: '/node_modules/simple-monitor/lib/usage/ram' # Location of RAM handler logic
				
				listeners:
					overload: 500000 # If proccess uses more when 500000 bytes of RAM trigger event overload
				events:
					overload: (value, callback) -> # Handler for overload event
						console.log 'Sorrow: ' + value
						callback null, value
					
			cpu: 
				enabled: false
				handler: require global.APP_PATH + '/node_modules/simple-monitor/lib/usage/cpu'  # Location of CPU handler logic
			
	# Event log
	logger:
		critical: # Notifier for critical events
			enabled: true
			email: # node-mailer module configuration for email notificator
				service: 'SendGrid'
					auth:
						user: 'login'
						pass: 'password'
			mailer: 
				default: 'mail@gmail.com' # Email where to send default notifications
			handler: require '/node_modules/simple-monitor/lib/logger/email' # Email notifier handler
			
		default: # All other events should be written to log file
			enabled: true
			file: global.APP_PATH + '/logs/farm.log' # File to write logs
			handler: require '/node_modules/simple-monitor/lib/logger/file' # File notifier handler

You can use application environment in logger settings, for example:

logger:
	production:
		critical:
			enabled: true
			email:
				service: 'SendGrid'
					auth:
						user: 'login'
						pass: 'password'
			mailer: 
				default: 'mail@gmail.com'
			handler: require '/node_modules/simple-monitor/lib/logger/email'
			
	development:
		default:
			enabled: true
			file: '/logs/events.log'
			handler: require '/node_modules/simple-monitor/lib/logger/file'

Monitor has some default settings, you can overwrite them by your config if needed:

enabled: true
project: 'My project'
defaultType: 'error' # Default event type for *monitor.log*
logger: # Default logger
    file: __dirname + '/logs/error.log'
    handler: unless process.env.NODE_ENV == 'test' then require __dirname + '/logger/file'
monitorTypes: # Types of events which should be monitored depending of environment. For example, in production use we'll save only _critical_ events.
    production:
    	['critical']
    stage:
    	['critical', 'error', 'event']
    test:
    	['critical', 'error', 'event', 'debug']
    development:
    	['critical', 'error', 'event', 'debug']

Resource Usage Monitoring

With monitor you can enable system resources monitoring to provide your application more flexible behavior depending on your system capabilities. For now CPU and RAM monitoring are supported. Current CPU module works only on Linux systems.

In bootstrap of your application, enable trackUsage once

var monitor = require('simple-monitor')({ config settings });
monitor.trackUsage(function(error) {
	monitor.critical('Resource usage tracking stopped', error);
});

Configuration

Depending on your configuration settings different events will be executed:

usage:	
	cycle: 0 # 0 - every system tick (nextTick), -1 - one time, false - disabled, other integer - period in milliseconds
	resources: 	
	    ram: 
	    	enabled: true
	    	handler: '/node_modules/simple-monitor/lib/usage/ram' # Location of RAM handler logic
	    	
	    	listeners:
	    		overload: 500000 # If proccess uses more when 500000 bytes of RAM trigger event overload
	    	events:
	    		overload: (value, callback) -> # Handler for overload event
	    			console.log 'Sorrow: ' + value
	    			callback null, value
	    		
	    cpu: 
	    	enabled: false
	    	handler: require global.APP_PATH + '/node_modules/simple-monitor/lib/usage/cpu'  # Location of CPU handler logic

You can define your own events and their handlers simply by putting them in config file. If you define listener as integer value, it will be compared with >= condition. You can also use string values like: '>=INTEGER', '=INTEGER', '<=INTEGER', '<INTEGER', '>INTEGER'

License

Released under the Apache License 2.0

See LICENSE file.

Copyright (c) 2012 Vyacheslav Voronchuk