mod_pubsub_alertmanager

Introduction

This module lets Alertmanager publish alerts to pubsub via webhooks.

Setup

The relevant pubsub nodes must be created and configured somehow. Because the request IP address is used to publish, the publisher affiliation should be given to the IP address Alertmanager sends webhooks from.

Configuration

Prometheus

A Prometheus rule_files might contain something along these lines:

groups:
- name: Stuff
  rules:
  - alert: Down
    expr: up == 0
    for: 5m
    annotations:
      title: 'Stuff is down!'
    labels:
      severity: 'critical'

Alertmanager

On the Alertmanager site the webhook configuration may look something like this:

receivers:
- name: pubsub
  webhook_configs:
  - url: http://pubsub.localhost:5280/pubsub_alertmanager

And then finally some Alertmanager routes would point at that receiver:

route:
  receiver: pubsub

Prosody

On the Prosody side, apart from creating and configuring the node(s) that will be used, configure your pubsub service like this:

Component "pubsub.example.com" "pubsub"
modules_enabled = {
    "pubsub_alertmanager",
}

-- optional extra settings:
alertmanager_body_template = [[
*ALARM!* {annotations.title?Alert} is {status}
Since {startsAt}{endsAt& until {endsAt}}
Labels: {labels%
  {idx}: {item}}
Annotations: {annotations%
  {idx}: {item}}
]]

alertmanager_node_template = "alerts/{alert.labels.severity}"

If no node template is given, either an optional part after “pubsub_alertmanager” in the HTTP path is used as node, or the string “alerts”. Here, an alerts would be published to different nodes based on the ‘severity’ label, so e.g. alerts/critical in this example.

All Options

Available configuration options:

alertmanager_body_template
Template for the textual representation of alerts.
alertmanager_node_template
Template for the pubsub node name, defaults to "{path?alerts}"
alertmanager_path_configs
Per-path configuration variables (see below).

Per-path configuration

It’s possible to override configuration options based on the path suffix. For example, if a request is made to http://prosody/pubsub_alertmanager/foo the path suffix is foo. You can then supply the following configuration:

alertmanager_path_configs = {
    foo = {
        node_template = "alerts/{alert.labels.severity}";
        publisher = "user@example.net";
    };
}

Installation

With the plugin installer in Prosody 0.12 you can use:

sudo prosodyctl install --server=https://modules.prosody.im/rocks/ mod_pubsub_alertmanager

For earlier versions see the documentation for installing 3rd party modules