Skip to content

About

System Watcher

Resources

Stars

1 star

Watchers

1 watching

Forks

Latest commit

 

History

188 Commits

Folders and files

Repository files navigation

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

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

About

System Watcher

Resources

Stars

1 star

Watchers

1 watching

Forks

Releases

Packages

Used by

Contributors

Languages