Forwarding Overview
Beacon writes normalized AI runtime telemetry as one JSON object per line in the active local runtime JSONL log. Beacon keeps that handoff path bounded with local rotation. Wazuh ingests those events with a standardlocalfile input and Beacon’s generated Wazuh rules.
Use this guide when you want Wazuh to alert on local AI agent activity such as prompt submissions, command execution, tool use, file reads and writes, approval decisions, and endpoint health events.
How it works
Beacon does not send events directly to the Wazuh API. The integration is file based:- Beacon writes endpoint events to
runtime.jsonl. - Wazuh
logcollectortails that file with<log_format>json</log_format>. - Wazuh decodes each JSON object and stores the fields under
data.*. - Beacon’s Wazuh rules classify events with rule IDs such as
100500and100550. - Analysts review the events in Wazuh Dashboard under Threat Hunting → Events.
Runtime log paths
| Mode | Runtime log |
|---|---|
| User mode | ~/.beacon/endpoint/logs/runtime.jsonl |
| System mode | /var/log/beacon-agent/runtime.jsonl |
/var/log/beacon-agent/runtime.jsonl path. User mode is convenient for local testing, especially on a workstation running Wazuh in Docker.
Prerequisites
Before configuring Wazuh, make sure:- Beacon is installed or available on the endpoint.
- The Beacon runtime log exists, or Beacon can create it.
- Wazuh manager or Wazuh agent can read the runtime log path.
- You know where your Wazuh manager loads custom rules from. For many Linux and Docker installs this is
/var/ossec/etc/rules. - You can restart or reload Wazuh after changing
ossec.confor custom rules.
Production setup
For managed endpoints, install Beacon in system mode and configure Wazuh to tail the system runtime log.1. Configure Beacon
Install or repair Beacon in system mode:Install or repair Beacon in system mode
Confirm the runtime log path
2. Generate Wazuh content
Generate the Wazuh pack:Generate the Wazuh pack
ossec-localfile.xml: Wazuhlocalfilesnippet for the Beacon runtime log.beacon-rules.xml: Wazuh rules for Beacon endpoint events.sample-event.jsonl: known-good sample events.apply-dashboard-default-columns.sh: optional helper for Wazuh Dashboard display columns.README.md: install notes.
3. Install Wazuh localfile config
Add the generatedossec-localfile.xml block to the Wazuh agent or manager configuration that runs on the endpoint:
If Beacon writes somewhere custom, generate the snippet with that path
4. Install Beacon rules
Installbeacon-rules.xml on the Wazuh manager, usually under:
Local Docker test
Use this flow when Wazuh runs locally with Docker Compose and Beacon runs on your workstation. The key idea is that Wazuh reads paths from inside the container, so the host Beacon log directory must be bind-mounted into the Wazuh manager container.1. Confirm the Beacon runtime log
User-mode Beacon writes to:User-mode Beacon writes to
System-mode Beacon writes to
2. Mount the Beacon log into Wazuh
In the Wazuh manager service in your Docker Compose file, mount the host Beacon log directory into the manager container. For a user-mode Beacon install:After editing the Compose file, recreate the manager so Docker applies the new mount
3. Install the Beacon Wazuh rules
Generate the Beacon Wazuh pack with the same container-side log path:Generate the Beacon Wazuh pack with the same container-side log path
Copy the rules into the Wazuh manager container
Set ownership and permissions if needed
Then restart the Wazuh manager so the rule file and localfile config are loaded
4. Write a validation event
Write a known-good validation event to the host-side Beacon runtime log. For user mode:Write a known-good validation event to the host-side Beacon runtime log. For user mode
Use system mode
Confirm the manager can see the mounted log and that Wazuh has emitted an alert
100500: base Beacon endpoint runtime event.100550: AI agent workflow telemetry, such as prompts, tool activity, and file activity.
Wazuh Dashboard
Open Wazuh Dashboard, then go to Threat Hunting → Events. Start with one of these filters:
data.*. In the default Wazuh alert index, command and file details are usually exposed as data.command and data.file. Nested raw Beacon fields such as data.command.command, data.file.path, and data.tool.name may not appear as separate display fields unless your Wazuh indexing configuration maps them.
You can also apply the recommended columns through the generated helper:
You can also apply the recommended columns through the generated helper

Validate ingestion end to end
For production system-mode deployments, write a validation event:For production system-mode deployments, write a validation event
alerts.json.
If the event does not appear, verify that the runtime log exists, Beacon can write to it, and Wazuh can read it:
If the event does not appear, verify that the runtime log exists, Beacon can write to it, and Wazuh can read it
For Docker-based tests, also verify the manager container can resolve its peer services and see the mounted runtime log
If Wazuh Dashboard says the server is not ready yet, check that the dashboard can resolve and connect to the Wazuh indexer. Recreating the indexer and dashboard containers with Docker Compose usually restores the expected Compose DNS aliases
Troubleshooting
No Beacon alerts in Wazuh
Check each handoff point:- Beacon wrote an event to the host runtime log.
- The Wazuh manager or agent can read the same file path.
- Docker deployments use the container-side path in
<location>. beacon-rules.xmlis installed on the manager and Wazuh was restarted after the file was copied.- Wazuh
logcollectorreports that it is analyzing the Beacon runtime log.
Useful checks
Validation events appear, but prompts do not
The validation event proves Wazuh can ingest the file. Prompt and tool activity also require the relevant runtime integration, such as Cursor hooks or OTLP telemetry, to be configured. For Cursor hooks, check:Check Cursor hooks
Fields are present only inside full_log
Wazuh preserves the raw Beacon JSON in full_log, but not every nested JSON field is always exposed as its own dashboard column. Use the data.* fields listed above for the default Wazuh alert index. If your team needs deeper nested fields as first-class columns, adjust Wazuh index templates or downstream parsing for your deployment.
Related
Wazuh command reference
Review Beacon Wazuh commands and flags.
Endpoint event schema
Review normalized Beacon JSONL fields and example events.

