commit bc0efdb859f1ed1fd8e00152be52b6b2ac5e7d20
parent 617a7a76a455785d0432f16868aa5161d251972b
Author: Thomas Maier <contact@thomas-maier.net>
Date: Tue, 11 Dec 2018 17:30:13 +0100
some work on Prometheus alerts (WiP)
Diffstat:
5 files changed, 65 insertions(+), 0 deletions(-)
diff --git a/dev/alertmanager-docker.yml b/dev/alertmanager-docker.yml
@@ -0,0 +1,11 @@
+version: "3.7"
+services:
+ alertmanager:
+ image: prom/alertmanager:v0.15.3
+ volumes:
+ - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
+ ports:
+ - target: 9093
+ published: 9093
+ protocol: tcp
+ mode: host
diff --git a/dev/alertmanager.yml b/dev/alertmanager.yml
@@ -0,0 +1,14 @@
+global:
+ resolve_timeout: 30s
+
+route:
+ group_by: ['alertname']
+ group_wait: 1s
+ group_interval: 1s
+ repeat_interval: 10s
+ receiver: 'xmpp-webhook'
+
+receivers:
+ - name: 'xmpp-webhook'
+ webhook_configs:
+ - url: 'http://172.17.0.1:4321/prometheus'
diff --git a/dev/prometheus-testalert.sh b/dev/prometheus-testalert.sh
@@ -0,0 +1,3 @@
+#!/usr/bin/env bash
+
+curl -H "Content-Type: application/json" -d '[{"labels":{"alertname":"XMPPTest"}}]' localhost:9093/api/v1/alerts
diff --git a/handler.go b/handler.go
@@ -69,3 +69,37 @@ func grafanaParserFunc(r *http.Request) (string, error) {
return message, nil
}
+
+/****************
+PROMETHEUS PARSER
+****************/
+func prometheusParserFunc(r *http.Request) (string, error) {
+ // get alert data from request
+ body, err := ioutil.ReadAll(r.Body)
+ if err != nil {
+ return "", err
+ }
+
+ // prometheus alert struct
+ alert := &struct {
+ Status string `json:"status"`
+ ExternalURL string `json:"externalURL"`
+ }{}
+
+ // parse body into the alert struct
+ err = json.Unmarshal(body, &alert)
+ if err != nil {
+ return "", err
+ }
+
+ // contruct alert message
+ var message string
+ switch alert.Status {
+ case "resolved":
+ message = ":) " + alert.ExternalURL
+ default:
+ message = ":( " + alert.ExternalURL
+ }
+
+ return message, nil
+}
diff --git a/main.go b/main.go
@@ -97,6 +97,9 @@ func main() {
// initialize handler for grafana alerts
http.Handle("/grafana", newMessageHandler(messages, grafanaParserFunc))
+ // initialize handler for grafana alerts
+ http.Handle("/prometheus", newMessageHandler(messages, prometheusParserFunc))
+
// listen for requests
http.ListenAndServe(":4321", nil)
}