Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Runtime monitoring for node.js applications written in coffescript
CoffeeScript
Branch: master
Pull request Compare This branch is even with Voronchuk:master.

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
lib
test
Cakefile
LICENSE
README.md
package.json

README.md

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'

License

Released under the Apache License 2.0

See LICENSE file.

Copyright (c) 2012 Vyacheslav Voronchuk

Something went wrong with that request. Please try again.