A self-hostable status webpage that uses Prometheus alerts to create and maintain service status and incident tracking / customer information flow.
Go to file
Evilham adbdd5d968
All checks were successful
ci/woodpecker/manual/linters Pipeline was successful
Merge pull request 'Actually add vendor files' (#17) from no-cdn into main
Reviewed-on: #17
2024-02-23 13:07:54 +01:00
.woodpecker Adapt mypy checks so they catch issues like that in past commit 2023-12-11 20:00:59 +01:00
example-data Documentation: add dotenv.example and better instructions 2023-12-08 00:37:36 +01:00
src/adlermanager Version bump 24.2.1 2024-02-23 13:10:58 +01:00
typings Typing: add stubs, hints and tooling settings 2023-12-06 14:37:23 +01:00
.gitignore Release management: add release management bits 2023-12-11 19:51:06 +01:00
dotenv.example Config: add new settings replacing hard-coded values 2023-12-11 19:09:07 +01:00
LICENSE Initial commit 2018-11-30 21:27:08 +01:00
Pipfile Release management: add release management bits 2023-12-11 19:51:06 +01:00
Pipfile.lock Release management: add release management bits 2023-12-11 19:51:06 +01:00
prometheus-mock.sh Partial rewrite with sane typing (modern python!) 2023-11-30 01:05:06 +01:00
pyproject.toml Release management: add release management bits 2023-12-11 19:51:06 +01:00
README.md Rework logging and execution 2023-12-11 18:41:59 +01:00
setup.cfg Typing: add stubs, hints and tooling settings 2023-12-06 14:37:23 +01:00

prometheus-adlermanager

What?

A self-hostable status webpage that uses Prometheus alerts to create and maintain service status and incident tracking / customer information flow.

Why?

Prometheus is awesome! And AlertManager and Grafana are quite wonderful too, but they expose too much information.

This project allows you to choose which alerts/statistics get published in a fashion suitable for user-facing status pages.

I want it!

Dependencies

The easiest way to manage dependencies for deployment and development is with pipenv:

  • On Debian-based systems: sudo apt install pipenv
  • On FreeBSD: pkg install py39-pipenv (or devel/py-pipenv from ports)

The actual dependencies are:

  • attrs
  • twisted[conch]
  • service-identity
  • pyyaml
  • klein
  • jinja2
  • markdown

Using Pipenv you can install them for development with:

pipenv install --dev

And for deployment with:

pipenv install

Configuration

This is done via environment variables, Pipenv will import them from a .env file in the root of this repo.

You can use dotenv.example as a base for your settings:

cp dotenv.example .env

Review the available settings and their descriptions, particularly you will want to check DATA_DIR and SSH_KEYS_DIR.

SSH access

In order to access AdlerManager via SSH, you will need to add your public SSH key in authorized_keys format to: ${SSH_KEYS_DIR:-data}/ssh/users/myuser.key

And give yourself access to the given site, by adding your username to its ssh_users list.

Running

To run the server for development you can one of the following commands:

# Using twistd
# https://docs.twisted.org/en/stable/core/howto/basics.html#twistd
pipenv run twistd -ny app.py
# Running as a module
python -m adlermanager

And for deployment, you can use [twistd][twistd] itself to run the process in the background or any other daemon watching strategy of your liking (including e.g. runit or systemd). [twistd]: https://docs.twisted.org/en/stable/core/howto/basics.html#twistd

Using

After that with the defaults you will have the public status web visible in http://localhost:8080 and the ssh interface in localhost port 2222 which you can access with ssh -p 2222 USER@localhost.

How does it work?

We aim to solve that by using the same source of information to publish only the desired state/statistics.

1. Pretend to be an AlertManager

This is done by accepting POST requests from Prometheus on /api/v1/alerts, see https://prometheus.io/docs/alerting/clients/ docs.

2. Structure Alerts into Services and Components

3. Web only lists alerts configured for AdlerManager (public!)

4. Keep track of incidents

5. Allow for public updates / accountability (via SSH!)