Skip to main content

AlertChannel Examples

Collection of AlertChannel configurations for different integrations.

Slack

Basic Slack Channel

slack-basic.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: team-slack
spec:
type: slack
slack:
webhookSecretRef:
name: slack-webhook
namespace: default
key: url

Customized Slack Channel

slack-custom.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: ops-slack
spec:
type: slack
slack:
webhookSecretRef:
name: slack-webhook
namespace: default
key: url
defaultChannel: "#cronjob-alerts"
messageTemplate: "*{{ .Severity | upper }}*: {{ .Title }}\n\n*CronJob*: {{ .Namespace }}/{{ .CronJobName }}\n*Time*: {{ .Timestamp }}\n\n{{ .Message }}"
rateLimiting:
burstLimit: 20
maxAlertsPerHour: 200

PagerDuty

Basic PagerDuty Channel

pagerduty-basic.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: ops-pagerduty
spec:
type: pagerduty
pagerduty:
routingKeySecretRef:
name: pagerduty-key
namespace: default
key: routingKey

PagerDuty with Severity Setting

pagerduty-critical.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: critical-pagerduty
spec:
type: pagerduty
pagerduty:
routingKeySecretRef:
name: pagerduty-key
namespace: default
key: routingKey
severity: critical
rateLimiting:
burstLimit: 30
maxAlertsPerHour: 300

Webhook

Generic Webhook

webhook-generic.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: custom-webhook
spec:
type: webhook
webhook:
urlSecretRef:
name: webhook-url
namespace: default
key: url
method: POST
headers:
Content-Type: application/json
X-Source: cronjob-guardian

Webhook with Custom Payload

webhook-custom.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: authed-webhook
spec:
type: webhook
webhook:
urlSecretRef:
name: webhook-url
namespace: default
key: url
headers:
Authorization: "Bearer your-token"
Content-Type: application/json
payloadTemplate: |
{
"source": "cronjob-guardian",
"severity": "{{ .Severity }}",
"cronjob": "{{ .Namespace }}/{{ .CronJobName }}",
"type": "{{ .AlertType }}",
"message": "{{ .Message }}",
"timestamp": "{{ .Timestamp }}"
}

Microsoft Teams Webhook

webhook-teams.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: teams-alerts
spec:
type: webhook
webhook:
urlSecretRef:
name: teams-webhook
namespace: default
key: url
payloadTemplate: |
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"themeColor": {{ if eq .Severity "critical" }}"FF0000"{{ else if eq .Severity "warning" }}"FFA500"{{ else }}"0076D7"{{ end }},
"summary": "{{ .Title }}",
"sections": [{
"activityTitle": "{{ .Title }}",
"facts": [
{"name": "CronJob", "value": "{{ .Namespace }}/{{ .CronJobName }}"},
{"name": "Severity", "value": "{{ .Severity | upper }}"},
{"name": "Type", "value": "{{ .AlertType }}"}
],
"text": "{{ .Message }}"
}],
"potentialAction": [{
"@type": "OpenUri",
"name": "View Dashboard",
"targets": [{"os": "default", "uri": "https://guardian.example.com"}]
}]
}

Discord Webhook

webhook-discord.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: discord-alerts
spec:
type: webhook
webhook:
urlSecretRef:
name: discord-webhook
namespace: default
key: url
payloadTemplate: |
{
"embeds": [{
"title": "{{ .Title }}",
"description": "{{ .Message }}",
"color": {{ if eq .Severity "critical" }}15158332{{ else if eq .Severity "warning" }}15105570{{ else }}3447003{{ end }},
"fields": [
{"name": "CronJob", "value": "{{ .Namespace }}/{{ .CronJobName }}", "inline": true},
{"name": "Severity", "value": "{{ .Severity | upper }}", "inline": true}
],
"timestamp": "{{ .Timestamp }}"
}]
}

Email

Basic Email Channel

email-basic.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: ops-email
spec:
type: email
email:
smtpSecretRef:
name: smtp-credentials
namespace: default
from: alerts@example.com
to:
- oncall@example.com

Email with Custom Template

email-custom.yaml
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: team-email
spec:
type: email
email:
smtpSecretRef:
name: smtp-credentials
namespace: default
from: cronjob-guardian@example.com
to:
- platform-team@example.com
subjectTemplate: "[{{ .Severity | upper }}] {{ .CronJobName }} - {{ .AlertType }}"
bodyTemplate: |
CronJob Guardian Alert

Title: {{ .Title }}

CronJob: {{ .Namespace }}/{{ .CronJobName }}
Severity: {{ .Severity | upper }}
Time: {{ .Timestamp }}

{{ .Message }}

{{ if .SuggestedFix }}
Suggested Fix:
{{ .SuggestedFix }}
{{ end }}

---
Sent by CronJob Guardian
rateLimiting:
burstLimit: 10
maxAlertsPerHour: 50

Multi-Channel Setup

Typical production setup with multiple channels:

multi-channel-setup.yaml
---
# Critical alerts to PagerDuty
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: pagerduty-critical
spec:
type: pagerduty
pagerduty:
routingKeySecretRef:
name: pagerduty-key
namespace: default
key: routingKey
severity: critical
---
# All alerts to Slack
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: ops-slack
spec:
type: slack
slack:
webhookSecretRef:
name: slack-webhook
namespace: default
key: url
defaultChannel: "#cronjob-alerts"
---
# Critical email for audit trail
apiVersion: guardian.illenium.net/v1alpha1
kind: AlertChannel
metadata:
name: audit-email
spec:
type: email
email:
smtpSecretRef:
name: smtp-credentials
namespace: default
from: alerts@example.com
to:
- audit-log@example.com
subjectTemplate: "[AUDIT] {{ .CronJobName }} - {{ .AlertType }}"