sys-watcher

1.0.78 • Public • Published

System Watcher

Setup

  1. Add NPM package
npm init
npm install --save sys-watcher
  1. Create watcher.js with following code as an example
const SysWatcher = require('sys-watcher');

let watcher = new SysWatcher();

watcher.start();
  1. Create config.js with following code as an example
module.exports =
  { caching: {
      file3min: {
        type: 'FileCache'
      , settings: {
          lifespan: '3 min'
        }
      }
    , redis3min: {
        type: 'RedisCache'
      , settings: {
          lifespan: '3 min'
        }
      }
    }
  , loggers: {
      email: {
        type: 'MailLogger'
      , settings: {
          recipients: [ '<your e-mail address>' ]
        , sender: '<sender e-mail address>'
        }
      , composing: {
          format: 'text'
        , hostInfo: true
        , locationInSubject: true
        , subject: 'Error report'
        }
      }
    , slackChannel: {
        type: 'SlackLogger'
      , settings: {
          kind: 'webhook'
        , webHooks: [ '<url to channel webhook>' ]
        }
      , composing: {
          hostInfo: true
        }
      }
    , slackDirect: {
        type: 'SlackLogger'
      , settings: {
          kind: 'direct'
        , token: '<slack app token>'
        , recipients: [ '<slack recipient>' ]
        }
      , composing: {
          hostInfo: true
        }
      }
    , telegram: {
        type: 'TelegramLogger'
      , settings: {
          token: '<telegram bot token>'
        , recipients: [ <telegram user ID> ]
        }
      , composing: {
          hostInfo: true
        }
      }
    , AWSFreeSpaceCloudWatch: {
        type: 'AWSCloudWatchLogger'
      , settings: {
          metricName: 'FreeSpace'
        , nameSpace: 'TESTING'
        , units: 'Bytes'
        , AWS: {
            region: 'us-east-1'
          , accessKeyId: '<AWS Access Key>'
          , secretAccessKey: '<AWS Secret>'
          }
        }
      , composing: {
          hostInfo: true
        , locationInfo: true
        }
      }
    }
  , globals: {
      location: '<Name of your server>'
    , onStart: {
        composing: {
          hostInfo: true
        }
      , loggers: [ 'email', 'slackDirect' ]
      , cache: 'file3min'
      }
    , onError: {
        loggers: [ 'slackChannel', 'telegram' ]
      , composing: {
          hostInfo: true
        }
      , cache: 'redis3min'
      }
    }
  , watchers: {
      freeSpaceWatcher: {
        type: 'FreeSpaceWatcher'
      , settings: {
          path: '/'
        , threshold: '1 Gb'
        }
      , loggers: [ 'email', 'slackDirect' ]
      , scheduling: {
          interval: '5 min'
        }
      }
    , freeRAMWatcher: {
        type: 'FreeRAMWatcher'
      , settings: {
          threshold: '16 Gb'
        }
      , loggers: [ 'email', 'slackDirect' ]
      , scheduling: {
          interval: '1 min'
        }
      }
    , apacheErrorLog: {
        type: 'FileWatcher'
      , settings: {
          path: [ '/var/log/httpd/error_log' ]
        , rules: {
            all: {
              match: [ '([0-9]+[/][0-9]+[/][0-9]+ [0-9]+\:[0-9]+\:[0-9]+ \[error\] [0-9#]+\: [0-9*]+) (.+)' ]
            , cacheKey: '$2'
            }
          }
        }
      , loggers: [ 'email', 'slackDirect' ]
      , cache: 'redis3min'
      }
    , CMWatcher: {
        type: 'ConfigurationWatcher'
      , settings: {
          rules:[
            { cmd: 'node -v', check: '(8|10).16.(0|1|2)' }
          ]
        }
      , scheduling: {
          interval: '60 minutes'
        }
      , loggers: [ 'email', 'slackDirect' ]
      , cache: 'redis'
      }
    }
  };
  1. Run the watcher
node watcher.js start

Run using pm2 http://pm2.keymetrics.io.

The best way to make sure watcher is always up and running is to use pm2.

  1. Create ecosystem.config.yml using following code as an example:
apps:
  - script      : ./watcher.js
    name        : 'Watcher'
    cwd         : '/usr/local/node/sys-watcher/'
    args        : 'start --config config.js'
    treekill    : false
    watch       : true
    watch_delay : 1000
    ignore_watch:
      - .git
      - node_modules
    error_file  : '/var/log/node/sys-watcher.err'
    out_file    : '/var/log/node/sys-watcher.log'
    combine_logs: true
    max_memory_restart: '200M'
  1. Run watcher through pm2
pm2 start
  1. Check it's running using
pm2 ls
  1. Check logs using
pm2 logs

Components

Watchers

  • AWSSQSWatcher
  • ConfigurationWatcher
  • CronWatcher
  • DirectoryWatcher
  • FileWatcher
  • FreeRAMWatcher
  • FreeSpaceWatcher
  • GitHubWebHookWatcher
  • HTTPWatcher
  • MailQueueWatcher
  • MySQLWatcher
  • ProcessWatcher
  • RabbitMQWatcher
  • SSLCertificateWatcher
  • WebWatcher

Caching engines

  • FileCache
  • RedisCache

Loggers

  • AWSCloudWatchLogger
  • ConsoleLogger
  • MailLogger
  • RabbitMQLogger
  • SlackLogger
  • TelegramLogger

Versions

Current Tags

  • Version
    Downloads (Last 7 Days)
    • Tag
  • 1.0.78
    1
    • latest

Version History

Package Sidebar

Install

npm i sys-watcher

Weekly Downloads

1

Version

1.0.78

License

MIT

Unpacked Size

151 kB

Total Files

56

Last publish

Collaborators

  • jagermesh