Falcosidekick on Ubuntu: Complete Installation, Configuration, Alert Forwarding, and Troubleshooting Tutorial

I read your Falco: Zero to Intermediate – Gold-Standard Hands-on Master Tutorial. It uses Ubuntu Server 24.04 LTS as its reference lab and covers Falco installation, runtime detection, alerts, and integrations.

Tutorials

Let’s extend that tutorial with a practical, end-to-end lab: install Falcosidekick on Ubuntu, connect it to Falco, generate test security events, and investigate the alerts.

1. Understand what we are building

Ubuntu 24.04 — Falco

Detects suspicious runtime activity

HTTP POST — JSON events

Falcosidekick — port 2801

Receives, enriches and forwards alerts

HTTP forwarding

Falcosidekick UI — optional

Visual alert investigation, normally port 2802

Falco is the detection engine. Falcosidekick is the alert-routing component; it is not itself the security detector. The UI is a separate component. On a standalone Ubuntu host, we can install Falcosidekick as a systemd service and configure Falco to send it JSON events over HTTP.

GitHub

+1

Our lab goals

  • Confirm that Falco is working.
  • Install and start Falcosidekick.
  • Connect Falco to Falcosidekick.
  • Generate safe, controlled test activity.
  • View the alerts and investigate the process, command, user, and event priority.
  • Troubleshoot events that do not arrive.

2. Step 1 — Check your Ubuntu and Falco installation

Run these commands on your Ubuntu server or VM.

# Check Ubuntu version
lsb_release -a

# Check CPU architecture
uname -m

# Check Linux kernel
uname -r

# Check whether Falco is installed
falco --version

# Find installed Falco services
systemctl list-unit-files | grep -i falco

# Check the Falco service status
sudo systemctl status falco-modern-bpf.service --no-pager

The tutorial uses the service falco-modern-bpf.service for its modern eBPF lab. Your installation might use a different service name, so check the service list if the last command reports that the unit does not exist.

Tutorials

If Falco is already running, continue to Step 2. If it is not installed, use the official Falco Linux installation guide to install it and configure a supported driver before proceeding.

3. Step 2 — Install Falcosidekick on Ubuntu

We will install Falcosidekick as a native Linux service rather than using Kubernetes or Docker. This is suitable for a standalone Ubuntu lab.

3.1 Install the required utilities

sudo apt-get update
sudo apt-get install -y curl wget ca-certificates tar

3.2 Download the latest Falcosidekick release

The following commands discover the latest GitHub release and download the correct archive for an x86-64 or ARM64 machine.

# Detect the machine architecture
ARCH="$(dpkg --print-architecture)"

case "$ARCH" in
  amd64)  SIDekICK_ARCH="amd64" ;;
  arm64)  SIDekICK_ARCH="arm64" ;;
  *)
    echo "Unsupported architecture: $ARCH"
    exit 1
    ;;
esac

# Get the latest release tag from GitHub
VERSION="$(curl -fsSL \
  https://api.github.com/repos/falcosecurity/falcosidekick/releases/latest \
  | grep '"tag_name":' \
  | head -n 1 \
  | cut -d '"' -f 4)"

echo "Architecture: $ARCH"
echo "Release: $VERSION"

# Download the matching release archive
curl -fL \
  "https://github.com/falcosecurity/falcosidekick/releases/download/${VERSION}/falcosidekick_${VERSION}_linux_${SIDekICK_ARCH}.tar.gz" \
  -o /tmp/falcosidekick.tar.gz

Check the release and archive before extracting:

# Inspect the downloaded archive
tar -tzf /tmp/falcosidekick.tar.gz | head -n 20

# Extract into a temporary directory
mkdir -p /tmp/falcosidekick-install
tar -xzf /tmp/falcosidekick.tar.gz \
  -C /tmp/falcosidekick-install

# Locate the binary
find /tmp/falcosidekick-install -type f -name falcosidekick

If the archive contains the binary at the expected path, install it:

# Install the executable
sudo install -m 0755 \
  /tmp/falcosidekick-install/falcosidekick \
  /usr/local/bin/falcosidekick

# Verify the binary
/usr/local/bin/falcosidekick --help

These steps follow the project’s documented native-host installation approach.

GitHub

If the download returns 404: inspect the current release assets at Falcosidekick releases and adjust the archive filename to match the published asset.

4. Step 3 — Create the Falcosidekick configuration

Create the configuration directory:

sudo mkdir -p /etc/falcosidekick

Create the configuration file:

sudo tee /etc/falcosidekick/config.yaml > /dev/null <<'EOF'
# Falcosidekick listener configuration
listenaddress: "127.0.0.1"
listenport: 2801

# Keep debug disabled unless troubleshooting
debug: false
EOF

This configuration binds Falcosidekick to the local loopback interface on port 2801. That is appropriate when Falco and Falcosidekick run on the same Ubuntu machine.

Check the configuration:

sudo cat /etc/falcosidekick/config.yaml

For this first lab, we are not configuring Slack, email, a SIEM, or any other external destination. Falcosidekick can receive alerts without an external forwarding integration. For additional configuration options, see the official Falcosidekick project documentation.

GitHub

5. Step 4 — Create a systemd service

Create the service file:

sudo tee /etc/systemd/system/falcosidekick.service > /dev/null <<'EOF'
[Unit]
Description=Falcosidekick Alert Forwarder
After=network.target

[Service]
Type=simple
ExecStart=/usr/local/bin/falcosidekick -c /etc/falcosidekick/config.yaml
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

Reload systemd and start Falcosidekick:

# Tell systemd to load the new service
sudo systemctl daemon-reload

# Enable startup after reboot and start now
sudo systemctl enable --now falcosidekick

# Check the service
sudo systemctl status falcosidekick --no-pager

# Read recent logs
sudo journalctl -u falcosidekick -n 50 --no-pager

Test its health endpoint:

curl -i http://127.0.0.1:2801/healthz

Expected result: an HTTP 200 status. If the service is not running, check its journal for configuration errors or port conflicts before moving on.

GitHub

6. Step 5 — Connect Falco to Falcosidekick

This is the most important step. Installing Falcosidekick alone does not automatically connect it to Falco.

6.1 Back up the existing Falco configuration

# Back up the main configuration before editing
sudo cp -a /etc/falco/falco.yaml \
  /etc/falco/falco.yaml.before-falcosidekick

# Find the relevant existing settings
sudo grep -nE \
  '^(json_output:|json_include_output_property:|http_output:|  enabled:|  url:)' \
  /etc/falco/falco.yaml

6.2 Edit the Falco configuration

sudo nano /etc/falco/falco.yaml

Find the existing top-level JSON and HTTP output settings. Enable JSON output and HTTP forwarding, using the following values:

# Emit structured JSON alerts
json_output: true

# Include the human-readable alert output in the JSON
json_include_output_property: true

# Forward Falco alerts to Falcosidekick
http_output:
  enabled: true
  url: "http://127.0.0.1:2801/"

Important: merge these values into the existing configuration. Do not append duplicate top-level keys or replace the entire file. Keep any other settings that your Falco installation needs.

The HTTP output URL must point to the address where Falcosidekick is listening. For a single-host lab, both services can use 127.0.0.1.

GitHub

+1

6.3 Validate and restart Falco

First, check the configuration and rules:

# Validate Falco's configuration before restarting
sudo falco --dry-run -c /etc/falco/falco.yaml

If validation succeeds, restart the service that is actually running on your machine. For the tutorial’s modern eBPF service:

sudo systemctl restart falco-modern-bpf.service

# Confirm Falco is running
sudo systemctl is-active falco-modern-bpf.service

# Review startup messages and errors
sudo journalctl -u falco-modern-bpf.service \
  -n 60 --no-pager

If your system uses another Falco unit, replace falco-modern-bpf.service with that unit’s name.

Check Falcosidekick again:

sudo systemctl is-active falcosidekick

curl -sS -i http://127.0.0.1:2801/healthz

At this point, Falco should be configured to forward its alerts to Falcosidekick.

7. Step 6 — Generate a controlled security event

Let’s generate an attempted read of a sensitive Linux file without changing or deleting anything.

Run this command as your normal, non-root user — do not prefix it with sudo:

# Attempt to read the protected shadow file
cat /etc/shadow > /dev/null

On a normally configured Ubuntu host, this should fail with a permission-denied message. That is expected.

Now inspect Falco’s logs:

# Look for recent Falco detections
sudo journalctl -u falco-modern-bpf.service \
  --since "5 minutes ago" --no-pager

Look for an alert related to sensitive-file access, if a matching rule is loaded and the event is captured. The exact rule name depends on your installed ruleset.

Next, inspect Falcosidekick:

# Check whether the receiver reports errors
sudo journalctl -u falcosidekick \
  --since "5 minutes ago" --no-pager

Falcosidekick does not necessarily print every received alert to its service log when debug mode is disabled. Therefore, an empty log does not prove that no alert arrived.

8. Step 7 — View Falco alerts in a web dashboard

One important distinction: Falcosidekick alone is not an event-history dashboard. To browse alerts in a UI, use Falcosidekick-UI with Redis. Redis stores the events, and the UI displays them.

GitHub

+1

The following is an optional dashboard setup using Docker on the same Ubuntu host.

8.1 Install Docker if it is not already installed

If Docker is already working, skip this step. Otherwise, follow the official Docker Engine installation guide for Ubuntu.

Verify:

docker --version
sudo docker info

8.2 Start Redis with the required search module

Falcosidekick-UI requires Redis with the RediSearch module. For this learning lab, start the documented Redis Stack-compatible image:

sudo docker network create falco-net

sudo docker run -d \
  --name falco-redis \
  --restart unless-stopped \
  --network falco-net \
  -p 127.0.0.1:6379:6379 \
  redislabs/redisearch:2.2.4

Check Redis:

sudo docker ps
sudo docker logs --tail 30 falco-redis

8.3 Start Falcosidekick-UI

sudo docker run -d \
  --name falcosidekick-ui \
  --restart unless-stopped \
  --network falco-net \
  -p 2802:2802 \
  -e FALCOSIDEKICK_UI_REDIS_URL=falco-redis:6379 \
  -e 'FALCOSIDEKICK_UI_USER=labadmin:ChangeThisPassword123!' \
  falcosecurity/falcosidekick-ui

The official UI supports a configurable Redis address and login credentials.

GitHub

Check the UI container:

sudo docker ps
sudo docker logs --tail 50 falcosidekick-ui

# Test the UI health endpoint
curl -i http://127.0.0.1:2802/healthz

If the container cannot connect to Redis, remember that 127.0.0.1 inside a container refers to that container itself. In that case, configure both containers on a shared Docker network and set the UI’s Redis address to falco-redis:6379 instead.

8.4 Connect Falcosidekick to the UI

Edit the Falcosidekick configuration:

sudo nano /etc/falcosidekick/config.yaml

Add the UI output settings to the existing configuration:

# Falcosidekick listener
listenaddress: "127.0.0.1"
listenport: 2801

debug: false

# Forward received alerts to Falcosidekick-UI
webui:
  enabled: true
  url: "http://127.0.0.1:2802"

The UI output configuration uses the webui output. Check the exact keys supported by your installed Falcosidekick release in its official configuration reference.

Restart the receiver:

sudo systemctl restart falcosidekick

sudo systemctl status falcosidekick --no-pager

sudo journalctl -u falcosidekick -n 50 --no-pager

Open the dashboard on the Ubuntu machine:

Dashboard URL

http://127.0.0.1:2802

Log in using the username and password configured for the UI container.

If Ubuntu is a remote server, use SSH port forwarding from your local computer:

ssh -L 2802:127.0.0.1:2802 YOUR_USER@YOUR_SERVER_IP

Then open http://127.0.0.1:2802 in your local browser. Do not expose the dashboard or Redis ports publicly for this lab.

9. Step 8 — Trigger an alert and investigate it

Repeat the controlled test:

# Run as a normal, non-root user
cat /etc/shadow > /dev/null

Open the dashboard and select the events view. If the loaded ruleset detects this attempt, inspect the event details.

Look for the following fields:

FieldWhat it tells you
ruleWhich Falco detection matched
prioritySeverity assigned by the rule
outputHuman-readable description of the event
timeWhen the event occurred
hostnameWhich host generated it
proc.nameProcess name
user.nameUser associated with the event
fd.nameFile or descriptor involved, when available
container.idContainer context, if applicable

Not every event will include every field. The available details depend on the matching rule and event source. An alert is evidence to investigate, not automatic proof of a compromise.

Tutorials

+1

10. Step 9 — Troubleshoot when no alerts appear

Work through this checklist in order.

Troubleshooting checklist

0 of 7Falco is active

sudo systemctl is-active falco-modern-bpf.service

Copy commandFalcosidekick is active

sudo systemctl is-active falcosidekick

Copy commandReceiver health check passes

curl -i http://127.0.0.1:2801/healthz

Copy commandFalco HTTP output is enabled

sudo grep -nA3 ‘^http_output:’ /etc/falco/falco.yaml

Copy commandFalco logs contain detections or errors

sudo journalctl -u falco-modern-bpf.service –since ’10 minutes ago’ –no-pager

Copy commandFalcosidekick logs show errors

sudo journalctl -u falcosidekick –since ’10 minutes ago’ –no-pager

Copy commandReceiver metrics are available

curl -fsS http://127.0.0.1:2801/metrics | head -n 40

Copy command

How to interpret the results:

  • Falco is active, but no detection appears: verify that the ruleset is loaded and the test actually matches a rule.
  • Falco logs show an alert, but the UI is empty: investigate HTTP forwarding, the Falcosidekick webui output, Redis connectivity, and UI logs.
  • The receiver health check fails: check the systemd service and whether port 2801 is already occupied.
  • No HTTP output is configured: correct http_output in Falco’s configuration, validate it, and restart the correct service.
  • Events arrive but are too noisy: review rule priorities, exclusions, and the expected behavior of the workload before tuning rules.

11. Final verification

Your lab is complete when all of these are true:

  • Falco is running and loading rules.
  • Falcosidekick responds on port 2801.
  • Falco’s HTTP output points to Falcosidekick.
  • A controlled test generates an alert when a matching rule is loaded.
  • The event reaches the UI and is visible with its rule, priority, timestamp, and available process details.
  • You can diagnose a missing event by checking Falco, the receiver, and the UI separately.

Official references

Related Posts

Terraform Lab – Azure –  Local Values and Outputs

Continuation of Labs 1–4 and Part 2 (All Six Input Variable Types)Level: Beginner → Early IntermediateTerraform: 1.15.9+ within version 1.xAzureRM provider: 5.9.x (same provider constraint as Part 2)Date: 12 October 2026…

Read More

Terraform Lab – Azure – Input Variables – VMS & Netowork Demo

Continuation of Labs 1–4 · Level: Beginner · Terraform: 1.15.9 · AzureRM: 5.9.x · Updated: 12 October 2026 Objective Terraform Lab – Azure – Resources – VMS & Netowork Demo Convert the final, consolidated Lab 4 infrastructure to…

Read More

Terraform Lab – Azure – Resources – VMS & Netowork Demo

Level: Absolute BeginnerTerraform version: 1.15.9AzureRM Provider: 5.9.0Approach: Each lab builds on the previous lab. These are four complete Terraform configurations designed for students to execute sequentially. Learning Path 1. Selected Azure…

Read More

Azure: Terraform Azure Authentication: Azure CLI

Latest Terraform Azure Authentication: Azure CLI The recommended approach in the HashiCorp AzureRM provider’s Azure CLI authentication guide is to authenticate through Azure CLI when running Terraform…

Read More

Azure: Authenticating to Azure using a Service Principal and a Client Secret

Azure Portal: Get all 4 Terraform authentication values You can do this entirely through the Azure Portal web interface. No terminal commands or Azure CLI are required….

Read More

Azure: How to Create an Azure User, Assign Permissions, and Log In

Objective Create a new user in Microsoft Azure, grant access to cloud resources, and verify that the user can log in independently without sharing your administrator credentials….

Read More