Route runtime alerts to external destinations
What you’ll accomplish
Section titled “What you’ll accomplish”You’ll configure Falcosidekick to forward runtime security alerts to Slack, Mattermost, or Microsoft Teams so your security operations team receives real-time notifications when Falco detects suspicious activity.
Prerequisites
Section titled “Prerequisites”- UDS Core deployed
- UDS CLI installed
- Access to a Kubernetes cluster
- Webhook URL for your target platform (Slack, Mattermost, or Teams)
Before you begin
Section titled “Before you begin”By default, Falco events are shipped to Loki for centralized log aggregation and are queryable in Grafana. This guide adds external alert forwarding on top of Loki — it does not replace the default Loki integration.
-
Configure your output destination and network egress
Each destination requires two overrides: the webhook config in the
falcochart, and a network egress allow in theuds-falco-configchart.uds-bundle.yaml packages:- name: corerepository: registry.defenseunicorns.com/public/coreref: x.x.x-upstreamoverrides:falco:falco:values:- path: falcosidekick.config.slackvalue:webhookurl: "<YOUR_SLACK_WEBHOOK_URL>"channel: "#<YOUR_SLACK_CHANNEL>"outputformat: "all"minimumpriority: "notice"uds-falco-config:values:- path: additionalNetworkAllowvalue:- direction: Egressselector:app.kubernetes.io/name: falcosidekickports:- 443remoteHost: hooks.slack.comremoteProtocol: TLSdescription: "Allow Falcosidekick egress to Slack API"Setting Description webhookurlSlack incoming webhook URL (format: https://hooks.slack.com/services/XXXX/YYYY/ZZZZ)channelSlack channel to post to (optional — defaults to the webhook’s configured channel) outputformatall(default),text(text only), orfields(fields only)minimumpriorityMinimum Falco priority to forward: emergency,alert,critical,error,warning,notice,informational,debuguds-bundle.yaml packages:- name: corerepository: registry.defenseunicorns.com/public/coreref: x.x.x-upstreamoverrides:falco:falco:values:- path: falcosidekick.config.mattermostvalue:webhookurl: "<YOUR_MATTERMOST_WEBHOOK_URL>"outputformat: "all"minimumpriority: "notice"uds-falco-config:values:- path: additionalNetworkAllowvalue:- direction: Egressselector:app.kubernetes.io/name: falcosidekickports:- 443remoteHost: <your-mattermost-hostname>remoteProtocol: TLSdescription: "Allow Falcosidekick egress to Mattermost"Setting Description webhookurlMattermost incoming webhook URL (format: https://your.mattermost.instance/hooks/YYYY)outputformatall(default),text(text only), orfields(fields only)minimumpriorityMinimum Falco priority to forward: emergency,alert,critical,error,warning,notice,informational,debuguds-bundle.yaml packages:- name: corerepository: registry.defenseunicorns.com/public/coreref: x.x.x-upstreamoverrides:falco:falco:values:- path: falcosidekick.config.teamsvalue:webhookurl: "<YOUR_TEAMS_WEBHOOK_URL>"outputformat: "all"minimumpriority: "notice"uds-falco-config:values:- path: additionalNetworkAllowvalue:- direction: Egressselector:app.kubernetes.io/name: falcosidekickports:- 443remoteHost: outlook.office.comremoteProtocol: TLSdescription: "Allow Falcosidekick egress to Microsoft Teams"Setting Description webhookurlTeams incoming webhook URL (format: https://outlook.office.com/webhook/XXXXXX/IncomingWebhook/YYYYYY)outputformatall(default),text(text only), orfacts(facts only)minimumpriorityMinimum Falco priority to forward: emergency,alert,critical,error,warning,notice,informational,debug -
Create and deploy your bundle
Terminal window uds create <path-to-bundle-dir>uds deploy uds-bundle-<name>-<arch>-<version>.tar.zst
Verification
Section titled “Verification”Confirm Falcosidekick is running and delivering alerts:
# Check Falcosidekick pods are runninguds zarf tools kubectl get pods -n falco -l app.kubernetes.io/name=falcosidekick
# Check Falcosidekick logs for output deliveryuds zarf tools kubectl logs -n falco -l app.kubernetes.io/name=falcosidekick --tail=20Trigger a test detection:
# Exec into any running pod to trigger the "Terminal shell in container" ruleuds zarf tools kubectl exec -it -n <any-namespace> <any-pod> -- /bin/shAfter a few seconds, confirm the alert appears in your configured destination (Slack channel, Mattermost channel, or Teams channel).
Troubleshooting
Section titled “Troubleshooting”Problem: Alerts are not reaching the external destination
Section titled “Problem: Alerts are not reaching the external destination”Symptoms: Falcosidekick logs show connection errors or timeouts when trying to deliver alerts.
Solution: Verify the additionalNetworkAllow entry is correct:
- Confirm
remoteHostmatches the actual hostname being contacted (e.g.,hooks.slack.comfor Slack) - Confirm the
selectormatchesapp.kubernetes.io/name: falcosidekick - Check that the port matches (typically
443for HTTPS webhooks)
# Check if the network policy was createduds zarf tools kubectl get networkpolicy -n falcoProblem: Falcosidekick logs show “webhook returned non-200”
Section titled “Problem: Falcosidekick logs show “webhook returned non-200””Symptoms: Falcosidekick reaches the endpoint but gets an error response.
Solution: Verify the webhook URL is correct and active. For Slack, confirm the app is still installed in the workspace. For Mattermost, confirm the incoming webhook is enabled. For Teams, confirm the connector is still active.
Related Documentation
Section titled “Related Documentation”- Falcosidekick outputs — full list of supported output destinations
- Runtime security concepts — background on how Falco and Falcosidekick work in UDS Core
- High availability: Runtime security — tune Falcosidekick replica count for resilient alert delivery
Next steps
Section titled “Next steps”These guides and concepts may be useful to explore next: