Network Flow Logs
Network Flow Logs (also referred to as flow data) capture metadata about IP traffic generated by devices across emnify’s mobile core. Use them to observe device connectivity behavior, troubleshoot issues, support security analysis, and meet audit or compliance requirements—without inspecting packet payloads or content.
Flow Logs are a subscribable enterprise service. Access them through the emnify Portal, the REST API, or stream them to external systems using Data Streamer.
Each Flow Log record describes observed IP traffic using core network attributes, including source and destination IP addresses, ports, protocol, timestamps, and traffic volume. Records also include hostname attribution and device, session, and network context (for example, organization, endpoint, APN, and serving operator) where available.
With this enrichment, you can identify not only which IP addresses your devices communicate with, but also which domains and services they contact and under which network context.
Flow Log events
Flow Log records are emitted at defined stages of a flow’s lifecycle, indicated by the event_type field:
A flow is identified by flow_id.
For flow_update records, bytes_up and bytes_down are incremental values for the reporting window from period_start_ts to period_end_ts.
On flow_end, the release_details object explains how and why the flow terminated.
Record fields
Enrichment objects
The following objects are present when the corresponding enrichment is available.
nat_details—NAT translation details:
domain_name—destination name attribution:
pdp_context—mobile network context:
release_details—flow termination details, on the last record of a flow:
Event timing
emnify doesn’t emit Flow Log records on a fixed schedule. For an active flow, a minimum period limits how often updates are emitted, and emnify checks whether a record is due at a regular interval. By default, the minimum period is 60 seconds and the check interval is 10 seconds. Because checks run periodically, records can come several seconds later than the minimum period, and their timestamps don’t fall on exact 60-second boundaries. These differences are expected and don’t indicate lost data. These default values can change.
flow_start: the first record covers the flow’s first 10 to 20 seconds by default, so you see new flows early. A DNS flow can expire before the first check. Its only record is then aflow_startrecord that already containsrelease_details.flow_update: 60 seconds is the minimum period between updates, not a fixed schedule. Under continuous traffic, updates are emitted about 60 to 70 seconds apart. If no bytes were transferred since the previous record, emnify emits no update and starts a new window, so a flow’s records can have gaps between them while the flow is idle. If the flow stays idle, it ends when its idle timeout expires.flow_end: emnify checks for expired flows about every 3 seconds, so the record is emitted within about 3 seconds after the flow’s idle timeout expires. Its window covers at most about the last 70 seconds of the flow, and often less. Because some idle timeouts are long, theflow_endrecord can come hours after the previous record.
How a flow ends depends on the protocol:
The idle timeout depends on the flow type. The default values are 30 seconds for ICMP, 3 minutes for UDP, 10 seconds for UDP DNS, 30 seconds for transitory TCP, and 4 hours 8 minutes for established TCP. These values can change.
TCP flow example
A short flow_end window after a longer flow_update is normal for TCP.
UDP flow example
A UDP flow follows the same pattern for flow_start and flow_update.
It ends with idle_timeout after the UDP idle timeout elapses without packets.
The flow_end record is emitted at the first check after the flow expires, so it appears up to about 3 seconds after the timeout.