workflow:
id: pagerduty-incident-workflow
description: Create PagerDuty incident for alerts
name: pagerduty-incident-workflow
triggers:
- type: alert
filters:
- key: annotations.pagerduty-incident-workflow
value: enabled
consts:
severities: '{"S1": "critical","S2": "error","S3": "warning","S4": "info","critical": "critical","error": "error","warning": "warning","info": "info"}'
severity: keep.dictget( '{{ consts.severities }}', '{{ alert.annotations._gc_severity }}', 'info')
description: keep.dictget( {{ alert.annotations }}, "_gc_description", "")
title: keep.dictget( {{ alert.annotations }}, "_gc_issue_header", '{{ alert.alertname }}')
redacted_labels: keep.dict_pop({{ alert.labels }}, "_gc_monitor_id", "_gc_monitor_name", "_gc_severity", "backend_id", "grafana_folder")
env: keep.dictget( {{ alert.labels }}, "env", "- no env -")
namespace: keep.dictget( {{ alert.labels }}, "namespace", "- no namespace -")
workload: keep.dictget( {{ alert.labels }}, "workload", "- no workload -")
pod: keep.dictget( {{ alert.labels }}, "podName", "- no pod -")
issue: https://app.groundcover.com/monitors/issues?backendId={{ alert.labels.backend_id }}&selectedObjectId={{ alert.fingerprint }}
monitor: https://app.groundcover.com/monitors?backendId={{ alert.labels.backend_id }}&selectedObjectId={{ alert.labels._gc_monitor_id }}
silence: https://app.groundcover.com/monitors/create-silence?keep.replace(keep.join({{ consts.redacted_labels }}, "&", "matcher_"), " ", "+")
actions:
- name: pagerduty-alert
provider:
config: '{{ providers.pagerduty-integration-name }}'
type: pagerduty
with:
title: '{{ consts.title }}'
severity: '{{ consts.severity }}'
dedup_key: '{{alert.fingerprint}}'
custom_details:
01_environment: '{{ consts.env }}'
02_namespace: '{{ consts.namespace }}'
03_service_name: '{{ consts.workload }}'
04_pod: '{{ consts.pod }}'
05_labels: '{{ consts.redacted_labels }}'
06_monitor: '{{ consts.monitor }}'
07_issue: '{{ consts.issue }}'
08_silence: '{{ consts.silence }}'