6 releases

0.3.0 Jun 24, 2024
0.2.0 Jun 20, 2024
0.1.3 Jun 4, 2024
0.1.2 Mar 11, 2024
0.1.1 Feb 16, 2024

#920 in Network programming

Download history 14/week @ 2024-09-10 4/week @ 2024-09-17 9/week @ 2024-09-24 8/week @ 2024-10-01

332 downloads per month

GPL-3.0-or-later

52KB
468 lines

RemoteSysMonitor

Crates.io Version Crates.io Total Downloads Crates.io Codacy Badge test

This is a small command-line tool that runs some checks on remote servers and posts the results to a Slack channel.

Check the project's website for a full list of available checks and how to configure them.

TL:DR

Install

Make sure you have Rust and Cargo installed, if not follow the instructions here.

cargo install remotesysmonitor

Execute

Check the output of the remotesysmonitor --help command for a list of available options.

$ remotesysmonitor -h
Usage: remotesysmonitor [OPTIONS] <CONFIG>

Arguments:
  <CONFIG>

Options:
  -f, --full     Post a check to Slack even if there is no ❌ in the checks
  -p, --print    Print the output of the checks in stdout
  -h, --help     Print help
  -V, --version  Print version

You need to define SLACK_HOOK_URL as an environment variable with the URL of the Slack webhook you want to use and a path to the configuration file.

SLACK_HOOK_URL=<your-slack-hook-url> remotesysmonitor configuration.yaml

The configuration file should look like this:

servers:
  - name: name-of-your-server
    host: myserver.nl
    port: 22
    user: rodrigo
    private_key: /home/rodrigo/.ssh/id_ed25519
    checks:
      ping:
        url:
          - /
      load:
        interval: 15
      number_of_subfolders:
        path:
          - /path/full/of/subfolders
      custom_command:
        command: cd /some/path && ./some_script.sh
      list_old_directories:
        loc: /path/full/of/old/directories
        cutoff: 2 # days

  - name: raspberryPi
    host: ip.of.your.raspberry.pi
    port: 22
    user: rodrigo
    private_key: /home/rodrigo/.ssh/id_ed25519
    checks:
      temperature:
        sensor: /sys/bus/w1/devices/28-00000b694311/w1_slave

It might make sense to configure a cron job to run this command periodically.

# Run every 10 minutes, it will only post to Slack if one of the checks has ❌
*/10 * * * * SLACK_HOOK_URL=<your-slack-hook-url> remotesysmonitor configuration.yaml

# Post a full report to Slack at 8, 12, 16 and 20 hours
## Running with -f will post to Slack even if there is no ❌ in the checks
0 8,12,16,20 * * * SLACK_HOOK_URL=<your-slack-hook-url> remotesysmonitor -f configuration.yaml

Development

There is a .devcontainer configuration for VSCode, so you can use it to develop the project. It will setup a development environment and also configure a SSH server to test the checks that require a remote server.

Once inside the dev-container you can tweak the conf/conf.dev.yaml file to your needs and run the project with:

SLACK_HOOK_URL="" cargo run -- -p conf/conf.dev.yaml

Dependencies

~29–44MB
~772K SLoC