Skip to main content

What is Monitor?

Monitor is a web app to provide structure for managing your servers, builds, deployments, and automated procedures.

With Monitor you can:

  • Connect all of your servers, and alert on CPU usage, memory usage, and disk usage.
  • Create, start, stop, and restart Docker containers on the connected servers, and view their status and logs.
  • Deploy docker compose stacks. The file can be defined in UI, or in a git repo, with auto deploy on git push.
  • Build application source into auto-versioned Docker images, auto built on webhook. Deploy single-use AWS instances for infinite capacity.
  • Manage repositories on connected servers, which can perform automation via scripting / webhooks.
  • Manage all your configuration / environment variables, with shared global variable and secret interpolation.
  • Keep a record of all the actions that are performed and by whom.

Docker

Monitor is opinionated by design, and uses docker as the container engine for building and deploying.

Architecture and Components

Monitor is composed of a single core and any amount of connected servers running the periphery application.

Core

Monitor Core is a web server hosting the Core API and browser UI. All user interaction with the connected servers flow through the Core. It is the stateful part of the system, with the application state stored on an instance of MongoDB.

Periphery

Monitor Periphery is a small stateless web server that runs on all connected servers. It exposes an API called by Monitor Core to perform actions on the server, get system usage, and container status / logs. It is only intended to be reached from the core, and has an address whitelist to limit the IPs allowed to call this API.

Core API

Monitor exposes powerful functionality over the Core's REST and Websocket API, enabling infrastructure engineers to manage their infrastructure programmatically. There is a rust crate to simplify programmatic interaction with the API, but in general this can be accomplished using any programming language that can make REST requests.

Permissioning

Monitor is a system designed to be used by many users, whether they are developers, operations personnel, or administrators. The ability to affect an applications state is very powerful, so monitor has a granular permissioning system to only provide this functionality to the intended users. The permissioning system is explained in detail in the permissioning section.

User sign-on is possible using username / password, or with Oauth (Github and Google). See Core Setup.