diff --git a/src/pages/manage/activity/traffic-events-logging.mdx b/src/pages/manage/activity/traffic-events-logging.mdx
index 6e81b792f..655c2d5f0 100644
--- a/src/pages/manage/activity/traffic-events-logging.mdx
+++ b/src/pages/manage/activity/traffic-events-logging.mdx
@@ -2,10 +2,14 @@
This feature is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=traffic-events) and in licensed self-hosted Enterprise deployments with traffic flow enabled.
-This feature is in Beta and may change over time — including how data is collected and reported.
+Traffic events are experimental, so functionality and behavior may evolve, including how data is collected and reported.
To use this feature, make sure you're running NetBird client version 0.39 or higher.
+
+On self-hosted deployments, traffic flow is an opt-in part of the [Enterprise stack](/selfhosted/enterprise/getting-started). It requires a license, a PostgreSQL store, and the extra `nats`, `receiver`, and `enricher` services. It is not available on the community self-hosted stack.
+
+
The traffic events logging functionality enables comprehensive monitoring and analysis of connections across your infrastructure.
It captures network activity, including peer-to-peer, site-to-site, peer-to-resource, and other network traffic events.
@@ -51,7 +55,8 @@ You'll see two aggregated flow records, one reported by each peer (source and de
The record from `server` represents the receiver's perspective. Because `server` allows the connection, it includes the policy `IT Admins to Servers` that authorized the flow over `TCP` on port `443`.
- Use the `P2P` filter in the table to view only peer-to-peer connection events.
+ The `Router` column is empty for peer-to-peer flows, so an empty `Router` value is the quickest way to spot them in the table.
+ The API also accepts a `connection_type` query parameter on `GET /api/events/network-traffic` if you want to filter programmatically.
#### Blocked P2P Connections Events
@@ -60,15 +65,15 @@ If a connection is refused, NetBird logs the blocked event on the peer that deni
The initiating peer `Alice` will still report the connection attempt but won't be aware that it was blocked.
In this scenario, the `IT Admins to Servers` policy is configured to allow only ping requests (`ICMP`),
-meaning all `HTTP` requests are intentionally not allowed. The screenshot below illustrates this behavior.
+meaning `TCP` connections are intentionally not allowed. The screenshot below illustrates this behavior.
### Peer-to-Network Resource Connections
-When a peer connects to a [network resource](/manage/networks#resources), NetBird captures and logs the traffic
-events for that connection on the peer that initiated the connection, and on the [routing peer](/manage/networks#routing-peers) that connects the peer to
+When a peer connects to a [network resource](/manage/networks#resource), NetBird captures and logs the traffic
+events for that connection on the peer that initiated the connection, and on the [routing peer](/manage/networks#routing-peer) that connects the peer to
the internal network resource.
A slightly modified example of the CRM server connection scenario would be if instead of running the NetBird client on the CRM server,
@@ -85,21 +90,21 @@ routed the connection to the CRM server. If the connection was blocked, NetBird
The screenshot below illustrates a successful connection from `Alice` to the network resource `CRM` running in the AWS VPC.
The traffic is routed through a routing peer, which logs the connection event and reports it to the NetBird servers.
The access is permitted by the policy `IT Admins to AWS Servers`, which allows connections over the `TCP` protocol on port `443`.
-Note the `ROUTER` column in the table, which identifies the routing peer responsible for routing to the internal network resource.
+Note the `Router` column in the table, which identifies the routing peer responsible for routing to the internal network resource.
- Use the `Routed` filter in the table to view only peer-to-network resource connection events.
+ Routed flows are the ones with a value in the `Router` column, because the routing peer, not the destination, is the peer that reports them.
#### Blocked Peer-to-Network Resource Events
In the event of a blocked connection, the initiating peer logs the connection attempt, while the routing peer records the blocked event.
The screenshot below demonstrates this behavior: the routing peer blocks a connection to the network resource `CRM` because
-the policy `IT Admins to AWS Servers` does not permit connections over the `HTTP` protocol on port `6432`.
+the policy `IT Admins to AWS Servers` does not permit `TCP` connections on port `6432`.
The routing peer's aggregate shows the number of dropped attempts, so repeated application retries increase the drop count instead of creating one top-level row for every attempt.
@@ -113,26 +118,30 @@ The routing peer's aggregate shows the number of dropped attempts, so repeated a
## Event Aggregation
-Starting with v0.75, clients aggregate related traffic events before reporting them. For a given source address and direction, a group is identified by protocol, destination address, destination port for TCP or UDP, and ICMP type for ICMP traffic. Source port and ICMP code do not split aggregates. During each reporting window, NetBird accumulates:
+Since client v0.75.0, clients aggregate related traffic events before reporting them. A group is identified by source address, destination address, direction, protocol, destination port for TCP or UDP, and ICMP type for ICMP traffic. Source port and ICMP code do not split aggregates. During each reporting window, NetBird accumulates:
* connection start, end, and drop counts;
* transmitted and received packet totals;
* transmitted and received byte totals;
* the start and end of the aggregation window.
-The Dashboard and API therefore present one flow record with counters for activity in that window instead of a separate top-level record for every start, end, or blocked event. The `events` array can retain individual event timestamps where they are available.
+The Dashboard and API therefore present one flow record with counters for activity in that window instead of a separate top-level record for every start, end, or blocked event. Only TCP, UDP, ICMP, and ICMPv6 flows are aggregated. Any other protocol is reported as an individual event.
+
+
+Aggregated rows in the Dashboard show the window range instead of a single timestamp, and the description reads as a summary, for example `Peer Alice started 3 connections to Peer server` or `Peer Alice got blocked 5 times trying to connect to Resource CRM`. Expand the row to see which policy allowed or blocked the flow.
+
## Enabling Traffic Events Logging
-Traffic events logging feature is disabled by default. To enable it on the NetBird dashboard, navigate to `Settings > Networks`.
-Under the Experimental section, you'll find the `Enable Traffic Events` option. Toggle the switch to enable traffic event logging.
+Traffic events logging is disabled by default. To enable it on the NetBird dashboard, navigate to `Settings > Networks`.
+Under the `Experimental` section, you'll find the `Enable Traffic Events` option. Toggle the switch to enable traffic event logging.
+Changing this setting requires the `Owner` or `Admin` role.
-By default, traffic reporting in userspace is always enabled, providing basic logging of network interactions.
-However, packet size reporting at the kernel level is disabled by default to minimize CPU usage.
+Peers that run the NetBird userspace packet filter always report packet and byte counts for the flows they see.
+Kernel-level counting is disabled by default to minimize CPU usage.
-You can optionally enable `Traffic Reporting (Kernel)` to capture additional details, such as network packet sizes,
-at the kernel level. Be aware that enabling this option may lead to higher CPU usage on the NetBird client.
+You can optionally turn on `Enable Traffic Reporting (Kernel)` to capture packet and byte counts on Linux peers that use the WireGuard kernel module. It turns on kernel connection tracking accounting (`net.netfilter.nf_conntrack_acct`) on those peers and has no effect on peers that already run in userspace, such as macOS and Windows clients. Be aware that enabling this option may lead to higher CPU usage on the NetBird client.
@@ -147,20 +156,19 @@ You can scope traffic events logging to only the peers that belong to specific g
- When you select one or more groups, only peers that are members of the selected groups will report traffic events.
- If no group is selected, logging applies to all peers in the account (default behavior).
-To configure this setting, navigate to `Settings > Networks` in the Experimental section, open the Group Selector under `Enable Traffic Events`
-choose the groups you want to include, and click `Save Groups`.
+To configure this setting, navigate to `Settings > Networks`, and in the `Experimental` section open the `Limit To Specific Groups` selector
+below `Enable Traffic Events`, choose the groups you want to include, and click `Save Groups`.
## Log Retention
-While in experimental mode, logs are retained for **seven days**.
-Additionally, the current API returns a maximum of **50,000 flow records**.
-This limit may change.
+While the feature is experimental, traffic event data is retained for **48 hours** and capped at a maximum of **50,000 events**.
+The same limits are printed in the `Experimental` section of `Settings > Networks`. They may change.
## Report rate
-Aggregated flows might take up to **ten minutes** to become available through the API and Dashboard. An end count for some TCP connections can appear in a later window, depending on OS settings and connection termination.
+A flow is only sent once its aggregation window closes, and the window length is set by the NetBird server, not by the client. Aggregated flows might take up to **ten minutes** to become available through the API and Dashboard. An end count for some TCP connections can appear in a later window, depending on OS settings and connection termination.
## Enable Traffic Events Streaming to SIEM Systems
@@ -174,111 +182,129 @@ For detailed instructions on supported integrations and how to set them up, refe
When enabled, a NetBird peer will record metadata for each network flow that it participates in. The data collected by peers includes:
-* **Window start and end**: The bounds of the aggregation window.
-* **Flow ID**: A unique identifier for the aggregated traffic flow.
+* **Window start and end**: The bounds of the aggregation window (`window_start` and `window_end`).
+* **Flow ID**: The identifier of the connection flow (`flow_id`). It is not globally unique, because both sides of the same connection can report it.
* **Event counts**: `num_of_starts`, `num_of_ends`, and `num_of_drops` for the group.
* **Source and Destination IP Addresses**: The IP of the peer (source) and the IP of the remote endpoint (destination). For peer-to-peer traffic,
these will be the NetBird network IPs (e.g. 100.x.x.x addresses of each peer). For traffic to an external resource (like a private server or subnet), the destination might be an IP in that remote network.
-* **Source and Destination Ports**: The network ports recorded for TCP/UDP flows. Destination port is part of the aggregation key; source port does not split aggregates.
-* **ICMP Type**: For ICMP traffic, the ICMP type used to group the flow. ICMP code does not split aggregates.
-* **Protocol**: The protocol of the traffic, such as TCP, UDP, or ICMP.
-* **Direction**: Whether the flow was inbound or outbound. This takes into consideration the perspective of the **peer reporting the traffic** and the NetBird interface.
-* **Volume of Data**: Packet and byte totals sent and received during the aggregation window.
-* **Resource ID**: Network route or Networks resource ID that the flow is associated with. This is useful for identifying the routing configuration that allowed the flow. DNS route information is **available only** on the routing client.
-* **Rule ID**: The ID of the policy that allowed the flow. This is useful for identifying the access control policy that allowed the flow. This information is **available only** on the receiving side of the traffic.
+* **Source and Destination Ports**: The network ports recorded for TCP/UDP flows. They are reported as part of the `address` field of the source and destination. Destination port is part of the aggregation key; source port does not split aggregates.
+* **ICMP Type and Code**: For ICMP and ICMPv6 traffic, the type and code of the flow. Only the type is part of the aggregation key, so the code does not split aggregates.
+* **Protocol**: The IANA protocol number of the traffic, for example `1` for ICMP, `6` for TCP, `17` for UDP, and `58` for ICMPv6.
+* **Direction**: `INGRESS` or `EGRESS`. This takes into consideration the perspective of the **peer reporting the traffic** and the NetBird interface.
+* **Volume of Data**: Packet and byte totals sent and received during the aggregation window (`tx_packets`, `rx_packets`, `tx_bytes`, `rx_bytes`).
+* **Resource ID**: Network route or Networks resource ID that the flow is associated with. This is useful for identifying the routing configuration that allowed the flow. For domain based resources, the resource is attributed on the peer that resolved the domain, so one side of a flow can carry the resource while the other side reports only the address.
+* **Rule ID**: The ID of the policy that allowed or blocked the flow. This is useful for identifying the access control policy that applied to the flow. This information is **available only** on the receiving side of the traffic, and only when that peer runs the userspace packet filter. See [Limitations](#limitations).
In addition to the data collected by the peers, the NetBird API provides additional context about the peers and resources involved in the traffic event. These details include:
-* **Peer Name**: The name of the peer.
-* **Peer ID**: The unique identifier of the peer.
-* **Resource name**: The name of the resource or network route.
-* **Policy Name**: The name of the policy that allowed the flow.
-* **User ID, name, and email**: The name and email of the user associated with the source peer.
-* **Reporter ID**: The unique identifier of the peer that reported the traffic event.
-* **Received timestamp**: The timestamp when the event was received by the NetBird servers.
+* **Peer or resource name, ID, and type**: Returned as the `source` and `destination` objects, with `type` set to `PEER`, `HOST_RESOURCE`, `SUBNET_RESOURCE`, `DOMAIN_RESOURCE`, `ROUTE`, or `UNKNOWN`.
+* **Operating system, DNS label, and geo location**: Extra context on each endpoint.
+* **Policy ID and name**: Returned as the `policy` object.
+* **User ID, name, and email**: The user associated with the source peer, returned as the `user` object.
+* **Reporter ID**: The unique identifier of the peer that reported the traffic event (`reporter_id`).
+* **Sub-events**: The `events` array carries the individual event types and timestamps that the peer reported for the flow.
-API sample response
+API sample response (one entry from the data array)
```json
- {
- "destination": {
- "address": "142.250.185.206:443",
- "dns_label": "*.google.com",
- "geo_location": {
- "city_name": "",
- "country_code": ""
- },
- "id": "cvco2st9q2cs73btphmg",
- "name": "Any google.com domain",
- "os": "",
- "type": "DOMAIN_RESOURCE"
+{
+ "flow_id": "9682d060-3b28-4fa3-8b47-98595a51bbda",
+ "reporter_id": "cvco2st9q2cs73btphm0",
+ "source": {
+ "id": "cvco2st9q2cs73btphm0",
+ "type": "PEER",
+ "name": "MacBook-Pro-10.local",
+ "geo_location": {
+ "city_name": "Frankfurt",
+ "country_code": "DE"
},
- "direction": "EGRESS",
- "flow_id": "9682d060-3b28-4fa3-8b47-98595a51bbda",
- "icmp_code": 0,
- "icmp_type": 0,
- "id": "c94e398c-dbfb-4344-8c47-a731b984d86e",
- "policy_id": "ndkslcanlksncl",
- "policy_name": "Allow google access",
- "protocol": 6,
- "receive_timestamp": "2025-03-22T20:26:19.491144Z",
- "reporter_id": "ldkfnwklenfklernl",
- "rx_bytes": 0,
- "rx_packets": 0,
- "source": {
- "address": "100.89.67.186:50229",
- "dns_label": "macbook-pro-10-2",
- "geo_location": {
- "city_name": "Frankfurt",
- "country_code": "DE"
- },
- "id": "ldkfnwklenfklernl",
- "name": "MacBook-Pro-10.local",
- "os": "Darwin",
- "type": "PEER"
+ "os": "Darwin",
+ "address": "100.89.67.186:50229",
+ "dns_label": "macbook-pro-10-2"
+ },
+ "destination": {
+ "id": "cvco2st9q2cs73btphmg",
+ "type": "DOMAIN_RESOURCE",
+ "name": "Any google.com domain",
+ "geo_location": {
+ "city_name": "",
+ "country_code": ""
},
- "window_start": "2025-03-22T20:26:16.937522Z",
- "window_end": "2025-03-22T20:30:17.257891Z",
- "num_of_starts": 1,
- "num_of_ends": 1,
- "num_of_drops": 0,
- "tx_bytes": 64,
- "tx_packets": 1,
- "events": [
- {
- "type": "TYPE_START",
- "timestamp": "2025-03-22T20:26:16.937522Z"
- },
- {
- "type": "TYPE_END",
- "timestamp": "2025-03-22T20:30:17.257891Z"
- }
- ],
- "user_email": "john@example.com",
- "user_id": "google-oauth2|xyz0123",
- "user_name": "John Doe"
- }
+ "os": "",
+ "address": "142.250.185.206:443",
+ "dns_label": "*.google.com"
+ },
+ "user": {
+ "id": "google-oauth2|xyz0123",
+ "email": "john@example.com",
+ "name": "John Doe"
+ },
+ "policy": {
+ "id": "cvco2st9q2cs73btphn0",
+ "name": "Allow google access"
+ },
+ "icmp": {
+ "type": 0,
+ "code": 0
+ },
+ "protocol": 6,
+ "direction": "EGRESS",
+ "rx_bytes": 0,
+ "rx_packets": 0,
+ "tx_bytes": 64,
+ "tx_packets": 1,
+ "num_of_starts": 1,
+ "num_of_ends": 1,
+ "num_of_drops": 0,
+ "window_start": "2026-03-22T20:26:16.937522Z",
+ "window_end": "2026-03-22T20:30:17.257891Z",
+ "events": [
+ {
+ "type": "TYPE_START",
+ "timestamp": "2026-03-22T20:26:16.937522Z"
+ },
+ {
+ "type": "TYPE_END",
+ "timestamp": "2026-03-22T20:30:17.257891Z"
+ }
+ ]
+}
```
## Viewing Traffic Events on the Dashboard
There are two places where you can see the traffic events on the NetBird dashboard:
-1. **Traffic events**: Under Activity, you will find the Traffic events menu. This view shows the traffic events in a table format for all peers in your network.
-2. **Peer details**: When you click on a peer, you will see the traffic events for that peer in the Peer details view.
+1. **Traffic Events**: Under `Activity`, you will find the `Traffic Events` menu. This view shows the traffic events in a table format for all peers in your network.
+2. **Peer details**: When you click on a peer, the `Traffic Events` tab shows the events reported by that peer, with an `Inbound` and `Outbound` switch.
+
+Reading traffic events requires the `Owner`, `Admin`, `Auditor`, or `Network Admin` role. Users with the `User` role do not see the `Activity` menu.
+
+The `Traffic Events` table shows the following columns:
+
+| Column | Description |
+| --- | --- |
+| `Event` | The aggregation window and a summary of what happened, for example how many connections started, ended, or were blocked. Expand the row to see which policy allowed or blocked the flow. |
+| `Source` | The peer, resource, route, or address that the flow came from. Hover it for the endpoint's domain, geo location, and, on outbound flows from a peer, the user behind it. |
+| `Protocol & Port` | The protocol of the flow and the destination port. For ICMP and ICMPv6, the type and code are shown instead of a port. |
+| `Destination` | The peer, resource, route, or address that the flow was sent to. |
+| `Traffic` | Received and transmitted bytes for the aggregation window. |
+| `Router` | The routing peer that reported the flow. Empty for peer-to-peer flows. |
+
+The peer's `Traffic Events` tab uses the same columns without `Router`, because every row on that tab is reported by the peer you are looking at.
### Filters
-You can use various filters to search and filter received events. The filters include:
-- **Source**: Select a source peer, network resource, route, or user. The API equivalent is `source_id`.
+The traffic events table defaults to the last **7 days**. You can narrow the list with:
+
+- **Search**: The `Search by ip, port, peer or resource...` box does a case-insensitive partial match on user email, source and destination names, and source and destination addresses. The API equivalent is `search`.
+- **Date range**: The date picker sets the window to query. The API equivalents are `start_date` and `end_date`.
+- **Source**: Select a source peer, network resource, or user. The API equivalent is `source_id` for peers and resources, and `user_id` for users.
- **Destination**: Select a destination peer or network resource. The API equivalent is `destination_id`.
-- **IP address**: Source or destination IP addresses
-- **Ports**: Source or destination ports
-- **Timestamp**: Aggregation-window time range
-- **Protocol**: ICMP, TCP, or UDP
-- **Flow type and direction**: P2P or routed traffic, inbound or outbound, including groups with start, end, or drop counts
+
+The `GET /api/events/network-traffic` endpoint accepts more filters than the Dashboard exposes, including `protocol`, `type`, `connection_type`, `direction`, and `reporter_id`. See the [API reference](/api/resources/events).
## Correlating events
Correlate a session by comparing the aggregated flow records reported by both sides. If Peer A connects to Peer B, each reporter can contribute a record for the same source and destination tuple. A successful flow normally increases the start and end counters. If Peer B rejects it, the receiver's record increases the drop counter while the initiator may only know that it attempted the connection.
- Blocked events are only reported when the destination peer is in userspace mode. See [Limitations](#limitations).
+ Blocked events are only reported when the peer that refuses the traffic runs the NetBird userspace packet filter. See [Limitations](#limitations).
### Viewing TCP and UDP connections
@@ -296,7 +322,7 @@ The UDP connection is very similar:
- UDP is stateless, so its end counter is updated after the client observes the configured inactivity period.
+ UDP is stateless, so its end counter is only updated after the client observes 30 seconds of inactivity on the connection.
When a connection is blocked, you may see similar entries to the following events but with a few differences:
@@ -310,9 +336,9 @@ When a connection is blocked, you may see similar entries to the following event
-On the refusing side, retries increase `num_of_drops`; the client does not record a successful start or end for traffic it rejected.
+On the refusing side, retries increase `num_of_drops`; the client does not record a successful start or end for traffic it rejected. Drops are always recorded as `INGRESS`, because a peer can only observe traffic that it refused to accept.
- Blocked events are only reported when the destination peer is in userspace mode. See [Limitations](#limitations).
+ Blocked events are only reported when the peer that refuses the traffic runs the NetBird userspace packet filter. See [Limitations](#limitations).
### Viewing ICMP connections
@@ -321,7 +347,7 @@ ICMP events are similar to TCP and UDP events. The main difference is that ICMP
- ICMP is grouped by ICMP type and does not use ports. Its end counter is updated after inactivity.
+ ICMP is grouped by ICMP type and does not use ports. Its end counter is only updated after 30 seconds of inactivity.
### Routed events
Routed events follow the same pattern as P2P events. The main difference is that the destination or source can be a resource or network route. Below, we have a few examples of a connection from a peer to a resource:
@@ -334,7 +360,7 @@ Routed events follow the same pattern as P2P events. The main difference is that
-For routed aggregates, the source or destination can be a resource or network route. The record identifies the routing peer that reported it. The source or destination identifier can be unknown on the routing-peer side for DNS resources.
+For routed aggregates, the source or destination can be a resource or network route, and the `Router` column identifies the routing peer that reported it. For domain based resources, the endpoint is resolved on the peer that performed the DNS resolution, so one side of the flow can show the resource name while the other side shows only the address with type `UNKNOWN`.
For site-2-site connections, the events will be similar to the above examples, but you will see a routing peer for each event:
@@ -342,16 +368,29 @@ For site-2-site connections, the events will be similar to the above examples, b
## Limitations
-
-Policy IDs and blocked traffic events are not reported when the destination peer (or routing peer) is running in kernel mode.
-
-On Linux, you can force a routing peer into userspace mode with three [environment variables](/client/environment-variables):
+Policy IDs and blocked traffic events are produced by the NetBird userspace packet filter. A peer that hands access control to the kernel does not report them.
+
+* On **macOS and Windows**, the client always runs the userspace packet filter, so policy IDs and blocked events are reported.
+* On **Linux**, the client uses the native `nftables` or `iptables` backend by default, even when WireGuard itself runs in userspace. On those peers, drops happen in the kernel and are not reported.
+
+Packet and byte counters have a separate constraint. Linux peers that use the WireGuard kernel module only report them when `Enable Traffic Reporting (Kernel)` is on. Peers on the userspace packet filter always report them.
+
+On Linux, you can force a peer or routing peer fully into userspace with three [environment variables](/client/environment-variables):
```bash
sudo netbird service reconfigure --service-env NB_WG_KERNEL_DISABLED=true,NB_FORCE_USERSPACE_FIREWALL=true,NB_FORCE_USERSPACE_ROUTER=true
```
+
+Running the data path in userspace costs more CPU than the kernel path. Test the change on a non-critical peer before applying it to a routing peer that carries production traffic.
+
+
+Two more classes of traffic are filtered out by the client before events are sent, unless the NetBird server enables them for your account:
+
+* **DNS traffic**: UDP flows to port `53` and to the NetBird DNS forwarder ports `5353` and `22054`.
+* **Exit node traffic**: Flows that match a default route through an [exit node](/use-cases/remote-access/exit-nodes).
+
## Conclusion
Traffic events logging provides a powerful tool for monitoring and analyzing network traffic across your infrastructure.
Enabling this feature can provide valuable insights into network activity, enhance security measures, and improve operational efficiency.
From c1c684b59bb2cf716df0e4e3f6f04c18428b4b07 Mon Sep 17 00:00:00 2001
From: Brandon Hopkins
Date: Wed, 19 Aug 2026 11:38:49 -0700
Subject: [PATCH 2/5] Fix broken anchor links
---
.../activity/event-streaming/generic-http.mdx | 22 +++++++++----------
.../manage/activity/event-streaming/wazuh.mdx | 2 +-
2 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/src/pages/manage/activity/event-streaming/generic-http.mdx b/src/pages/manage/activity/event-streaming/generic-http.mdx
index 4e9b9eb9e..010103e47 100644
--- a/src/pages/manage/activity/event-streaming/generic-http.mdx
+++ b/src/pages/manage/activity/event-streaming/generic-http.mdx
@@ -21,8 +21,8 @@ For every event, NetBird sends a POST request to the endpoint you configure. You
## Create an Integration in NetBird
1. Open the **Integrations** page in the NetBird dashboard and select the **Event Streaming** tab.
-2. Find the **Generic HTTP** card and click **Connect Generic HTTP**.
-3. The setup modal opens on the **General** tab. A new integration walks through **General**, **Headers**, and **Body Template**, with a **Continue** button between each step. The **Danger Zone** tab only appears once the integration exists.
+2. Find the **Generic HTTP** card and click `Connect Generic HTTP`.
+3. The setup modal opens on the `General` tab. A new integration walks through `General`, `Headers`, and `Body Template`, with a `Continue` button between each step. The `Danger Zone` tab only appears once the integration exists.
### General Configuration
@@ -40,12 +40,12 @@ This tab holds the endpoint address and the authentication method.
- `Custom Authentication`: under `HTTP Header Name & Value`, provide a header name (for example `X-API-Key`) and its value. NetBird sends that header verbatim.
- Authentication is stored as an HTTP header, and how it reappears when you reopen the integration depends on the method. `Basic Auth` and `Bearer Token` are restored into the **Authentication** selector, and Basic Auth shows `****` in both fields. Leave those masked fields untouched to keep the stored credentials, or retype both to change them. `Custom Authentication` has no dedicated storage, so it comes back as an ordinary row on the **Headers** tab and the selector resets to `No Authentication`. That is expected, and the header is still being sent.
+ Authentication is stored as an HTTP header, and how it reappears when you reopen the integration depends on the method. `Basic Auth` and `Bearer Token` are restored into the `Authentication` selector, and Basic Auth shows `****` in both fields. Leave those masked fields untouched to keep the stored credentials, or retype both to change them. `Custom Authentication` has no dedicated storage, so it comes back as an ordinary row on the `Headers` tab and the selector resets to `No Authentication`. That is expected, and the header is still being sent.
### HTTP Headers (Optional)
-The **Headers** tab adds custom headers to every outgoing request. Click **Add Header**, then fill in the `Name` and `Value` fields. Each row needs both: filling in only one blocks you from continuing.
+The `Headers` tab adds custom headers to every outgoing request. Click `Add Header`, then fill in the `Name` and `Value` fields. Each row needs both: filling in only one blocks you from continuing.
@@ -54,18 +54,18 @@ The **Headers** tab adds custom headers to every outgoing request. Click **Add H
The default request body is JSON. If your endpoint expects something else, for example because you built a plain-text body template, set `Content-Type` here.
- Do not add an `Authorization` header here while `Basic Auth` or `Bearer Token` is selected on the **General** tab. The dashboard shows a warning that the header will override the authentication from the previous step and blocks saving until you remove it. Use one or the other, not both.
+ Do not add an `Authorization` header here while `Basic Auth` or `Bearer Token` is selected on the `General` tab. The dashboard shows a warning that the header will override the authentication from the previous step and blocks saving until you remove it. Use one or the other, not both.
### Custom Body Template (Optional)
-The **Body Template** tab controls the structure of the payload NetBird posts.
+The `Body Template` tab controls the structure of the payload NetBird posts.
-Leave `Custom Body Template (optional)` off and NetBird sends its default JSON object for each event, described in [What NetBird sends](#what-netbird-sends). Turn it on and a text area appears, prefilled with this starting point:
+Leave `Custom Body Template (optional)` off and NetBird sends its default JSON object for each event, described in [What NetBird sends](#what-net-bird-sends). Turn it on and a text area appears, prefilled with this starting point:
```json
{
@@ -159,7 +159,7 @@ A few things to plan for:
## Save and Verify
-On a new integration, click **Connect** on the **Body Template** step. When you reopen an existing integration the footer shows **Cancel** and **Save Changes** on every tab instead.
+On a new integration, click `Connect` on the `Body Template` step. When you reopen an existing integration the footer shows `Cancel` and `Save Changes` on every tab instead.
When you save, NetBird POSTs a test event to your endpoint. If the endpoint does not answer with a `2xx` status, the save is rejected and the integration is not created, so a failing save usually means a wrong URL, a firewall in the way, or bad credentials.
@@ -167,11 +167,11 @@ Check the logs of your receiving service for the incoming POST. A successful sav
## Manage the Integration
-Once the integration exists, the Generic HTTP card changes: the **Connect Generic HTTP** button is replaced by a **Configuration** button, and the toggle on the card becomes active.
+Once the integration exists, the Generic HTTP card changes: the `Connect Generic HTTP` button is replaced by a `Configuration` button, and the toggle on the card becomes active.
- **Enable or disable**: flip the toggle on the card. Disabling stops the stream but keeps the configuration, so you can turn it back on without re-entering anything.
-- **Edit**: click **Configuration** to reopen the modal, change any tab, and click **Save Changes**.
-- **Delete**: open **Configuration**, go to the **Danger Zone** tab, and click **Delete Integration**. A confirmation dialog appears, and the deletion is irreversible. You will have to set the integration up again from scratch.
+- **Edit**: click `Configuration` to reopen the modal, change any tab, and click `Save Changes`.
+- **Delete**: open `Configuration`, go to the `Danger Zone` tab, and click `Delete Integration`. A confirmation dialog appears, and the deletion is irreversible. You will have to set the integration up again from scratch.
diff --git a/src/pages/manage/activity/event-streaming/wazuh.mdx b/src/pages/manage/activity/event-streaming/wazuh.mdx
index d9d53db37..e5d535b95 100644
--- a/src/pages/manage/activity/event-streaming/wazuh.mdx
+++ b/src/pages/manage/activity/event-streaming/wazuh.mdx
@@ -75,7 +75,7 @@ In the starter ruleset referenced in the prerequisites, `TYPE_DROP` events (rule
## Payload reference
-NetBird posts two distinct event shapes through the same integration, audit events and traffic events. The canonical description of both, including the mixed key casing and the per-event-type `meta` keys, lives on the [Generic HTTP](/manage/activity/event-streaming/generic-http#what-netbird-sends) page. This section covers only what changes on the way into Wazuh.
+NetBird posts two distinct event shapes through the same integration, audit events and traffic events. The canonical description of both, including the mixed key casing and the per-event-type `meta` keys, lives on the [Generic HTTP](/manage/activity/event-streaming/generic-http#what-net-bird-sends) page. This section covers only what changes on the way into Wazuh.
The receiver used for the examples on this page wraps each NetBird payload before writing it out, so it does not collide with Wazuh's index template:
From bf8d84b88fcfba426d4eb84eead548a2691afd48 Mon Sep 17 00:00:00 2001
From: Brandon Hopkins
Date: Wed, 19 Aug 2026 11:43:45 -0700
Subject: [PATCH 3/5] Anchor fix, HTTPS, backticks, and "open source"
---
.../manage/activity/event-streaming/datadog.mdx | 2 +-
.../manage/activity/event-streaming/generic-http.mdx | 12 ++++++++----
src/pages/manage/activity/event-streaming/index.mdx | 2 +-
.../event-streaming/sentinelone-data-lake.mdx | 2 +-
src/pages/manage/activity/event-streaming/wazuh.mdx | 2 +-
5 files changed, 12 insertions(+), 8 deletions(-)
diff --git a/src/pages/manage/activity/event-streaming/datadog.mdx b/src/pages/manage/activity/event-streaming/datadog.mdx
index 3c77053a9..7db3d843a 100644
--- a/src/pages/manage/activity/event-streaming/datadog.mdx
+++ b/src/pages/manage/activity/event-streaming/datadog.mdx
@@ -14,7 +14,7 @@ and analyze them right away.
Event Streaming is available in NetBird Cloud under the [Business plan](https://netbird.io/pricing) and in licensed
- self-hosted deployments. The open-source management server does not serve the event streaming API, so the cards on the
+ self-hosted deployments. The open source management server does not serve the event streaming API, so the cards on the
`Event Streaming` tab stay locked there.
diff --git a/src/pages/manage/activity/event-streaming/generic-http.mdx b/src/pages/manage/activity/event-streaming/generic-http.mdx
index 010103e47..ab8a84c91 100644
--- a/src/pages/manage/activity/event-streaming/generic-http.mdx
+++ b/src/pages/manage/activity/event-streaming/generic-http.mdx
@@ -1,19 +1,23 @@
# Stream Network Activity to a Generic HTTP Endpoint
-The Generic HTTP integration streams your NetBird audit and traffic events to any HTTP or HTTPS endpoint you control. It is the most flexible of the event streaming options, and it is the foundation the [SentinelOne Data Lake](/manage/activity/event-streaming/sentinelone-data-lake) and [Wazuh](/manage/activity/event-streaming/wazuh) guides build on. Use it for custom SIEMs, log management tools like Grafana Loki, or any service that accepts POST requests.
+The Generic HTTP integration streams your NetBird audit and traffic events to any HTTPS endpoint you control. It is the most flexible of the event streaming options, and it is the foundation the [SentinelOne Data Lake](/manage/activity/event-streaming/sentinelone-data-lake) and [Wazuh](/manage/activity/event-streaming/wazuh) guides build on. Use it for custom SIEMs, log management tools like Grafana Loki, or any service that accepts POST requests.
For every event, NetBird sends a POST request to the endpoint you configure. You control the request headers and, optionally, the shape of the body.
- Event streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming) and in licensed self-hosted Enterprise deployments. The open-source management server does not serve the event streaming API, so the integration cards stay locked there.
+ Event streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming) and in licensed self-hosted Enterprise deployments. The open source management server does not serve the event streaming API, so the integration cards stay locked there.
## Prerequisites
-- An HTTP or HTTPS endpoint that accepts POST requests and is reachable from NetBird. On NetBird Cloud that means it has to be publicly reachable. The dashboard's URL field accepts `localhost` and private IPv4 addresses, but NetBird Cloud cannot deliver to them.
+- An HTTPS endpoint that accepts POST requests and is reachable from NetBird. On NetBird Cloud that means it has to be publicly reachable. The dashboard's URL field accepts `localhost` and private IPv4 addresses, but NetBird Cloud cannot deliver to them.
- Any credentials your endpoint requires, such as an API key, a bearer token, or a username and password.
- An account role that grants the `event_streaming` permission. Without it, the Generic HTTP card is read-only.
+
+ Use `https://` for the endpoint. Streamed events carry your audit and traffic data, and the credentials you configure are sent on every request in an `Authorization` or custom header. Over plain `http://` both travel in cleartext and can be read or modified in transit. The dashboard's URL validator does not reject an `http://` address, so nothing stops you from saving one; treat that as a gap in validation rather than as a supported configuration.
+
+
Only one event streaming integration can be enabled at a time. If Datadog, Amazon S3, or Amazon Data Firehose is already enabled, the Generic HTTP card is dimmed and cannot be turned on until you disable the other one.
@@ -32,7 +36,7 @@ This tab holds the endpoint address and the authentication method.
-- **Enter your Endpoint URL**: the full HTTP or HTTPS URL that receives the POST requests. This field is required. The label reads `Endpoint URL` when you reopen an existing integration. Invalid input shows `Please enter a valid url, e.g., https://api.example.com/webhook`. The validator accepts hostnames, IPv4 addresses, and `localhost`, with or without a scheme, but it rejects bracketed IPv6 literals. Always enter a complete `https://` URL.
+- **Enter your Endpoint URL**: the full `https://` URL that receives the POST requests. This field is required. The label reads `Endpoint URL` when you reopen an existing integration. Invalid input shows `Please enter a valid url, e.g., https://api.example.com/webhook`. The validator accepts hostnames, IPv4 addresses, and `localhost`, with or without a scheme, but it rejects bracketed IPv6 literals. Always enter a complete `https://` URL.
- **Authentication**: pick the method your endpoint requires. The dropdown offers exactly four options, in this order:
- `No Authentication`: no `Authorization` header is added.
- `Basic Auth`: two separate fields, `Username` and `Password`. NetBird base64-encodes them and sends `Authorization: Basic `. Do not enter them as a single `username:password` string.
diff --git a/src/pages/manage/activity/event-streaming/index.mdx b/src/pages/manage/activity/event-streaming/index.mdx
index c3d1f8f3e..a2694b964 100644
--- a/src/pages/manage/activity/event-streaming/index.mdx
+++ b/src/pages/manage/activity/event-streaming/index.mdx
@@ -17,7 +17,7 @@ NetBird events into one of them puts your network activity alongside the rest of
Event Streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming)
- and in licensed self-hosted deployments. It is not served by the open-source management server.
+ and in licensed self-hosted deployments. It is not served by the open source management server.
## What Gets Streamed
diff --git a/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx b/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
index f8e3f4c4f..425bb319b 100644
--- a/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
+++ b/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
@@ -6,7 +6,7 @@ NetBird does not ship a SentinelOne card on the `Event Streaming` tab. The tab l
Event Streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming)
- and in licensed self-hosted deployments. It is not served by the open-source management server.
+ and in licensed self-hosted deployments. It is not served by the open source management server.
## Prerequisites
diff --git a/src/pages/manage/activity/event-streaming/wazuh.mdx b/src/pages/manage/activity/event-streaming/wazuh.mdx
index e5d535b95..43ce4e55e 100644
--- a/src/pages/manage/activity/event-streaming/wazuh.mdx
+++ b/src/pages/manage/activity/event-streaming/wazuh.mdx
@@ -4,7 +4,7 @@ NetBird does not ship a Wazuh card on the `Event Streaming` tab. The tab lists f
Event Streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming)
- and in licensed self-hosted deployments. It is not served by the open-source management server.
+ and in licensed self-hosted deployments. It is not served by the open source management server.
## Prerequisites
From 36ee8e903775745abb256e98ced7fbcbe7494f6e Mon Sep 17 00:00:00 2001
From: Brandon Hopkins
Date: Wed, 19 Aug 2026 11:49:56 -0700
Subject: [PATCH 4/5] Fix placeholders to be more generic
---
.../activity/event-streaming/generic-http.mdx | 4 +--
src/pages/manage/activity/index.mdx | 6 ++--
.../activity/traffic-events-logging.mdx | 36 +++++++++----------
3 files changed, 23 insertions(+), 23 deletions(-)
diff --git a/src/pages/manage/activity/event-streaming/generic-http.mdx b/src/pages/manage/activity/event-streaming/generic-http.mdx
index ab8a84c91..27988e809 100644
--- a/src/pages/manage/activity/event-streaming/generic-http.mdx
+++ b/src/pages/manage/activity/event-streaming/generic-http.mdx
@@ -133,10 +133,10 @@ A traffic event uses the same keys, but leaves the identity fields empty and car
"meta": {
"flow_id": "",
"direction": "EGRESS",
- "source_addr": "100.121.42.206:0",
+ "source_addr": "100.64.0.10:0",
"source_name": "example-laptop.local",
"source_type": "PEER",
- "destination_addr": "100.121.255.254:0",
+ "destination_addr": "100.64.0.20:0",
"destination_name": "",
"destination_type": "PEER",
"protocol": 6,
diff --git a/src/pages/manage/activity/index.mdx b/src/pages/manage/activity/index.mdx
index 61ac64813..51642c1a6 100644
--- a/src/pages/manage/activity/index.mdx
+++ b/src/pages/manage/activity/index.mdx
@@ -37,7 +37,7 @@ You can work with the feed using the following controls:
- **Time range.** The date picker defaults to `Last 14 Days` and offers the `All Time`, `Last Month`, `Last 14 Days`, `Yesterday`, and `Today`
presets, plus a custom start and end date. Your selection is remembered in the browser.
- **Filters.** The `Filters` button exposes a `Type` filter, which lets you select one or more event types grouped by category, and an `Initiator`
- filter, which narrows the feed down to a single user. System generated events are listed as `NetBird` in the `Initiator` filter.
+ filter, which narrows the feed down to a single user. System-generated events are listed as `NetBird` in the `Initiator` filter.
Active filters appear as chips above the feed.
- **Reset Filters & Search** clears the search term, the filters, and the time range.
- **Refresh** reloads the feed from the Management server.
@@ -52,7 +52,7 @@ See [User roles](/manage/team/user-roles) for the full matrix. The same check ap
### Tracked events
NetBird tracks changes that occur in the Management server, such as modifications to peers, users, groups, networks, DNS settings,
-system settings, setup keys, and access control policies. Each event has a human readable name and a stable activity code.
+system settings, setup keys, and access control policies. Each event has a human-readable name and a stable activity code.
The activity code is what you see in the [API response](/api/resources/events) and in
[streamed events](/manage/activity/event-streaming), so it is the safest value to build alerts and dashboards on.
@@ -237,7 +237,7 @@ never appear in your feed.
-Audit events cover configuration changes on the Management server. Connection level events, such as which peer connected to which
+Audit events cover configuration changes on the Management server. Connection-level events, such as which peer connected to which
resource and whether the connection was allowed or blocked, are covered by [Traffic Events Logging](/manage/activity/traffic-events-logging).
diff --git a/src/pages/manage/activity/traffic-events-logging.mdx b/src/pages/manage/activity/traffic-events-logging.mdx
index 655c2d5f0..ca87a7395 100644
--- a/src/pages/manage/activity/traffic-events-logging.mdx
+++ b/src/pages/manage/activity/traffic-events-logging.mdx
@@ -207,40 +207,40 @@ In addition to the data collected by the peers, the NetBird API provides additio
API sample response (one entry from the data array)
```json
{
- "flow_id": "9682d060-3b28-4fa3-8b47-98595a51bbda",
- "reporter_id": "cvco2st9q2cs73btphm0",
+ "flow_id": "aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee",
+ "reporter_id": "c1example00000000001",
"source": {
- "id": "cvco2st9q2cs73btphm0",
+ "id": "c1example00000000001",
"type": "PEER",
- "name": "MacBook-Pro-10.local",
+ "name": "example-laptop.local",
"geo_location": {
"city_name": "Frankfurt",
"country_code": "DE"
},
"os": "Darwin",
- "address": "100.89.67.186:50229",
- "dns_label": "macbook-pro-10-2"
+ "address": "100.64.0.10:50229",
+ "dns_label": "example-laptop"
},
"destination": {
- "id": "cvco2st9q2cs73btphmg",
+ "id": "c1example00000000002",
"type": "DOMAIN_RESOURCE",
- "name": "Any google.com domain",
+ "name": "Any example.com domain",
"geo_location": {
"city_name": "",
"country_code": ""
},
"os": "",
- "address": "142.250.185.206:443",
- "dns_label": "*.google.com"
+ "address": "203.0.113.10:443",
+ "dns_label": "*.example.com"
},
"user": {
- "id": "google-oauth2|xyz0123",
+ "id": "oauth2|example-idp|user-0001",
"email": "john@example.com",
"name": "John Doe"
},
"policy": {
- "id": "cvco2st9q2cs73btphn0",
- "name": "Allow google access"
+ "id": "c1example00000000003",
+ "name": "Allow example.com access"
},
"icmp": {
"type": 0,
@@ -255,16 +255,16 @@ In addition to the data collected by the peers, the NetBird API provides additio
"num_of_starts": 1,
"num_of_ends": 1,
"num_of_drops": 0,
- "window_start": "2026-03-22T20:26:16.937522Z",
- "window_end": "2026-03-22T20:30:17.257891Z",
+ "window_start": "2026-01-15T10:00:00.000000Z",
+ "window_end": "2026-01-15T10:04:00.000000Z",
"events": [
{
"type": "TYPE_START",
- "timestamp": "2026-03-22T20:26:16.937522Z"
+ "timestamp": "2026-01-15T10:00:00.000000Z"
},
{
"type": "TYPE_END",
- "timestamp": "2026-03-22T20:30:17.257891Z"
+ "timestamp": "2026-01-15T10:04:00.000000Z"
}
]
}
@@ -310,7 +310,7 @@ Correlate a session by comparing the aggregated flow records reported by both si
### Viewing TCP and UDP connections
You can use endpoint addresses, destination ports, and the other flow fields to correlate TCP and UDP records. Below we will analyze a few examples for a connection between a user computer and Web and FTP servers.
-The peer Maycons-MacBook-Pro.local initiates a connection to the Web server on destination port TCP/80. A successful aggregate has non-zero start and end counters and totals the packets and bytes transferred in the reporting window:
+The peer `example-laptop.local` initiates a connection to the Web server on destination port TCP/80. A successful aggregate has non-zero start and end counters and totals the packets and bytes transferred in the reporting window:
From 9bd780e805646c460cfae7145dcfab101953e05b Mon Sep 17 00:00:00 2001
From: Brandon Hopkins
Date: Wed, 19 Aug 2026 12:04:49 -0700
Subject: [PATCH 5/5] Alt text and problem solve openings
---
src/pages/client/environment-variables.mdx | 2 +-
.../event-streaming/amazon-firehose.mdx | 8 ++--
.../activity/event-streaming/amazon-s3.mdx | 10 ++--
.../activity/event-streaming/datadog.mdx | 8 ++--
.../activity/event-streaming/generic-http.mdx | 4 ++
.../manage/activity/event-streaming/index.mdx | 2 +-
.../event-streaming/sentinelone-data-lake.mdx | 8 ++--
src/pages/manage/activity/index.mdx | 11 +++--
.../activity/traffic-events-logging.mdx | 48 +++++++++----------
9 files changed, 54 insertions(+), 47 deletions(-)
diff --git a/src/pages/client/environment-variables.mdx b/src/pages/client/environment-variables.mdx
index 5f7d336df..db2118196 100644
--- a/src/pages/client/environment-variables.mdx
+++ b/src/pages/client/environment-variables.mdx
@@ -46,7 +46,7 @@ To clear all saved service parameters (including env vars), run `sudo netbird se
| `NB_USE_NETSTACK_MODE` | All | Run WireGuard on top of a userspace TCP/IP stack (gVisor netstack) instead of a TUN device. Required for environments without TUN support (e.g. unprivileged containers). |
| `NB_NETSTACK_SKIP_PROXY` | All | When using netstack mode, do not start the built-in SOCKS5 proxy that exposes the WireGuard network to local applications. |
| `NB_SOCKS5_LISTENER_PORT` | All | Override the port the netstack SOCKS5 proxy listens on (default: `1080`). Only relevant when netstack mode is active. |
-| `NB_SOCKS5_LISTENER_ADDRESS` | All | Override the host/IP the netstack SOCKS5 proxy binds to (default: `127.0.0.1`). The proxy is unauthenticated and meant for local applications only, so it listens on loopback. Set this (e.g. to `0.0.0.0`) only when the proxy must be reachable from other hosts, such as a container gateway — this exposes an unauthenticated proxy on that address. Only relevant when netstack mode is active. |
+| `NB_SOCKS5_LISTENER_ADDRESS` | All | Override the host/IP the netstack SOCKS5 proxy binds to (default: `127.0.0.1`). The proxy is unauthenticated and meant for local applications only, so it listens on loopback. Set this (e.g. to `0.0.0.0`) only when the proxy must be reachable from other hosts, such as a container gateway. Doing so exposes an unauthenticated proxy on that address. Only relevant when netstack mode is active. |
## Firewall
diff --git a/src/pages/manage/activity/event-streaming/amazon-firehose.mdx b/src/pages/manage/activity/event-streaming/amazon-firehose.mdx
index 417fac9d3..3b2122349 100644
--- a/src/pages/manage/activity/event-streaming/amazon-firehose.mdx
+++ b/src/pages/manage/activity/event-streaming/amazon-firehose.mdx
@@ -75,7 +75,7 @@ the stream name with your own values):
## Create an Integration in NetBird
- Navigate to the [Integrations » Event Streaming](https://app.netbird.io/integrations?tab=event-streaming) tab in the NetBird dashboard
-
+
- On the `Amazon Data Firehose` card, click `Connect Amazon Data Firehose` or turn the card's toggle on to open the
@@ -84,17 +84,17 @@ fill in the field on that step.
- Step 1, `Select your Amazon Data Firehose region`: pick the region your stream lives in and click `Continue`. The dropdown
defaults to `US East (N. Virginia)`, so change it if your stream is elsewhere.
-
+
- Step 2, `Create your Firehose Stream`: under `Enter your Firehose stream name`, enter the stream you created in
[Create a Data Firehose Stream](#create-a-data-firehose-stream) and click `Continue`
-
+
- Step 3, `Create IAM credential`: enter the access key under `Enter your Access-Key`, the secret under `Enter your Secret-Key`,
both created in [Create an IAM User](#create-an-iam-user), and click `Connect`
-
+
All four values (region, stream name, access key, secret key) are required. Once you click `Connect`, the integration is created
diff --git a/src/pages/manage/activity/event-streaming/amazon-s3.mdx b/src/pages/manage/activity/event-streaming/amazon-s3.mdx
index 0edfc3fad..444c28652 100644
--- a/src/pages/manage/activity/event-streaming/amazon-s3.mdx
+++ b/src/pages/manage/activity/event-streaming/amazon-s3.mdx
@@ -74,7 +74,7 @@ with your own bucket name):
## Create an Integration in NetBird
- Navigate to the [Integrations » Event Streaming](https://app.netbird.io/integrations?tab=event-streaming) tab in the NetBird dashboard
-
+
- On the `Amazon S3` card, click `Connect Amazon S3` or turn the card's toggle on to open the `Connect NetBird with Amazon S3` wizard.
@@ -82,17 +82,17 @@ The wizard has three steps, and each step's button stays disabled until you fill
- Step 1, `Select your Amazon S3 region`: pick the region your bucket lives in and click `Continue`. The dropdown defaults to
`US East (N. Virginia)`, so change it if your bucket is elsewhere.
-
+
- Step 2, `Create your S3 Bucket`: under `Enter your S3 Bucket name`, enter the bucket you created in
[Create an S3 Bucket](#create-an-s3-bucket) and click `Continue`
-
+
- Step 3, `Create IAM credential`: enter the access key under `Enter your Access-Key`, the secret under `Enter your Secret-Key`,
both created in [Create an IAM User](#create-an-iam-user), and click `Connect`
-
+
All four values (region, bucket name, access key, secret key) are required. Once you click `Connect`, the integration is created
@@ -126,7 +126,7 @@ containing the following events:
- `integration created`
-
+
```json
diff --git a/src/pages/manage/activity/event-streaming/datadog.mdx b/src/pages/manage/activity/event-streaming/datadog.mdx
index 7db3d843a..7a49bc73f 100644
--- a/src/pages/manage/activity/event-streaming/datadog.mdx
+++ b/src/pages/manage/activity/event-streaming/datadog.mdx
@@ -70,18 +70,18 @@ Datadog sites:
- Navigate to the `Integrations` » `Event Streaming` tab in the [NetBird Dashboard](https://app.netbird.io/integrations?tab=event-streaming)
-
+
- On the `Datadog` card, click `Connect Datadog` or switch the card's toggle on. Either one opens the
`Connect NetBird with Datadog` wizard.
- Under `Select your Datadog region`, choose your site from the dropdown and click `Continue`
-
+
- Under `Get your Datadog API Key`, paste the API key you created above into the input field and click `Connect`
-
+
The API key is the only value you type in. `Connect` stays disabled until the field is filled, and NetBird does not check
@@ -96,7 +96,7 @@ service in the Log Explorer:
- `integration created`
-
+
The `integration test` event is sent to validate whether the provided credentials are correct and NetBird can stream events.
diff --git a/src/pages/manage/activity/event-streaming/generic-http.mdx b/src/pages/manage/activity/event-streaming/generic-http.mdx
index 27988e809..ee6d1e788 100644
--- a/src/pages/manage/activity/event-streaming/generic-http.mdx
+++ b/src/pages/manage/activity/event-streaming/generic-http.mdx
@@ -4,6 +4,10 @@ The Generic HTTP integration streams your NetBird audit and traffic events to an
For every event, NetBird sends a POST request to the endpoint you configure. You control the request headers and, optionally, the shape of the body.
+If your destination is Datadog, Amazon S3, or Amazon Data Firehose, use its own card instead. Those integrations ask
+for a region and credentials and handle the endpoint and payload for you, so there is nothing to template and nothing
+to keep in sync. Reach for Generic HTTP when no dedicated card exists for where you are sending events.
+
Event streaming is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=event-streaming) and in licensed self-hosted Enterprise deployments. The open source management server does not serve the event streaming API, so the integration cards stay locked there.
diff --git a/src/pages/manage/activity/event-streaming/index.mdx b/src/pages/manage/activity/event-streaming/index.mdx
index a2694b964..de75c5284 100644
--- a/src/pages/manage/activity/event-streaming/index.mdx
+++ b/src/pages/manage/activity/event-streaming/index.mdx
@@ -1,7 +1,7 @@
# Stream Audit and Traffic Events to Third-Party Services
-
+
Event Streaming forwards your NetBird activity to an external destination as the events occur. Destinations include SIEM
diff --git a/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx b/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
index 425bb319b..a5508dd11 100644
--- a/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
+++ b/src/pages/manage/activity/event-streaming/sentinelone-data-lake.mdx
@@ -31,7 +31,7 @@ Before you start configuring the `Generic HTTP` integration for SentinelOne Sing
- Click **Copy to Clipboard** and store this token securely. You will need this token when configuring the integration in NetBird.
-
+
## Get the HEC Ingestion URL
@@ -48,7 +48,7 @@ to find and copy the HTTP Event Collector base URL from the documentation page.
5. Click `Continue`.
-
+
6. Leave the `Headers` tab empty unless your tenant requires extra headers, then click `Continue`. Do not add your own `Authorization` header here, because it conflicts with the `Bearer Token` method selected on the previous tab and blocks the save.
@@ -71,7 +71,7 @@ to find and copy the HTTP Event Collector base URL from the documentation page.
8. Click `Connect`. When you are editing an integration that already exists, the button reads `Save Changes` instead.
-
+
@@ -91,7 +91,7 @@ Saving the integration makes NetBird post a synthetic test event to the endpoint
- Look for an `integration test event for generic http endpoint` message followed by an `integration created` message, and confirm that the `id`, `initiator_id`, `target_id`, and `time` fields carry the values your template produced
-
+
The integration is now set up and ready to stream network activity events to SentinelOne Singularity Data Lake.
diff --git a/src/pages/manage/activity/index.mdx b/src/pages/manage/activity/index.mdx
index 51642c1a6..ab8c82f48 100644
--- a/src/pages/manage/activity/index.mdx
+++ b/src/pages/manage/activity/index.mdx
@@ -1,8 +1,11 @@
# Audit Events Logging
-The Audit events logging functionality in NetBird allows you to observe and track changes to your network infrastructure.
-This includes events such as when a new machine or user has joined your network, when access control policies have been modified,
-and many other key network events.
+Networks drift. A policy gets loosened, a setup key gets shared, someone is added to a group that grants more access than
+anyone intended. Weeks later the question is who changed it, and when.
+
+Audit events answer that. NetBird records every configuration change made on the Management server, such as a peer or user
+joining, an access control policy being modified, or a setup key being revoked, and keeps them in a searchable feed with the
+person or system that made each change.
## Related Video Content
@@ -22,7 +25,7 @@ This view provides a centralized log of network events.
-
+
Each entry in the feed shows who triggered the event (name and email address), when it happened, and a description of the change with the
diff --git a/src/pages/manage/activity/traffic-events-logging.mdx b/src/pages/manage/activity/traffic-events-logging.mdx
index ca87a7395..1a9053e83 100644
--- a/src/pages/manage/activity/traffic-events-logging.mdx
+++ b/src/pages/manage/activity/traffic-events-logging.mdx
@@ -1,5 +1,13 @@
# Traffic Events Logging
+Access policies tell NetBird which connections are allowed. They do not tell you what actually happened. When a
+connection fails for no obvious reason, or an auditor asks who reached the production database last month, you need a
+record of the attempts themselves.
+
+Traffic events are that record. Each event describes one connection, peer-to-peer, site-to-site, or peer-to-resource:
+who started it, what they reached, when, over which protocol and port, how much data moved, and which policy allowed
+or blocked it.
+
This feature is available in NetBird Cloud under the [Business plan](https://www.netbird.io/pricing?utm_source=docs&utm_content=traffic-events) and in licensed self-hosted Enterprise deployments with traffic flow enabled.
Traffic events are experimental, so functionality and behavior may evolve, including how data is collected and reported.
@@ -11,14 +19,6 @@ On self-hosted deployments, traffic flow is an opt-in part of the [Enterprise st
-The traffic events logging functionality enables comprehensive monitoring and analysis of connections across your infrastructure.
-It captures network activity, including peer-to-peer, site-to-site, peer-to-resource, and other network traffic events.
-
-It provides detailed visibility into connections and network traffic flow, helping to answer key questions such as who initiated
-the connection, what resource was accessed, when it happened, where it originated, and why it was allowed. By enhancing
-network monitoring capabilities, it strengthens security measures and delivers actionable operational insights, empowering
-you to better manage and secure your environment.
-
## How Traffic Events Logging Works
NetBird offers flexibility as a peer-to-peer (p2p) overlay network and a remote network access solution. You can use NetBird to connect
@@ -36,7 +36,7 @@ connection on both the user's machine and the CRM server. If the connection was
NetBird would log the blocked event on the peer that refused the connection.
-
+
#### Successful P2P Connection Events
@@ -47,7 +47,7 @@ For example, in a successful peer-to-peer connection scenario, a user initiates
This is illustrated in the screenshot below.
-
+
You'll see two aggregated flow records, one reported by each peer (source and destination). The record from `Alice` counts the connection start and end from the initiator's perspective.
@@ -67,7 +67,7 @@ The initiating peer `Alice` will still report the connection attempt but won't b
In this scenario, the `IT Admins to Servers` policy is configured to allow only ping requests (`ICMP`),
meaning `TCP` connections are intentionally not allowed. The screenshot below illustrates this behavior.
-
+
### Peer-to-Network Resource Connections
@@ -82,7 +82,7 @@ and port 443, NetBird would log the traffic events for that connection on the us
routed the connection to the CRM server. If the connection was blocked, NetBird would log the blocked event on the routing peer.
-
+
#### Successful Peer-to-Network Resource Events
@@ -93,7 +93,7 @@ The access is permitted by the policy `IT Admins to AWS Servers`, which allows c
Note the `Router` column in the table, which identifies the routing peer responsible for routing to the internal network resource.
-
+
@@ -108,7 +108,7 @@ the policy `IT Admins to AWS Servers` does not permit `TCP` connections on port
The routing peer's aggregate shows the number of dropped attempts, so repeated application retries increase the drop count instead of creating one top-level row for every attempt.
-
+
@@ -146,7 +146,7 @@ You can optionally turn on `Enable Traffic Reporting (Kernel)` to capture packet
-
+
### Limiting Traffic Events to Specific Groups
@@ -159,7 +159,7 @@ You can scope traffic events logging to only the peers that belong to specific g
To configure this setting, navigate to `Settings > Networks`, and in the `Experimental` section open the `Limit To Specific Groups` selector
below `Enable Traffic Events`, choose the groups you want to include, and click `Save Groups`.
-
+
## Log Retention
@@ -312,14 +312,14 @@ You can use endpoint addresses, destination ports, and the other flow fields to
The peer `example-laptop.local` initiates a connection to the Web server on destination port TCP/80. A successful aggregate has non-zero start and end counters and totals the packets and bytes transferred in the reporting window:
-
+
Use the reporter, source, destination, direction, protocol, and destination port to align the two perspectives. An end can be reported in a later window when the operating system keeps the TCP session open.
The UDP connection is very similar:
-
+
UDP is stateless, so its end counter is only updated after the client observes 30 seconds of inactivity on the connection.
@@ -329,12 +329,12 @@ When a connection is blocked, you may see similar entries to the following event
**TCP**:
-
+
**UDP**:
-
+
On the refusing side, retries increase `num_of_drops`; the client does not record a successful start or end for traffic it rejected. Drops are always recorded as `INGRESS`, because a peer can only observe traffic that it refused to accept.
@@ -344,7 +344,7 @@ On the refusing side, retries increase `num_of_drops`; the client does not recor
### Viewing ICMP connections
ICMP events are similar to TCP and UDP events. The main difference is that ICMP doesn't have ports:
-
+
ICMP is grouped by ICMP type and does not use ports. Its end counter is only updated after 30 seconds of inactivity.
@@ -354,17 +354,17 @@ Routed events follow the same pattern as P2P events. The main difference is that
**ICMP**:
-
+
**TCP**:
-
+
For routed aggregates, the source or destination can be a resource or network route, and the `Router` column identifies the routing peer that reported it. For domain based resources, the endpoint is resolved on the peer that performed the DNS resolution, so one side of the flow can show the resource name while the other side shows only the address with type `UNKNOWN`.
For site-2-site connections, the events will be similar to the above examples, but you will see a routing peer for each event:
-
+
## Limitations