Wondering what’s next for npm?Check out our public roadmap! »

    sys-watcher

    1.0.60 • 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

    Install

    npm i sys-watcher

    DownloadsWeekly Downloads

    125

    Version

    1.0.60

    License

    MIT

    Unpacked Size

    159 kB

    Total Files

    65

    Last publish

    Collaborators

    • avatar