Send Prometheus Alerts to IRC using Webhooks
Go to file
Luca Bigliardi 0ec08d5ea1 stop storing context received from outside
Signed-off-by: Luca Bigliardi <shammash@google.com>
2021-03-27 12:35:38 +01:00
.github/workflows Update go version list used in github workflows 2021-03-03 16:42:20 +01:00
.gitignore Add Go modules vendoring. 2020-01-30 17:43:17 +01:00
backoff_test.go Add Context support to Backoff 2021-02-24 17:14:40 +01:00
backoff.go Add factory-like interface to generate Delayers 2021-03-26 12:34:36 +01:00
config_test.go Make alert channel size configurable (and bigger) 2020-11-25 16:06:12 +01:00
config.go Make alert channel size configurable (and bigger) 2020-11-25 16:06:12 +01:00
CONTRIBUTING.md Initial code check-in 2018-05-21 15:49:47 +01:00
data.go s/notice/msg/ 2020-01-25 16:42:59 +00:00
fake_delayer.go Add factory-like interface to generate Delayers 2021-03-26 12:34:36 +01:00
format_test.go Add Path/Query Escape functions 2020-11-10 11:01:49 +01:00
format.go Add Path/Query Escape functions 2020-11-10 11:01:49 +01:00
go.mod Update go version list used in github workflows 2021-03-03 16:42:20 +01:00
go.sum Use goirc ConnectContext 2021-03-03 16:13:34 +01:00
http_test.go Use Context and WaitGroup for routines coordination 2021-02-24 15:49:33 +01:00
http.go syntax refactor: use shorter object name in methods 2021-03-21 19:48:19 +01:00
irc_server_for_test.go rename test server to avoid bundling with binary 2021-03-27 02:21:41 +01:00
irc_test.go stop storing context received from outside 2021-03-27 12:35:38 +01:00
irc.go stop storing context received from outside 2021-03-27 12:35:38 +01:00
LICENSE Initial code check-in 2018-05-21 15:49:47 +01:00
main.go stop storing context received from outside 2021-03-27 12:35:38 +01:00
README.md Make alert channel size configurable (and bigger) 2020-11-25 16:06:12 +01:00
reconciler_test.go new channel management logic 2021-03-27 00:49:16 +01:00
reconciler.go new channel management logic 2021-03-27 00:49:16 +01:00
testdata.go Update tests to handle new fingerprint field 2020-01-25 16:16:10 +00:00

Alertmanager IRC Relay

Alertmanager IRC Relay is a bot relaying Prometheus alerts to IRC. Alerts are received from Prometheus using Webhooks and are relayed to an IRC channel.

Configuring and running the bot

To configure and run the bot you need to create a YAML configuration file and pass it to the service. Running the service without a configuration will use the default test values and connect to a default IRC channel, which you probably do not want to do.

Example configuration:

# Start the HTTP server receiving alerts from Prometheus Webhook binding to
# this host/port.
#
http_host: localhost
http_port: 8000

# Connect to this IRC host/port.
#
# Note: SSL is enabled by default, use "irc_use_ssl: no" to disable.
irc_host: irc.example.com
irc_port: 7000
# Optionally set the server password
irc_host_password: myserver_password

# Use this IRC nickname.
irc_nickname: myalertbot
# Password used to identify with NickServ
irc_nickname_password: mynickserv_key
# Use this IRC real name
irc_realname: myrealname

# Optionally pre-join certain channels.
#
# Note: If an alert is sent to a non # pre-joined channel the bot will join
# that channel anyway before sending the message. Of course this cannot work
# with password-protected channels.
irc_channels:
  - name: "#mychannel"
  - name: "#myprivatechannel"
    password: myprivatechannel_key

# Define how IRC messages should be sent.
#
# Send only one message when webhook data is received.
# Note: By default a message is sent for each alert in the webhook data.
msg_once_per_alert_group: no
#
# Use PRIVMSG instead of NOTICE (default) to send messages.
# Note: Sending PRIVMSG from bots is bad practice, do not enable this unless
# necessary (e.g. unless NOTICEs would weaken your channel moderation policies)
use_privmsg: yes

# Define how IRC messages should be formatted.
#
# The formatting is based on golang's text/template .
msg_template: "Alert {{ .Labels.alertname }} on {{ .Labels.instance }} is {{ .Status }}"
# Note: When sending only one message per alert group the default
# msg_template is set to
# "Alert {{ .GroupLabels.alertname }} for {{ .GroupLabels.job }} is {{ .Status }}"

# Set the internal buffer size for alerts received but not yet sent to IRC.
alert_buffer_size: 2048

Running the bot (assuming GOPATH* and *PATH are properly setup for go):

$ go install github.com/google/alertmanager-irc-relay
$ alertmanager-irc-relay --config /path/to/your/config/file

The configuration file can reference environment variables. It is then possible to specify certain parameters directly when running the bot:

$ cat /path/to/your/config/file
...
http_port: $MY_SERVICE_PORT
...
irc_nickname_password: $NICKSERV_PASSWORD
...
$ export MY_SERVICE_PORT=8000 NICKSERV_PASSWORD=mynickserv_key
$ alertmanager-irc-relay --config /path/to/your/config/file

Prometheus configuration

Prometheus can be configured following the official Webhooks documentation. The url must specify the IRC channel name that alerts should be sent to:

send_resolved: false
url: http://localhost:8000/mychannel