
Operationalizing Falco: eBPF Driver Setup and Alert Routing
Falco is production-ready for runtime threat detection, but only if you commit to the modern eBPF driver and treat rule tuning as ongoing engineering, not a one-time install. To use Falco for eBPF security monitoring in earnest, skip the legacy kernel module, run the modern eBPF probe (or the gVisor driver where eBPF loading is blocked), pipe alerts through Falcosidekick into a real backend, and expect to spend real hours reading syscall traces before you trust a rule you wrote. Install it in an afternoon. Operating it is the actual work.
Last updated: 2026-07-21
What operationalizing Falco actually means
Installing the daemon is the easy 10%. The rest is driver choice, deployment topology, rule lifecycle, and where alerts go when a rule fires at 3 a.m.
Most teams stop at "Falco is running" and call it done. Then a real alert lands in a log nobody reads, or the console scrolls a thousand benign package-manager events and someone mutes the whole thing. That is not detection. That is a daemon burning CPU.
So when I say operationalize, I mean four commitments. Pick a driver that survives kernel upgrades. Deploy it so every node is covered. Tune rules against your actual workloads. And route output to a place a human or a system will act on. Miss any one and the other three are wasted.
Why use Falco for eBPF security monitoring?
Because runtime is the one place your scanners and admission policies cannot see. Image scanning and policy gates work before a container starts. Once code is running, only something watching system calls knows an attacker just spawned a shell in your payments pod.
Falco hooks the kernel and matches a stream of syscalls against rules. The eBPF path runs verified programs inside the kernel, so you get that visibility without loading a fragile out-of-tree module. It catches lateral movement and odd file access when signature-based tools see nothing, because it watches behavior, not hashes.
If you want to understand what it actually sees, go read what a shell spawn looks like from the kernel first. My guide on detecting a shell with eBPF walks the same syscalls Falco keys off.
Which Falco eBPF driver should you run in production
Run the modern eBPF probe. It is the correct default for any new deployment: actively maintained, no module compilation, and it works across most supported kernels. The Falco project documentation treats it as the recommended path, and so should you.
Here is the honest comparison of what you can load:
| Driver | When I use it | The catch |
|---|---|---|
| Modern eBPF probe | Default for new installs | Needs a recent-ish kernel; older LTS boxes may not qualify |
| Legacy eBPF probe | Older kernels the modern probe won't take | Being phased out; do not build new work on it |
| Kernel module | Only for a specific compatibility reason | Recompiles per kernel, breaks on upgrade, more to maintain |
| gVisor driver | Sandboxed or restricted hosts where eBPF loading is blocked | Only covers gVisor-sandboxed workloads |
The modern eBPF probe wants a Linux kernel of at least 3.10 to work at all, and realistically something newer for full feature support. Check your nodes before you promise coverage.
Avoid the kernel module unless something forces your hand. It compiles against your running kernel, and the morning after a kernel bump it silently fails to load. Reach for gVisor only when a locked-down environment refuses eBPF outright.
Deploying Falco as a DaemonSet across the cluster

Run it as a DaemonSet so one Falco pod lands on every node. Runtime detection is per-node work; the kernel each pod hooks is the node's kernel, so partial coverage means partial blindness.
The pod needs privilege to load its probe and read kernel events. That is not optional, and it is worth saying out loud in a cluster that otherwise bans privileged workloads. The Helm chart handles the mounts and capabilities, so start there rather than hand-writing the manifest.
In managed clusters the gotcha is the node image. On GKE, EKS, and AKS you do not control the kernel, and node pools drift as the provider updates images. Before you trust the eBPF probe fleet-wide, confirm it loads on every node pool, not just the one you tested. A node that came up on a newer image with a probe that failed to attach is a hole you won't notice until an incident.
Why eBPF stays lightweight compared to older instrumentation
Because the work happens in the kernel, on the syscall path, and the kernel verifies and JIT-compiles the program to native code before it runs. There is no per-event context switch to a user-space tracer for every syscall.
Compare that to the two older approaches. A kernel module gets you speed but hands you fragility and the risk of panicking the host. A ptrace-based tracer like plain strace stops the target on every syscall and drags throughput into the floor; useful for one process, unusable as always-on production monitoring.
Do not take the "lightweight" claim on faith. Measure it. Run your service under load with Falco off, then on, and watch CPU on the node. If overhead spikes, you probably have a chatty rule matching a hot syscall, not an eBPF problem. I've written more on cutting kernel overhead with eBPF if you want the mechanics.
How do you tune Falco rules without drowning in false positives?

Read the syscall the rule fired on before you touch the rule. Every Falco alert carries the process, the arguments, and the container context. That output tells you exactly what happened; your job is to decide whether it was your CI runner or an intruder.
Here is the workflow I actually use:
- Capture the noisy alert and note the rule name,
proc.name, and full command line. - Reproduce the benign trigger and confirm it under
straceor in the audit log, so you know the process is legitimate. - Write a narrow exception keyed to that binary and path, not a blanket disable.
- Re-run the workload and confirm the alert stops without silencing the real behavior.
What I never do is paste a giant community exception list to make the console quiet. That trades noise for blindness, and you inherit someone else's assumptions about what is safe in their cluster. The Falco community ruleset ships around 25 default detection rules, which gets you started but is nowhere near a finished policy. Treat those defaults as opinionated suggestions and tune from there. If you don't understand why a rule fired, don't suppress it yet.
The best tools for operationalizing Falco in production
Falco alone produces text. The tools around it turn that text into response. Here is the stack I'd consider the minimum for a real deployment, and where each one earns its place.
| Tool | What it does | My call |
|---|---|---|
| Falcosidekick | Fans alerts out to Slack, SIEM, webhooks, cloud logging | Non-negotiable; without it, output is logs nobody reads |
| Falco Talon | Runs automated response actions tied to specific rules | Add it once you need to kill or isolate, not just notify |
| Prometheus exporter | Exposes Falco health and event metrics | Needed so you notice when a probe stops reporting |
| Helm chart | Deploys the whole set consistently across nodes | Use it; hand-rolled manifests drift |
Falcosidekick is the piece that makes Falco operational instead of decorative. It takes the JSON Falco emits and delivers it somewhere a human or system reacts. Wire it to your SIEM and your on-call channel on day one.
Falco Talon is the next step, and only when you're ready for it. It fires an action, like deleting a pod or adding a network label, when a named rule triggers. Automated response is powerful and dangerous, so scope it to a handful of high-confidence rules before you let it touch production. For the enforcement side, my notes on runtime enforcement with eBPF cover the tradeoffs.
How Falco maps to MITRE ATT&CK and compliance
Falco rules carry tags, and many default rules are tagged with the MITRE ATT&CK technique they relate to. That lets you group detections by tactic and answer "what covers credential access?" without guessing. It's genuine value for a detection engineering program.
Do not oversell it as a compliance product. Falco produces evidence useful for PCI DSS and NIST audits, like a record that you monitor for unexpected privilege escalation. It does not make you compliant, and no vendor slide should claim it does. The mapping indexes your detections; it does not close the audit. Auditors want the whole control, and Falco is one input.
Writing custom rules for your own environment
Start from a default rule that's close, copy it, and narrow it. A rule is YAML with a condition, an output, a priority, and tags. Conditions read fields like proc.name, fd.name, and container.id, and you combine them with macros and lists so the whole thing stays readable.
The discipline that matters: test the rule against real events before you ship it. Feed it a capture of the behavior you want to catch and confirm it fires, then feed it your normal workload and confirm it stays quiet. A rule you didn't test against production traffic is a false-positive generator with a delay.
Anchor every condition to concrete process, file, or network context. Vague rules match everything and teach your team to ignore alerts. If you're building detection logic from raw syscalls, my walkthrough on tracing system calls with eBPF shows the fields Falco exposes.
Common failure modes when running Falco at scale
The failure you'll actually hit is a driver that won't load, and it hides in the kernel log. Run dmesg -T | tail and journalctl -u falco first; the probe usually says why it failed to attach before Falco even starts matching rules. A kernel too old for the modern probe, or a node image that changed under you, shows up right there.
Two more that only surface under pressure:
- Dropped events under load. When syscall volume spikes, Falco drops events rather than fall behind. Watch the drop counters in its metrics, because silent drops open detection gaps exactly when an attack floods the system.
- Version mismatch. The Falco userspace and its driver must agree on version. After an upgrade, a stale probe attaches but emits nothing useful, and the console just goes quiet. Quiet is not the same as safe.
The habit that saves you: alert on Falco's own health, not just on its detections. A monitoring tool that stopped monitoring should page you.
FAQ
Is Falco free, or do I need a commercial version?
The core engine, drivers, and community rules are open source and cost nothing. Vendors sell managed platforms on top for teams that want support and a hosted backend, but you can run the full stack yourself. Every production deployment I'd stand behind is the open-source pieces wired together.
Can Falco block an attack, or only detect it?
By itself it detects and alerts; it does not stop the process. Pair it with Falco Talon to take action, such as killing or isolating a pod, when a specific rule fires. Keep that scoped to rules you fully trust, because an automated kill on a false positive is an outage you caused.
Does Falco replace my SIEM?
No. Falco generates high-quality runtime events; your SIEM stores, correlates, and searches them alongside everything else. Send Falco output through Falcosidekick and let each do its job. Point it at Falco for long-term log retention and you'll blow out disk and lose search you actually needed.
How many nodes can one Falco deployment cover?
There's no central bottleneck, because each node runs its own agent as a DaemonSet. Scale is bounded by your alert pipeline and your ability to tune rules, not by Falco. The real limit is human: nobody triages a thousand nodes of untuned alerts.
What kernel do I need for the modern eBPF probe?
At minimum a Linux kernel of 3.10, which is the floor for eBPF support in the modern probe, though newer kernels give fuller feature coverage. Check every node pool before you trust fleet-wide coverage, since managed clusters change node images without asking. A node whose kernel is too old falls back or fails to attach, and catching that gap is on you.
