alertmanager-ntfy

module
v0.0.0-...-d8c3596 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 18, 2024 License: GPL-3.0

README

alertmanager-ntfy build

alertmanager-ntfy is a service that forwards Prometheus Alertmanager notifications to ntfy.sh. It is highly customizable, allowing you to dynamically configure the ntfy notification based on the properties of the alert that is being handled.

Example of receiving a Blackbox exporter notifcation on an Android device:

Configuration

The primary way to configure the service is through a YAML configuration file. An example configuration is shown below.

Some of the ntfy notification options also accept a gval expression, rather than just a hardcoded value. This allows you to dynamically decide the value of certain notification properties based on the alert that the service is currently handling. For example, if an alert is resolved, you may want to show a different icon than when an alert is currently firing.

The title and description of the notification can be customized using Go's templating engine. Refer to the definition of the Alert struct in format.go for the data structure that is passed to the templates.

http:
  addr: :8000
  auth:
    username: "alertmanager"
    password: "verysecure"
ntfy:
  baseurl: https://ntfy.sh
  auth:
    username: "admin"
    password: "verysecure"
  notification:
    # The topic can either be a hardcoded string or a gval expression that evaluates to a string
    topic: alertmanager
    # Priority reference: https://docs.ntfy.sh/publish/#message-priority
    # Can either be a hardcoded string or a gval expression that evaluates to a string
    priority: |
      status == "firing" ? "urgent" : "default"
    tags:
      # Tags with no condition are always included
      # Emoji shortcode reference: https://docs.ntfy.sh/emojis/
      - tag: "+1"
        condition: status == "resolved"
      - tag: rotating_light
        condition: status == "firing"
    templates:
      title: |
        {{ if eq .Status "resolved" }}Resolved: {{ end }}{{ index .Annotations "summary" }}
      description: |
        {{ index .Annotations "description" }}

There are a couple of command line options as well that can be used to override settings in the config file.

Multiple configuration files

It is possible to split the configuration into multiple files. This allows you to to keep a separate encrypted file for all of the sensitive credential settings, while keeping the main configuration file in plain text. Simply pass a comma-separated list of filenames:

alertmanager-ntfy --configs config.yml,auth.yml

The configuration files will be merged automatically in-memory on startup of the service.

Example of a separate auth.yaml file:

http:
  auth:
    username: "alertmanager"
    password: "verysecure"
ntfy:
  auth:
    username: "admin"
    password: "verysecure"

Alertmanager

Assuming you've already set up Alertmanager for your Prometheus deployment, configuring it to send notifications to alertmanager-ntfy is fairly straightforward. Add a webhook_configs section to the receiver in your Alertmanager configuration file:

webhook_configs:
- url: http://127.0.0.1:8111/hook
  http_config:
    basic_auth:
      username: alertmanager
      password: verysecure

Replace the URL and username/password with values appropriate for your environment.

For a full overview of the available configuration options, refer to the Prometheus Alertmanager documentation.

NixOS

This repository comes with a NixOS module. To use it, simply add this repository as an input to your Nix flake and import the module into your NixOS configuration.

To replicate the configuration example above:

{
  services.alertmanager-ntfy = {
    enable = true;
    settings = {
      http = {
        addr = "127.0.0.1:8111";
      };
      ntfy = {
        baseurl = "https://ntfy.sh";
        notification = {
          topic = "alertmanager";
          priority = ''
            status == "firing" ? "high" : "default"
          '';
          tags = [
            {
              tag = "+1";
              condition = ''status == "resolved"'';
            }
            {
              tag = "rotating_light";
              condition = ''status == "firing"'';
            }
          ];
          templates = {
            title = ''{{ if eq .Status "resolved" }}Resolved: {{ end }}{{ index .Annotations "summary" }}'';
            description = ''{{ index .Annotations "description" }}'';
          };
        };
      };
    };
    extraSettingsPath = "/path/to/your/auth.yml";
  };
}

Directories

Path Synopsis
cmd
internal

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL