Iain Sproat 20b5b7fdc3 chore(deps): bump go dependencies (#37)
* chore(deps): bump go dependencies

* chore(deps): bump version of git in Dockerfile builder

* downgrade to previous release candidate of git
2024-06-18 08:54:15 +01:00
2022-11-21 21:04:05 +00:00
2022-11-21 21:04:05 +00:00
2022-11-21 21:04:05 +00:00
2022-11-14 09:46:27 +00:00
2024-06-18 08:54:15 +01:00
2024-06-18 08:54:15 +01:00
2021-09-28 14:59:16 +01:00
2022-11-14 09:46:27 +00:00
2024-01-03 19:03:24 +00:00

alertmanager-discord

This is a webserver that accepts webhooks from AlertManager. It will post your Prometheus alert notifications into a Discord channel as they trigger:

Warning

This program is not a replacement to alertmanager, it accepts webhooks from alertmanager, not Prometheus.

The standard "dataflow" should be:

Prometheus -------------> alertmanager -------------------> alertmanager-discord

alerting:                 receivers:
  alertmanagers:          - name: 'discord_webhook'         environment:
  - static_configs:         webhook_configs:                   - DISCORD_WEBHOOK=https://discordapp.com/api/we...
    - targets:              - url: 'http://localhost:9094'
       - 127.0.0.1:9093

Features

  • REST API
  • Small, standalone binary ( less than 12 Mb)
  • Small Docker (OCI) Image (also less than 12 Mb) with minimal dependencies
  • Helm Chart for deployment to Kubernetes.
    • includes Cilium Network Policies which can be optionally enabled.
  • Liveness and Readiness probes, at /liveness and /readiness.
  • Unit and Integration tests, approx 90% coverage.
  • Structured Logging.
  • Prometheus metrics at /metrics.

Roadmap

  • Template Discord messages
  • REST API documented with OpenAPI (Swagger) specification.

Example alertmanager config

global:
  # The smarthost and SMTP sender used for mail notifications.
  smtp_smarthost: "localhost:25"
  smtp_from: "alertmanager@example.org"
  smtp_auth_username: "alertmanager"
  smtp_auth_password: "password"

# The directory from which notification templates are read.
templates:
  - "/etc/alertmanager/template/*.tmpl"

# The root route on which each incoming alert enters.
route:
  group_by: ["alertname"]
  group_wait: 20s
  group_interval: 5m
  repeat_interval: 3h
  receiver: discord_webhook

receivers:
  - name: "discord_webhook"
    webhook_configs:
      - url: "http://localhost:9094"

Deployment

Running binary

go run . --discord_webhook_url=https://discord.com/api/webhooks/123456789123456789/abc

You may instead provide the Discord webhook url by environment variable, DISCORD_WEBHOOK_URL, or via a configuration file:

discord_webhook_url: https://discord.com/api/webhooks/123456789123456789/abc
go run . --configuration_file_path=/path/to/your/config.yaml

Docker or OCI-compatible container runtime

If you wish to deploy this to Docker, or similar OCI-compatible container runtime, you can pull the OCI image from the Docker Hub repository.

Kubernetes Helm Chart

If you wish to deploy this to Kubernetes, this repository contains a Helm Chart.

Firstly, please deploy a Secret with your configuration information, the discord webhook url is required.:

apiVersion: v1
kind: Secret
metadata:
  name: discord-config
data:
  "config.yaml": |
    discord_webhook_url: https://discord.com/api/webhooks/123456789123456789/abc
helm upgrade --install \
--create-namespace \
--namespace alertmanager-discord
alertmanager-discord \
./deploy/helm

You can optionally also provide a values yaml file, --values ./your-values.yaml, to override the default values.

Development

To build the binary locally:

CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -ldflags="-w -s" -o /tmp/alertmanager-discord ./cmd/alertforward

To build the Dockerfile locally:

docker build . -t speckle/alertmanager-discord:local

Or to build the Dockerfile on Apple Silicon (M1, M2 etc.):

docker buildx build --platform=linux/amd64 . -t speckle/alertmanager-discord:local

Pre-commit

A pre-commit configuration is provided. With pre-commit installed, run:

pre-commit install

This should install hooks on git, which will cause pre-commit to run every time a git commit is created.

Alternatively, to run pre-commit on the entire repository:

pre-commit run --all-files

Upgrading

go get -u ./...

Testing

go test ./... -v -cover -test.shuffle on

Design philosophy

  • small footprint
  • Minimal external dependencies
  • binary should be agnostic to deployment location or method.
  • synchronous; the connection to the server is kept open until the connection to Discord has responded (or errored). This allows the response code or error to be returned to the request - we can have more confidence that the message was sent, and have a better ability to quickly correlate which requests caused an error.

Acknowledgements

This repository is forked from benjojo/alertmanager-discord under the Apache 2.0 license

S
Description
Forwards Prometheus AlertManager alerts into Discord
Readme 980 KiB
Languages
Go 87.7%
Shell 6.6%
Go Template 3.6%
Dockerfile 2.1%