You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
Go to file
Simon Marsh f795204559
continuous-integration/drone/push Build is passing Details
Add badge
1 year ago
.github/workflows Update go version list used in github workflows 2 years ago
logging logging: clarify call depth value 2 years ago
.drone.yml drone pipeline 1 year ago
.gitignore Add Go modules vendoring. 3 years ago
CONTRIBUTING.md Initial code check-in 5 years ago
Dockerfile Add a basic Docker file. 2 years ago
LICENSE Initial code check-in 5 years ago
README.md Add badge 1 year ago
backoff.go add own logging and define debug flag 2 years ago
backoff_test.go Add tests for channel join retry logic 2 years ago
config.go Handle Atheme NickServ IDENTIFY NOTICE 2 years ago
config_test.go Make alert channel size configurable (and bigger) 3 years ago
context.go add own logging and define debug flag 2 years ago
data.go s/notice/msg/ 3 years ago
fake_delayer.go add own logging and define debug flag 2 years ago
fake_timeteller.go Add tests for channel join retry logic 2 years ago
format.go Handle alert messages with newlines 2 years ago
format_test.go Handle alert messages with newlines 2 years ago
go.mod update goirc version, mod tidy 2 years ago
go.sum update goirc version, mod tidy 2 years ago
http.go add own logging and define debug flag 2 years ago
http_test.go Use Context and WaitGroup for routines coordination 2 years ago
irc.go add underline cleanup 2 years ago
irc_server_for_test.go add own logging and define debug flag 2 years ago
irc_test.go explicitly handle nickserv identify request 2 years ago
main.go add own logging and define debug flag 2 years ago
reconciler.go try to unban ourselves before joining a channel 2 years ago
reconciler_test.go Add tests for channel join retry logic 2 years ago
testdata.go Update tests to handle new fingerprint field 3 years ago
time.go Add tests for channel join retry logic 2 years ago

README.md

Alertmanager IRC Relay

Build Status

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

# Patterns used to guess whether NickServ is asking us to IDENTIFY
# Note: If you need to change this because the bot is not catching a request
# from a rather common NickServ, please consider sending a PR to update the
# default config instead.
nickserv_identify_patterns:
  - "identify via /msg NickServ identify <password>"
  - "type /msg NickServ IDENTIFY password"
  - "authenticate yourself to services with the IDENTIFY command"

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