| JVM | Platform | Status |
|---|---|---|
| OpenJDK (Temurin) Current | Linux | |
| OpenJDK (Temurin) LTS | Linux | |
| OpenJDK (Temurin) Current | Windows | |
| OpenJDK (Temurin) LTS | Windows |
An AlertManager webhook used to allow posting alert messages to a Matrix channel.
- Post AlertManager alerts to a Matrix channel.
- Works with Prometheus.
- Works with Grafana Mimir.
- OSGi-ready
- JPMS-ready
- ISC license.
OCI images are available at quay.io.
Provide a configuration file providing the various required details. For
example, assume the following content in a file named config.json:
{
"%schema": "urn:com.io7m.garriga:configuration:1",
"HTTPServer": {
"ListenAddress": "::",
"ListenPort": 6000,
"AuthenticationToken": "some-random-token-value"
},
"MatrixClient": {
"BaseURI": "https://matrix.example.com",
"User": "@alerts:matrix.example.com",
"Password": "changeit",
"Channel": "#alerts:matrix.example.com"
}
}
Run garriga server --configuration-file config.json. The server will
bind to all addresses, listening on port 6000, and will attempt to connect
to the given Matrix server using the provided credentials. Anyone talking
to the server will be required to supply an
Authorization: Bearer some-random-token-value header.
The server exposes an endpoint at /4/send that expects POST requests
supplying data in the version 4 AlertManager
format.
An example of a real-life message is as follows:
{
"receiver": "matrix-webhook",
"status": "firing",
"alerts": [
{
"status": "firing",
"labels": {
"alertname": "HostFilesystemDeviceError",
"device": "srv/grafana01/matrix_forwarder/etc",
"fstype": "zfs",
"instance": "srv.example.com:9100",
"job": "dns-discovery",
"mountpoint": "/srv/grafana01/matrix_forwarder/etc",
"severity": "critical"
},
"annotations": {
"description": "srv.example.com:9100: Device error with the /srv/grafana01/matrix_forwarder/etc filesystem\n VALUE = 1\n LABELS = map[__name__:node_filesystem_device_error device:srv/grafana01/matrix_forwarder/etc fstype:zfs instance:srv.example.com:9100 job:dns-discovery mountpoint:/srv/grafana01/matrix_forwarder/etc]",
"summary": "Host filesystem device error (instance srv.example.com:9100)"
},
"startsAt": "2024-06-13T17:06:10.763Z",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "/graph?g0.expr=node_filesystem_device_error%7Bfstype%3D~%22ext2%7Cext4%7Czfs%7Cxfs%7Cvfat%22%7D+%3D%3D+1\u0026g0.tab=1",
"fingerprint": "530731b28264424f"
},
{
"status": "resolved",
"labels": {
"alertname": "HostSwapIsFillingUp",
"instance": "w01.example.com:9100",
"job": "dns-discovery",
"nodename": "w01",
"severity": "warning"
},
"annotations": {
"description": "Swap is filling up (\u003e80%)\n VALUE = 98.72484146349024\n LABELS = map[instance:w01.example.com:9100 job:dns-discovery nodename:workstation01]",
"summary": "Host swap is filling up (instance w01.example.com:9100)"
},
"startsAt": "2024-06-13T11:53:10.763Z",
"endsAt": "0001-01-01T00:00:00Z",
"generatorURL": "/graph?g0.expr=%28%281+-+%28node_memory_SwapFree_bytes+%2F+node_memory_SwapTotal_bytes%29%29+%2A+100+%3E+80%29+%2A+on+%28instance%29+group_left+%28nodename%29+node_uname_info%7Bnodename%3D~%22.%2B%22%7D\u0026g0.tab=1",
"fingerprint": "983929006a0177d3"
}
],
"groupLabels": {},
"commonLabels": {
"job": "dns-discovery"
},
"commonAnnotations": {},
"externalURL": "http://localhost:8080/alertmanager",
"version": "4",
"groupKey": "{}/{}:{}",
"truncatedAlerts": 0
}
