Wazuh log data collection from Windows, Linux and network devices

Wazuh collects logs through agents on endpoints and through syslog from devices that cannot run one. This page explains which sources to plan first, how to set up collection, and when to archive every event.

On this page

Wazuh log collection from Windows, Linux and network devices: where to start

Start with the sources that produce the events your detection and compliance questions depend on, and add the rest later. In Wazuh, no rule can fire on an event that never reached the server, so collection is the first decision in any deployment. It also sets three things you will live with: how much data you store, how useful your alerts are, and what evidence you can show an auditor later. A source added without a clear use case usually adds storage cost and alert noise before it adds visibility.

A Wazuh deployment has four components. The Wazuh indexer is a full-text search and analytics engine that stores alerts. The Wazuh server analyzes data from agents with decoders and rules, and it can run as a cluster to scale horizontally. The Wazuh dashboard is the web interface where teams search and review results. Wazuh agents are installed on endpoints and send their data to the server. Agents run on Linux, Windows, macOS, Solaris, AIX and HP-UX. Devices such as firewalls are covered through syslog collection instead, so confirm for each device model which path applies before you finalize the source list.

Work from a short list of sources, each tied to a specific question. For example (illustrative): if your first question is whether administrators sign in to domain controllers outside change windows, the Windows security event channel from those hosts comes first, and firewall deny logs can wait. For each candidate source, record the owner, the event categories you need, the expected daily volume and the retention period. Confirm volumes on a representative host before you commit. Decide early which sources go into the indexer for search and alerting and which are only archived, because that choice drives your storage sizing.

This page does not replace the vendor documentation for each event source. Windows event channels, Linux journald, macOS unified logs and each network device's syslog settings have their own configuration, retention and format details, and those details change with product versions. Use this section to decide what to collect and in what order, then confirm exact log names, settings and formats with the vendor documentation for each source and with your own environment. The sections that follow cover the collection paths in more depth.

Which collection method fits each log source

This table matches each log source type with the collection method to confirm in the Wazuh documentation for your agent version, the usual reason to choose it, and the main constraint to check first. Read each row before you plan the rollout, because the constraint often decides whether a source needs a custom decoder or a different collection route. Most projects start with agent-based sources and add syslog and agentless devices once the basics work.

Log sourceCollection method to confirmTypical reason to choose itMain constraint to check
Windows event channelsWazuh agent collecting the event channels set in agent configuration (confirm channel names for your version)Native event data from Windows hosts already running the agentAgent support for your Windows version and the channel names in your agent release
Linux system logs and journaldWazuh agent log collection, including journald, set in agent configuration (confirm journald options)Linux hosts that already run the agent for other modulesAgent support for your distribution and version, and journald settings for your release
macOS unified logsWazuh agent collection of unified logs, if your agent version supports it (confirm the method)Mac endpoints in a mixed fleet that should feed the same alert pipelineAgent support for your macOS version and the event volume that unified logs can produce
Syslog from network devicesRemote syslog sent by the device to a Wazuh listener, set up on both sides (confirm listener settings)Firewalls, switches and routers that cannot run an agentThe device must export syslog in a format Wazuh can decode, so check its export settings first
Custom application log filesAgent localfile collection of the log path, with a custom decoder and rules if the format is unknownLine-based application logs that record security-relevant eventsA log format that needs a custom decoder and rules, tested against sample lines from production
Agentless devices reached by API or SSHPeriodic API probing or SSH-based checks, as the documentation describes for each device typeLocked-down servers or appliances where no agent can be installedDevice access, credential handling and check frequency, plus which checks each method supports

How a log event travels from source to alert in Wazuh

A log event in Wazuh passes through four components before it appears as an alert an analyst can search. The path starts where the event is produced. A Wazuh agent installed on a Windows or Linux endpoint reads local log sources and forwards them to the Wazuh server. A network device that cannot run an agent sends syslog to a listener, which also feeds the server. The server performs the analysis, and the Wazuh indexer, a full-text search and analytics engine, stores the resulting alerts. The Wazuh dashboard is the web interface where teams query those alerts. Each stage can fail on its own, so the team needs to know which stage to inspect when an expected alert is missing.

Analysis happens in two steps on the server. First, decoders match the incoming event and extract fields such as the source, the user or the action, depending on the log format. Second, rules evaluate those fields and decide whether the event raises an alert and at what severity. The order matters. A rule can only test fields that a decoder has produced, so the rules for a Windows event channel, a journald stream, a macOS unified log feed or a syslog source all depend on a decoder for that format matching the messages your devices actually send. Before writing custom rules, confirm which decoders ship with your release and which ones your sources need.

A missing decoder is one of the most common reasons a source appears to work but produces nothing useful. The event can reach the server and even be recorded, yet it arrives as an undecoded message with no fields a rule can read. No rule matches it, so no alert is raised. Teams should not assume the pipeline will report this condition. To test a source, send a representative event from each log type and check three things: that the event arrives, that it is decoded into the fields you expect, and that a rule raises the alert you intended. Repeat this test after every change to a source's log format, because a software update can alter messages that an existing decoder no longer matches.

Where collection settings live affects who changes them and how. The Wazuh server can run as a cluster to scale horizontally, and it manages agent configuration and upgrades remotely. Some collection behavior is therefore set centrally on the server and pushed to agents, while other settings sit on the endpoint itself. Before the build starts, decide which team owns each layer, how changes are reviewed, and how a change is tested on a small group of endpoints before wider rollout. Ask how your version applies agent configuration from the server to your endpoint groups, and confirm how a cluster node handles agents that connect to a different node.

Alerts and raw events are not the same thing, and the path described above only guarantees that alerts are searchable in the dashboard. Whether every raw event is kept, for how long and in what form is a separate decision that depends on your configuration and storage. Confirm the archive behavior in the documentation for your release before you commit to a retention or compliance position. Ask your team to answer four questions: whether unmatched events are archived, where the archive is written, who can read it, and how an investigator would search it when an alert never fired. Those answers determine whether a missing decoder can be traced later from raw data.

Setting up Wazuh log collection step by step

This sequence takes a Wazuh deployment from an inventory of log sources to a verified collection path for Windows, Linux and network devices. Each step ends with a check you can run, so a gap shows up at the step that introduced it, before an incident depends on it.

  1. Inventory sources and their owners

    List every system that will send logs: Windows servers and workstations, Linux hosts, network devices such as firewalls and switches, and any applications that write their own log files. For each source, record the operating system, the log types you need (for example, Windows event channels, journald or syslog), the business owner, and the person who can change its logging settings. Ask each owner to confirm the list, because agents and forwarding rules cannot be applied to a system nobody has claimed. The step is done when every source has an owner and a log type recorded in one shared register.

  2. Choose the deployment method

    Select how the Wazuh server, indexer and dashboard will be installed. The documented options include the all-in-one and step-by-step installations, a prebuilt OVA virtual machine, Docker, Kubernetes, Ansible and Puppet, and an offline installation guide for networks without internet connectivity. Choose based on your platform standards and network rules, and confirm that the option you pick is documented for the release you plan to run. Agree the server sizing and where the central components will sit with the platform team. The step is done when the chosen method, target version and host placement are written into the design record.

  3. Install the indexer, server and dashboard

    Install the Wazuh indexer, the Wazuh server and the Wazuh dashboard using the method chosen in the previous step. The platform or security engineering team carries out the installation, and the installer output should be kept with the change record. After installation, confirm that all three components start, that the dashboard loads over HTTPS with a certificate your browsers trust, and that the administrator account can log in. If the server will run as a cluster, add nodes only after the single-node path works. The step is done when all three components report healthy and the dashboard login succeeds from an approved workstation.

  4. Enroll agents on Windows and Linux hosts

    Install the Wazuh agent on each Windows and Linux host and register it with the server. Use the same packaging method you use for other endpoint software, so agent versions stay consistent and are recorded in your asset inventory. Keep agent versions aligned with the server release line, and check the compatibility notes in the release documentation before running mixed versions. Enrollment ties each host to the server that manages it. The check is that every enrolled host appears as connected in the dashboard's agent list, and that no host stays pending or disconnected after a reboot.

  5. Push collection configuration through agent groups

    Use agent groups to define what each group collects, and edit a host's local configuration only when a setting cannot be managed centrally. For Windows hosts, specify the event channels to read, such as Security, System and Application, plus any additional channels the owners request. For Linux hosts, define the log files to monitor and confirm that journald is read where the distribution uses it. For macOS hosts in scope, confirm the unified log collection settings in the documentation for your agent version. Keep groups aligned with the sources register. The check is that a group change reaches a test host, confirmed through the group sync status shown in the dashboard.

  6. Add syslog listeners and device forwarding

    For network equipment and appliances that cannot run an agent, configure the server to receive syslog and configure each device to forward to it. Confirm the listener protocol and port your server version supports, and limit the firewall change to the path from approved device subnets to the server. Set the forwarding level to include the events you need, such as authentication, configuration changes and denied traffic, and keep the volume within what the team can review. Vendor syntax varies, so have each device owner confirm the forwarding command against the vendor documentation. The check is that a log line from each device appears in the dashboard with its source address.

  7. Verify test events and decoded fields

    Generate a test event on each source and confirm that it arrives, is decoded and is searchable. On a Windows host, write a test entry to an event channel such as Application. On a Linux host, send a message with the logger utility. On a network device, trigger a known event, such as a failed login on a lab account or a configuration change in a test session. In the dashboard, search for the test text and check that the decoder produced the expected fields, such as the source host, the event ID or program name, and the timestamp. Record the search and the field names in the verification record. The step is done when every source in the register has a matching, decoded test event.

  8. Confirm known failures raise expected alerts

    Collection that arrives but never alerts is not yet monitoring. For each source type, run a controlled failure, such as several failed sign-in attempts against a test account on a Windows host, repeated failed SSH logins on a Linux host, or a denied connection from a test device, and confirm that the matching rule fires and creates an alert. Check the rule identifier, the severity and the decoded fields against what you expected. If an alert does not appear, determine whether the decoder, the rule or the log level is the cause before you change anything. Run these tests in a window agreed with the source owners and keep the results with the change record.

Writing decoders for custom application logs

A custom application log usually needs a decoder and one or more rules before its events are useful in Wazuh. Without a decoder, the Wazuh server stores the raw line but cannot pull out fields such as user, source address, action or status, so rules have nothing reliable to match. Plan this work as an engineering task with its own review and testing, not as a configuration change made after the logs start arriving. The Wazuh server analyzes agent data with decoders and rules, so the decoder is the first place where a log format becomes data the platform can search and alert on.

The work starts with sampling real log lines. Collect lines from every event type the application writes, across normal operation, errors, retries and rotation, and ask the application team which fields are stable and which change between releases. For each field, decide how it will be extracted, what its name will be in the Wazuh data model, and which rule conditions will depend on it. Then map those fields to the specific rules that will raise alerts. Keep a short written table of field, source pattern, rule and owner, because this table is what the next reviewer will use to judge whether a later change is safe.

Testing needs representative lines, including malformed ones. Build a test set from sampled lines, edge cases such as empty fields, unexpected characters, truncated lines and lines from older log versions, and confirm which lines decode, which fail and which decode to wrong fields. Failing lines should be visible rather than silently dropped. Confirm the decoder syntax, the log test tooling and the rule testing procedure in the Wazuh documentation for your exact version, since these details change between releases in the 4.14 line.

Version the decoder and rule files in the same repository that holds the agent and server configuration, and deploy them through the same review path. A change to a log format can break existing decoders in ways that look healthy at first, for example when a renamed field stops matching and an alert quietly stops firing. Keep the test set under version control with the files, run it before every deployment, and record which application release each decoder version was written for. Ask whether a rollback path exists for a bad decoder, and how long it would take to restore the previous files on every server in a cluster.

Securing the log path from source to indexer

Logs collected for Wazuh carry security value only if they arrive intact, reach the right components under controlled credentials, and stay readable only by the people who need them. The five points below are the places where that chain most often weakens, and each one needs a decision or a check before the collection design is final.

Syslog transport from network devices

Many network devices send syslog over cleartext UDP or TCP by default, and UDP offers no delivery guarantee or sender confirmation. Before go-live, confirm which transports and encryption options each device model supports and which of them the Wazuh version in your environment accepts. Then decide where encrypted transport terminates, and test that events arrive with the expected source address and timestamp.

Agent enrollment and server communication

Each Wazuh agent must enroll with the server and then keep a channel open to it, so the enrollment credential and the agent-to-server session both need controls. Confirm how enrollment passwords are issued, stored on endpoints, rotated and revoked, and whether enrollment is restricted to specific networks or groups. Verify the agent communication settings in your deployment rather than assuming a default.

Credentials and tokens in application logs

Application and middleware logs sometimes record passwords, bearer tokens, connection strings or session identifiers, and a collector forwards those values without judging them. Inventory which collected log sources can contain such values, then decide whether to fix them at the source, mask them in the decoder pipeline or restrict who can search them. Test with sample events from each source before ingesting production volume.

Access to the dashboard and raw archives

Alerts and archived raw events often hold more sensitive data than the dashboard displays, and both need separate access rules. Map which roles can search alerts, view full event payloads and export archives, then confirm that the dashboard's authentication method, such as the internal user database or SAML single sign-on, is configured to match. Review where archived raw events are stored and who holds access to those storage locations.

Storage exhaustion from a single noisy source

One misconfigured device or chatty application can produce enough events to fill indexer or archive storage, which can stop collection for every other source. Before enabling a new source, measure its event rate in a test environment, set per-source filters or rate limits where the pipeline supports them, and set storage alerts that fire early enough to act. Decide in advance which sources may be dropped during an incident and who approves that change.

When Wazuh log collection should archive every event

The central decision is whether a source needs only the events that Wazuh rules evaluate, or the full stream of raw events kept for later use. The Wazuh server decodes incoming events and checks them against rules, and matching events become alerts stored in the Wazuh indexer. That path answers detection questions well, but an event that matches no rule is not kept as an alert. Archiving is a separate output that preserves the raw stream, which matters when the question is what happened on a host, not whether a known pattern fired. Confirm in the documentation for your release how the archive output is enabled, where the files are written, and how long they are kept before anything rotates or removes them.

Four factors usually drive the decision. The first is regulatory retention: the framework your organization is assessed against may require particular logs to be kept for a stated period. Ask your compliance lead to name the sources and the period, then check whether alerts alone would satisfy that requirement. The second is forensic need. Investigators often need events that never matched a rule, such as failed logons from a workstation that later showed suspicious activity with no alert. The third is storage growth from high-volume sources, such as busy domain controllers, verbose firewalls or Linux hosts with broad audit rules. Measure daily volume per source over a representative period before deciding. The fourth is replay. When a new rule is written, archived raw events let you test it against historical data instead of waiting for similar activity to recur.

Decide per source with a short checklist and record the answers. Who needs the raw events, and for which question? Does a stated retention requirement name this source? What is the measured daily volume over a representative period? Will a new rule need to be tested against history? Does the event contain personal or regulated data that needs restricted access? Who owns the decision, and when is it reviewed? A source can be alert-only while another is archived in full. For example, an illustrative firewall feed might be archived for forensic use while a low-value application log is kept only as alerts. Write the outcome per source so auditors and operators can see the reasoning later.

Archiving everything has costs that extend beyond disk space. Storage grows with every archived event and must be sized for the full retention period, not for the current month. Indexing load can rise if archived data is also indexed for search, so confirm in the documentation whether archive output is only stored or also loaded into the indexer for your release. Access-control scope also widens, because more raw content means more people and systems can reach sensitive fields. Apply the same role restrictions, encryption at rest and backup controls to the archive location that you apply to alerts. Ask any implementation partner to show the storage and indexing estimate for each source in writing, with the assumptions stated.

Limits to confirm before committing to a collection design

Each card names one limit that shapes how logs from Windows, Linux and network devices reach Wazuh. Answer each item with the Wazuh documentation and a lab test before the collection design is approved.

OS and log source support

Confirm which Windows, Linux and macOS versions, and which Windows event channels and journald sources, each Wazuh agent release supports. Support can differ by agent version and by platform, so check the Wazuh documentation for the exact agent version you plan to deploy. List the event channels and log files each host group needs, then map each one to a supported source before you finalize the design.

Syslog support on network devices

Confirm that each network device model and firmware version you run can send the syslog format, facility and transport (UDP or TCP) that your decoders expect. Vendors differ in how they format messages and which events they emit, and a decoder written for one format may fail to parse another. Test a sample from each device model in a lab, and note any device that needs an agentless approach instead.

Event volume and cluster sizing

Estimate event rates for each source group, then size the Wazuh indexer and server cluster against that figure and your retention period. Volume depends on the Windows audit policies, the Linux audit rules and how chatty each network device is, so base the plan on measurements from a pilot rather than on assumptions. Ask the vendor for sizing guidance that matches your measured event rate.

Offline and air-gapped behavior

Confirm how agents, the server and the indexer behave on networks without internet access, and which steps the Wazuh offline installation guide requires. Vulnerability detection can use an offline vulnerability repository in place of the Wazuh Cyber Threat Intelligence platform, so choose the feed source early. Also confirm how package, decoder and rule updates reach isolated segments, since those transfers become a recurring operational task.

Release line and patch cadence

Confirm that the release line you deploy, 4.14 according to the Wazuh release notes, is the one your team will maintain, and agree a written patch policy for it. The release notes list 4.14 patch releases on 17 March, 23 April, 1 July, 29 July, 23 September and 14 October 2026, so plan a recurring test and change window. Recheck the release notes at build time, since a newer release line may change the upgrade path.

Questions buyers ask about Wazuh log collection

What drives the cost of Wazuh log collection work?

Cost follows the decoder and rule work each log source requires. The main drivers are the number of distinct log sources, whether each source uses a format Wazuh already decodes, the daily volume of events, and who writes the decoders and rules. Standard Windows event channels, journald and common syslog formats need little custom work. Each custom application log usually needs a decoder, test samples and rules that turn events into useful alerts, and that effort repeats for every new format. Volume affects indexer sizing and storage, which is infrastructure cost you pay directly. Ask any partner to price the work per source type, separate one-time build from recurring changes, and state who maintains decoders after handover.

How long does a Wazuh log collection project take?

Duration depends on how many source types need custom parsing, how quickly source owners respond, and how many test cycles your change process allows. Windows event channels and Linux journald on standard hosts move quickly, while each custom application log adds sample collection, decoder writing, rule tuning and validation. Waiting time is often the largest variable. Access approvals, change windows and retention decisions made by other teams can stall work that is technically simple. Network devices need agreed syslog destinations and firewall rules before any parsing starts. Ask for a schedule with milestones per source group, and confirm which steps depend on your teams and which depend on the partner.

What does a Wazuh log collection project need from our team?

The work needs several inputs from your side:

  • Source owners who can confirm what each application writes, which event channels or log files matter, and who approves the format.
  • Test access, such as a non-production host or sample log export for each source, plus permission to generate test events.
  • Change windows for agent deployment and for changes to the Wazuh server configuration.
  • Retention decisions covering how long alerts and archived events stay in the indexer, who may read them, and which compliance evidence period applies.
  • A named decision-maker who accepts the collection scope and the tuning.
  • Access for the implementation team to the Wazuh server and dashboard, under your access controls.
Can our internal team set up Wazuh log collection alone?

Yes, for a small number of standard sources. A team comfortable with Linux administration can usually enable Windows event collection, journald and standard syslog on a handful of hosts using the agent configuration and the documented decoders. The harder work starts when many custom formats need decoders, when network devices send inconsistent syslog output, or when alerts must be tuned to reduce noise. Those tasks need decoder and regex skills, a test loop built on real samples, and someone who keeps rules working through Wazuh upgrades. Ask whether your team can maintain decoders after the first build. A hybrid model, where DeployOpen plans and builds the first set and your team owns later changes, is one option to discuss.

Does self-hosted Wazuh require a software license fee?

No. The self-hosted Wazuh software is open source with no license fee, and it is distributed under the GNU General Public License version 2 with an exception that permits linking with OpenSSL. Your costs are the infrastructure to run the indexer, server and dashboard, storage for retained events, staff time and any implementation services. Wazuh Cloud is a separate offer: a managed, cloud-delivered XDR and SIEM service sold in Small, Medium, Large and Custom tiers. It includes a 14-day free trial that needs no credit card, and every paid plan includes at least Standard support. Choose between them by who operates the platform and where logs must reside. Confirm current Wazuh Cloud pricing and terms with the vendor.

When should we archive all events instead of alerting on a subset?

Archive all events when you must keep complete raw logs for investigation, legal hold or evidence, even if most events never produce an alert. Alerting on a subset keeps the index smaller and dashboards faster, but it discards context an investigator may need later. Decide per source. Authentication and privilege events are often kept in full, while verbose debug output may be filtered. Archiving everything increases storage volume, so retention periods and indexer sizing must be decided together. Confirm with your compliance owner which retention period applies to each log type. Test that archived events can be searched and restored before you rely on them for evidence.

What should a written scope for Wazuh log collection include?

A written scope should list each source by host group or application, along with the log type, collection method, and the decoders and rules included. For each source, state who writes the decoder and rule, which test samples or hosts are used, and what acceptance criteria apply. Add the change windows and access the work requires, and the retention periods agreed for alerts and archived events. Name what is out of scope, such as tuning beyond the agreed rules, sources added later and dashboard work. Ask for deliverables and a handover that names who maintains decoders after go live. Confirm how Wazuh release upgrades affect custom decoders and who handles them. A clear scope lets you compare quotes on the same work.

How DeployOpen scopes and delivers Wazuh log collection

DeployOpen plans and delivers Wazuh log collection in infrastructure you control, starting from a written scope of the Windows event channels, Linux journald sources, macOS unified logs and network device syslog feeds to be collected. Engagements are fixed-scope, so the scope, deliverables and timelines are agreed in writing before build work starts. DeployOpen also hardens, documents and supports the result.

How we scope

  • Inventory each source to collect: Windows event channels, journald, macOS unified logs and network device syslog.
  • Record which hosts, agents and devices send each source, and where the events land in the Wazuh server.
  • Agree in writing which custom application logs need decoders and which events are archived in full.

How we build

  • Configure agents and syslog listeners on the Wazuh server, then confirm each source reaches the indexer.
  • Write and test custom decoders and rules for in-house applications against sample log files from your environment.
  • Plan archiving of full event streams as a separate decision, with storage sized to the retention you approve.

How we hand over

  • Document each source, its agent or syslog path, decoder and rule changes, and the owner of each feed.
  • Provide a test log for each source so your team can check collection after future changes.
  • Walk your operations team through dashboards, alert paths and the steps to add a new device or application.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover.
  • Retainer support can cover agent version changes, new log sources and decoder updates on request.
  • Ask any support proposal to name who reviews dropped events and how collection health is checked.

Sources and further reading

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.