From 9d565bdddcfab8f95af36da570e9149b476630f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey?= Date: Mon, 13 Apr 2026 16:33:47 -0700 Subject: [PATCH 1/2] feat(spore): add Slack contact point for Grafana alerting Switches from ntfy (unsupported in Grafana 12) to the native Slack contact point. Alerts post to #updates as "Grafana" with :grafana: icon. Bot token stored as an agenix secret. Co-Authored-By: Claude Sonnet 4.6 --- hosts/spore/services/grafana.nix | 27 +++++++++++++++++++++++++++ lib/secrets/spore.nix | 1 + 2 files changed, 28 insertions(+) diff --git a/hosts/spore/services/grafana.nix b/hosts/spore/services/grafana.nix index b385036c..a8244562 100644 --- a/hosts/spore/services/grafana.nix +++ b/hosts/spore/services/grafana.nix @@ -3,6 +3,13 @@ pkgs, ... }: { + age.secrets.slack-bot-token = { + file = ./../secrets/slack-bot-token.age; + mode = "440"; + owner = "grafana"; + group = "grafana"; + }; + age.secrets.grafana-client-secret = { file = ./../secrets/grafana-client-secret.age; mode = "440"; @@ -65,6 +72,26 @@ disableDeletion = true; } ]; + alerting.contactPoints.settings.contactPoints = [ + { + name = "slack"; + receivers = [ + { + uid = "slack"; + type = "slack"; + settings = { + token = "$__file{${config.age.secrets.slack-bot-token.path}}"; + recipient = "#updates"; + username = "Grafana"; + icon_emoji = ":grafana:"; + title = ''{{ if .Alerts.Firing }}[FIRING] {{ .GroupLabels.alertname }}{{ else }}[RESOLVED] {{ .GroupLabels.alertname }}{{ end }}''; + text = '' {{ range .Alerts }}• {{ .Labels.alertname }}: {{ .Annotations.summary }} + {{ end }}''; + }; + } + ]; + } + ]; datasources.settings.datasources = [ { name = "Prometheus"; diff --git a/lib/secrets/spore.nix b/lib/secrets/spore.nix index c1814d85..7c414e3b 100644 --- a/lib/secrets/spore.nix +++ b/lib/secrets/spore.nix @@ -5,6 +5,7 @@ in { "hosts/spore/secrets/homepage-env.age".publicKeys = keys; "hosts/spore/secrets/grafana-client-secret.age".publicKeys = keys; "hosts/spore/secrets/grafana-secret-key.age".publicKeys = keys; + "hosts/spore/secrets/slack-bot-token.age".publicKeys = keys; "hosts/spore/secrets/mastodon-s3-env.age".publicKeys = keys; "hosts/spore/secrets/mastodon-secret-key-base.age".publicKeys = keys; "hosts/spore/secrets/mastodon-vapid-public-key.age".publicKeys = keys; From 937e79583924e1742bb1a363714b7a1bf4d4ea75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=9C=BF=20corey=20=28they/them=29?= Date: Mon, 13 Apr 2026 17:30:45 -0700 Subject: [PATCH 2/2] feat(spore): add Slack contact point for Grafana alerting Provisions a Slack contact point using the bot token. Alerts post to #updates as "Grafana" with :grafana: icon. Sets resolve_timeout to 1m so resolved notifications fire promptly. Co-Authored-By: Claude Sonnet 4.6 --- hosts/spore/secrets/slack-bot-token.age | 8 ++++++++ hosts/spore/services/grafana.nix | 3 +++ 2 files changed, 11 insertions(+) create mode 100644 hosts/spore/secrets/slack-bot-token.age diff --git a/hosts/spore/secrets/slack-bot-token.age b/hosts/spore/secrets/slack-bot-token.age new file mode 100644 index 00000000..24da8557 --- /dev/null +++ b/hosts/spore/secrets/slack-bot-token.age @@ -0,0 +1,8 @@ +age-encryption.org/v1 +-> ssh-ed25519 2AxgaQ oKkoEjYcgXktA9sNVH5mXQhVJ4HzeLsIR1ZrZ37CNkE +WIi/YJAQmjM8gWUx2uQXKWi+I78cOC3+tr863YJIbM4 +-> ssh-ed25519 3EWhnQ P/dtWfDXzTku43X2CUDppuD4HPVNbzpyT/R7zXrNlz8 +1Xn1iNl1ZpSQjV8SGgN5Vm5FkIwmXK5fhwZ7zPIakVk +--- 5VZabemaH3g5yvwDDJjRnjmPKmRNKVUeeImQgeW0FL0 +a]d΂3CVY* +NE8` wYjUe;χL)J&~UYEQyT \ No newline at end of file diff --git a/hosts/spore/services/grafana.nix b/hosts/spore/services/grafana.nix index a8244562..3afa475f 100644 --- a/hosts/spore/services/grafana.nix +++ b/hosts/spore/services/grafana.nix @@ -62,6 +62,9 @@ admin_email = "corey@zx.dev"; secret_key = "$__file{${config.age.secrets.grafana-secret-key.path}}"; }; + unified_alerting = { + resolve_timeout = "1m"; + }; }; provision = { enable = true;