A minimal monitoring tool
Go to file
Ian Fijolek c67fe1f4c7
Some checks failed
continuous-integration/drone/push Build is failing
Go back to copying all files because drone doesn't like this
2020-01-30 11:35:59 -08:00
scripts Update Dockerfiles to make this version runnable 2019-11-22 12:58:26 -08:00
test Fix issue with shell commands containing "<>" and unecessary (and poor) escaping 2020-01-07 10:37:53 -08:00
.drone.yml Add notify after docker builds 2020-01-10 14:25:02 -08:00
.gitignore Add multi-arch builds 2020-01-10 13:58:17 -08:00
.pre-commit-config.yaml Add pre-commit to the repo 2019-11-21 15:32:57 -08:00
alert_test.go Add alert tests 2019-10-03 16:30:49 -07:00
alert.go Add debug flag to adjust log verbosity a bit 2019-10-04 16:05:25 -07:00
config_test.go Fix issue with shell commands containing "<>" and unecessary (and poor) escaping 2020-01-07 10:37:53 -08:00
config.go Add new test for multi-line YAML strings 2020-01-07 10:28:14 -08:00
Dockerfile Go back to copying all files because drone doesn't like this 2020-01-30 11:35:59 -08:00
Dockerfile.multi-stage Update Dockerfiles to newer (roughly) pinned versions 2019-11-22 14:44:21 -08:00
go.mod Add prometheus metrics exporter 2019-11-15 17:14:20 -08:00
go.sum Add prometheus metrics exporter 2019-11-15 17:14:20 -08:00
LICENSE Add pre-commit to the repo 2019-11-21 15:32:57 -08:00
main_test.go Move panics up to main function 2019-10-04 16:17:36 -07:00
main.go Add prometheus metrics exporter 2019-11-15 17:14:20 -08:00
Makefile Add multi-arch builds 2020-01-10 13:58:17 -08:00
manifest.tmpl Add multi-arch builds 2020-01-10 13:58:17 -08:00
metrics.go Add pre-commit to the repo 2019-11-21 15:32:57 -08:00
monitor_test.go Update test to be less environment dependent 2019-10-07 15:53:41 -07:00
monitor.go Add new test for multi-line YAML strings 2020-01-07 10:28:14 -08:00
README.md Update README to correct typo and checklist 2020-01-17 15:53:37 -08:00
sample-config.yml Update Dockerfiles to make this version runnable 2019-11-22 12:58:26 -08:00
util_test.go Refactor a bit more for testing, update tests 2019-10-04 14:47:38 -07:00
util.go Fix issue with shell commands containing "<>" and unecessary (and poor) escaping 2020-01-07 10:37:53 -08:00

minitor-go

A reimplementation of Minitor in Go

Minitor is already a minimal monitoring tool. Python 3 was a quick way to get something live, but Python itself comes with a large footprint. Thus Go feels like a better fit for the project, longer term.

Initial target is meant to be roughly compatible requiring only minor changes to configuration. Future iterations may diverge to take advantage of Go specific features.

Differences from Python version

There are a few key differences between the Python version and the v0.x Go version.

First, configuration keys cannot have multiple types in Go, so a different key must be used when specifying a Shell command as a string rather than a list of args. Instead of command, you must use command_shell. Eg:

minitor-py:

monitors:
  - name: Exec command
    command: ['echo', 'test']
  - name: Shell command
    command: echo 'test'

minitor-go:

monitors:
  - name: Exec command
    command: ['echo', 'test']
  - name: Shell command
    command_shell: echo 'test'

Second, templating for Alert messages has been updated. In the Python version, str.format(...) was used with certain keys passed in that could be used to format messages. In the Go version, we use a struct, AlertNotice defined in alert.go and the built in Go templating format. Eg.

minitor-py:

alerts:
  log_command:
    command: ['echo', '{monitor_name}']
  log_shell:
    command_shell: 'echo {monitor_name}'

minitor-go:

alerts:
  log_command:
    command: ['echo', '{{.MonitorName}}']
  log_shell:
    command_shell: 'echo {{.MonitorName}}'

Finally, newlines in a shell command don't terminate a particular command. Semicolons must be used and continuations should not.

minitor-py:

alerts:
  log_shell:
    command_shell: >
      echo "line 1"
      echo "line 2"
      echo "continued" \
        "line"      

minitor-go:

alerts:
  log_shell:
    command_shell: >
      echo "line 1";
      echo "line 2";
      echo "continued"
        "line"      

To do

There are two sets of task lists. The first is to get rough parity on key features with the Python version. The second is to make some improvements to the framework.

Pairity:

  • Run monitor commands
  • Run monitor commands in a shell
  • Run alert commands
  • Run alert commands in a shell
  • Allow templating of alert commands
  • Implement Prometheus client to export metrics
  • Test coverage
  • Integration testing (manual or otherwise)

Improvement (potentially breaking):

  • Implement leveled logging (maybe glog or logrus)
  • Consider switching from YAML to TOML
  • Consider value of templating vs injecting values into Env variables
  • Consider dropping alert_up and alert_down in favor of using Go templates that offer more control of messaging
  • Async checking
  • Use durations rather than seconds checked in event loop
  • Revisit metrics and see if they all make sense