Initial commit: unified alerting mesh with Discord webhooks

This commit is contained in:
2025-08-09 21:45:50 -04:00
commit c79b54deee
7 changed files with 70 additions and 0 deletions

30
README.md Normal file
View File

@@ -0,0 +1,30 @@
## Real-Time Infrastructure Notifications to Discord
While these integrations are well-documented individually, this repo shows how to unify them—turning backup failures, uptime blips, and firewall bans into a single, coherent signal loop for live infrastructure resilience.
Production services dont operate in silence. Borgmatic, HetrixTools, and CrowdSec all speak through Discord webhook alerts—giving my infrastructure a voice when it matters most.
### Files
- configs/crowdsec-discord.yaml (redacted sensitive info)
- configs/borgmatic-discord.yaml (redacted sensitive info)
- configs/hetrixtools-discord.png (redacted sensitive info)
- README.md (this file)
### Alert Examples (Screenshots)
- screenshots/crowdsec.png
- screenshots/borgmatic.png
- screenshots/hetrixtools.png
### What It Covers
- Backup success/failure (Borgmatic)
- Uptime monitoring (HetrixTools)
- Firewall bans (CrowdSec)
### Visual Examples
- CrowdSec → Discord channel for banned IP alerts
- Borgmatic → Backup status updates (success/fail/start)
- HetrixTools → Uptime monitoring notifications
### Philosophy
No custom scripts. Just good tools, smart defaults, and clear signals.
This setup favors simplicity and resilience—less to break, easier to trust.

View File

@@ -0,0 +1,19 @@
# Added to /etc/borgmatic/config.yaml
apprise:
services:
- url: https://discord.com/api/webhooks/xxxxxxxx/xxxxxxxx
label: discord
start:
title: Ping! (Triton)
body: Starting backup process.
finish:
title: Ping! (Triton)
body: Backups successfully made.
fail:
title: Ping! (Triton)
body: Your backups have failed.
states:
- start
- finish
- fail
logs_size_limit: 25

View File

@@ -0,0 +1,21 @@
#
# /etc/crowdsec/notifications/discord.yaml
#
type: http
name: discord
log_level: info
format: |
{
"content": "```\nTriton\n{{range . -}}{{$alert := . -}}{{range .Decisions -}}- {{.Value}} will get **{{.Type}}** for the next '{{.Duration}}'>
}
url: https://discord.com/api/webhooks/xxxxxxxxxx/xxxxxxxxxx
method: POST
headers:
Content-Type: application/json
# then, comment out on /etc/crowdsec/profiles.yaml
notifications:
- discord

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

BIN
screenshots/borgmatic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

BIN
screenshots/crowdsec.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 84 KiB

BIN
screenshots/hetrixtools.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB