Abnormal Event Fields

This reference covers abnormal event structures, fields, and limitations. See Abnormal Event Diagnosis for capabilities and Node Configuration for collection settings.

Event Records

Results are written to Elasticsearch or local files according to enabled storage settings. Filter by tracer_type=event, event name, host or container, and time range. The JSON examples illustrate structure and omit some common fields. Threshold descriptions use built-in defaults.

Container fields are provided only when a container is associated. Event-specific data is in tracer_data.

Field Description
hostname Node hostname
region Node region
uploaded_timestamp Data upload time
container_id Container ID
container_hostname Container hostname
container_host_namespace Container’s Kubernetes namespace
container_type Container type, such as normal or sidecar
container_qos Container QoS class
tracer_name Event name, such as sched_tick or memory_oom_kill
tracer_id ID of this trace
observed_timestamp User-space observation time
tracer_type Observation type; always event for these records
tracer_data Event-specific data described below

CPU Scheduling

Scheduling Tick Intervals

Observer: sched_tick.

Measures the total interval between consecutive scheduling ticks. When the interval reaches the threshold, it records the current kernel stack and process information. This can reveal prolonged IRQ disabling, CPU stalls, or virtualization scheduling delays, but does not alone prove that softirqs were disabled. comm and pid identify the task interrupted by the reporting tick, not the task responsible for the delay.

Use cases

  • Kernel or driver code disables local interrupts for a long time, or hardirq/NMI work occupies the CPU for too long.
  • The host preempts a VM’s vCPU for an extended period, including high steal time and scheduling stalls.
  • Low-level anomalies such as SMI, firmware stalls, or delayed or lost clockevent delivery.

Limitations

Normal tick suppression after successfully entering NO_HZ is filtered out. High CPU load or a softirq backlog alone does not imply tick delay.

Set the threshold above the machine’s normal tick interval. The event stack captures only the first tick after the delay ends; use IRQ, steal-time, and hardware metrics to investigate the cause.

Example with some common fields omitted:

{
    "uploaded_timestamp": "2025-06-11T16:05:16.251152703+08:00",
    "hostname": "***",
    "tracer_data": {
        "tick_interval_ns": 237328905,
        "tick_interval_threshold_ns": 10000000,
        "comm": "***-agent",
        "pid": 688073,
        "cpu": 1,
        "stack": "scheduler_tick/..."
    },
    "observed_timestamp": "2025-06-11T16:05:16.251+08:00",
    "tracer_type": "event",
    "region": "***",
    "tracer_name": "sched_tick"
}
Field Description
comm Process name of the task interrupted by the reporting tick
stack Kernel stack captured at the first scheduling tick after the delay
tick_interval_ns Total interval between consecutive scheduling ticks (nanoseconds)
cpu CPU ID where the event occurred
tick_interval_threshold_ns Tick interval threshold (nanoseconds); reaching it records an event
pid Process ID of the task interrupted by the reporting tick

Soft Lockups

Observer: softlockup.

Records the process, CPU, and NMI backtraces when the kernel reports a soft lockup. These details alone cannot identify the responsible process. Kernel watchdog settings determine trigger timing.

The reporting interval for repeated events increases from 10 minutes to at most 3 hours. Events are still counted during this interval.

Example with some common fields omitted:

{
    "tracer_data": {
        "cpu": 15,
        "pid": 12345,
        "comm": "kworker/15:0",
        "cpus_stack": "2025-06-10 14:30:22 sysrq: Show backtrace of all active CPUs\nNMI backtrace for cpu 15\n..."
    }
}
Field Description
cpu CPU ID where the soft lockup occurred
pid Process PID when the soft lockup was reported
comm Process name when the soft lockup was reported
cpus_stack NMI backtraces from all CPUs as multiline text with timestamps and stacks

Hung Tasks

Observer: hungtask.

Matched hungtask events carry a container ID; unresolved events retain host output. Stack snapshots remain system-wide. See container counts.

Detects system hung-task events and collects kernel stacks of D-state (uninterruptible sleep) processes and CPU backtraces. The repeat reporting interval increases from 10 minutes to at most 3 hours, while events continue to be counted. The observer is not registered if the kernel does not provide hung_task_timeout_secs. Setting that value to 0 disables kernel hung-task detection.

Example with some common fields omitted:

{
    "tracer_data": {
        "tid": 2567042,
        "comm": "kworker/u48:2",
        "cpus_stack": "2025-06-10 09:57:14 sysrq: Show backtrace of all active CPUs\nNMI backtrace for cpu 33\n...",
        "blocked_processes_stack": "task:java            state:D stack:    0 pid: 12345 ..."
    }
}
Field Description
tid TID of the task that triggered hung-task detection
comm Name of the task that triggered hung-task detection
cpus_stack NMI backtraces from all CPUs as multiline text with timestamps and stacks
blocked_processes_stack Kernel stacks of D-state processes
hung_task_timeout_secs Kernel hung-task detection timeout in seconds

Memory

OOM Kills

Observer: memory_oom_kill.

Records the process that triggered the OOM Killer (trigger), the killed process (victim), and available container, cgroup, and host memory information. The triggering process is not necessarily the main memory consumer; analyze usage and memory limits together.

Example with some fields omitted:

{
    "tracer_name": "memory_oom_kill",
    "tracer_data": {
        "trigger": {
            "memory_cgroup_css_addr": "0xff4b8d8be3818000",
            "container_id": "example-container",
            "container_hostname": "app-pod",
            "pid": 3218804,
            "comm": "java"
        },
        "victim": {
            "memory_cgroup_css_addr": "0xff4b8d8be3818000",
            "container_id": "example-container",
            "container_hostname": "app-pod",
            "pid": 3218745,
            "comm": "java",
            "cgroup": {
                "path": "kubepods.slice/...",
                "current": 2143289344,
                "max": 2147483648,
                "stat": {
                    "anon": 1509949440,
                    "file": 83886080
                },
                "events": {
                    "oom": 1,
                    "oom_kill": 1
                }
            }
        },
        "memory_snapshot": {
            "host_meminfo": {
                "MemAvailable": 3355443200,
                "Cached": 1073741824,
                "Slab": 268435456
            }
        }
    }
}
Field Description
trigger / victim Triggering and killed processes, both using the process fields below
pid / comm PID and process command name
container_id / container_hostname Associated container ID and hostname; omitted without an association
memory_cgroup_css_addr Hexadecimal memory cgroup pointer
cgroup.path Container cgroup path
cgroup.current / cgroup.max Memory usage and limit at snapshot time, in bytes
cgroup.stat / cgroup.events Raw cgroup memory statistics and event counts; fields depend on the cgroup version
memory_snapshot.host_meminfo Selected host /proc/meminfo fields, converted to bytes

cgroup appears inside trigger or victim only when container attribution and snapshot reads succeed. The host snapshot may also be absent. These values are read in user space and are not strictly synchronized with the OOM event.

Direct Reclaim

Observer: memory_reclaim_events.

Records the duration of an individual direct memory reclaim by a thread. When try_to_free_pages returns after exceeding the threshold (default: 900 milliseconds), it reports process, thread, and container details. Events without a resolved container are retained in the host stream. Blacklists use the registration name memory_reclaim_events; stored records use tracer_name=memory_reclaim.

Example with some common fields omitted:

{
    "tracer_name": "memory_reclaim",
    "tracer_data": {
        "pid": 1896137,
        "tid": 1896138,
        "comm": "java",
        "reclaim_duration_ns": 1412702917
    }
}
Field Description
comm Process name that triggered direct reclaim
pid Triggering process PID
tid Triggering thread TID
reclaim_duration_ns Direct reclaim duration (nanoseconds)

An empty container ID can mean a host task or unresolved container attribution. Resolved container events are unaffected and are not duplicated in the host stream.

Network

Protocol Stack Drops

Observer: dropwatch.

Detects packet drops in the kernel network stack and reports kernel stacks, network five-tuples, TCP state, and other details. An optional stack filter can suppress noise patterns verified on the local system. type is reserved for TCP drop-type compatibility and is currently unset.

Example with some common fields omitted:

{
    "observed_timestamp": "2026-07-23T02:14:40.304775546Z",
    "tracer_data": {
        "drop_reason": "SKB_DROP_REASON_NOT_SPECIFIED",
        "source": "events",
        "comm": "kubelet",
        "pid": 1687046,
        "net_namespace_cookie": 123456789,
        "net_namespace_inum": 402653184,
        "netdev_queue_mapping": 3,
        "netdev_linkstatus": ["linkStatusUp"],
        "netdev_name": "eth0",
        "netdev_ifindex": 2,
        "packet_eth_proto": "0x0800",
        "packet_len_bytes": 1460,
        "layers": {
            "label": "IPv4/TCP",
            "ipv4": {
                "saddr": "10.79.68.62",
                "daddr": "10.134.72.4",
                "protocol": "TCP"
            },
            "tcp": {
                "sport": 8080,
                "dport": 49000,
                "seq": 1009085774,
                "ack_seq": 689410995,
                "sk_state": "ESTABLISHED"
            }
        },
        "stack": "kfree_skb/..."
    }
}
Field Description
type Reserved drop type, currently unset and absent from JSON. Reserved codes: 1 general drop, 2 SYN flood, 3 SYN backlog overflow, 4 accept queue overflow
drop_reason Kernel packet-drop reason
source tools for standalone dropwatch, events when started by huatuo-bamai
comm Process name at the drop
pid Process ID
net_namespace_cookie / net_namespace_inum Network namespace values for container attribution
netdev_queue_mapping NIC queue index
netdev_linkstatus NIC link-state flags
netdev_name NIC device name
netdev_ifindex NIC interface index
packet_len_bytes Packet length (bytes)
packet_eth_proto Ethernet protocol type in hexadecimal
layers.ipv4.saddr / layers.ipv4.daddr Source and destination IP addresses
layers.tcp.sport / layers.tcp.dport Source and destination ports
layers.tcp.seq / layers.tcp.ack_seq TCP sequence and acknowledgment numbers
layers.tcp.sk_state TCP connection state at the drop
stack Kernel stack at the drop

Receive Latency

Observer: net_rx_latency.

Records TCP packet latency from the driver receive point to __netif_receive_skb, tcp_v4_rcv, and the user-copy point. All three durations start at the driver, not at the preceding observation point. Default thresholds are 5, 10, and 115 milliseconds, respectively. Reaching a threshold records endpoints, TCP state, sequence numbers, and latency.

The host network namespace is excluded by default; only container networking is observed.

Example with some common fields omitted:

{
    "observed_timestamp": "2025-06-11T00:00:00Z",
    "tracer_data": {
        "comm": "nginx",
        "pid": 2921092,
        "latency_stage": "RX_STAGE_USERCOPY",
        "latency_ms": 95973,
        "latency_threshold_ms": 115,
        "tcp_state": "ESTABLISHED",
        "tcp_saddr": "10.156.248.76",
        "tcp_daddr": "10.134.72.4",
        "tcp_sport": 9213,
        "tcp_dport": 49000,
        "tcp_seq": 1009085774,
        "tcp_ack_seq": 689410995,
        "net_namespace_cookie": 123456789,
        "net_namespace_inum": 402653184,
        "packet_len_bytes": 26064
    }
}
Field Description
comm Process name at the event
pid Process ID at the event
latency_stage Stage: RX_STAGE_NETIF (NIC to kernel), RX_STAGE_TCPV4 (driver to TCP), or RX_STAGE_USERCOPY (driver to user copy)
latency_ms Measured latency (milliseconds)
latency_threshold_ms Trigger threshold (milliseconds)
tcp_state TCP connection state; all states are supported, including ESTABLISHED, SYN_SENT, FIN_WAIT, and TIME_WAIT
tcp_saddr / tcp_daddr Source/destination IP addresses
tcp_sport / tcp_dport Source/destination ports
tcp_seq / tcp_ack_seq TCP sequence/acknowledgment numbers
net_namespace_cookie Network namespace cookie, available on kernels >= 5.14 for efficient container association
net_namespace_inum Network namespace inum
packet_len_bytes Packet length (bytes)

NIC State

Observer: netdev_events.

Subscribes to kernel netlink RTM_NEWLINK messages to detect NIC link-flag changes such as AdminDown or CarrierDown. It reports interface name, link state, MAC address, and driver details. At startup, it scans devices in EventTracing.Netdev.DeviceList to establish a baseline, then reports only state changes.

Example with some common fields omitted:

{
    "tracer_data": {
        "ifname": "eth1",
        "index": 3,
        "linkstatus": "linkStatusAdminDown, linkStatusCarrierDown",
        "mac": "5c:6f:69:34:dc:72",
        "start": false,
        "driver": "ixgbe",
        "driver_version": "5.1.0-k",
        "firmware_version": "3.25 0x80000421 1.2163.0"
    }
}
Field Description
ifname Network interface name, such as eth1
index Interface index
linkstatus Link-state change description, possibly containing multiple states
mac NIC MAC address
start Startup-scan flag; currently false because only live changes are saved
driver NIC driver name
driver_version NIC driver version
firmware_version NIC firmware version

LACP State

Observer: netdev_bonding_lacp.

Enabled only when the system has an IEEE 802.3ad bonding interface. On LACP (Link Aggregation Control Protocol) state changes, it reads and records all bonding interfaces under /proc/net/bonding/, including mode, MII state, Actor/Partner negotiation parameters, and slave link states.

Stored records use tracer_name=lacp; configuration blacklists use the registration name netdev_bonding_lacp.

Example with some common fields omitted:

{
    "tracer_name": "lacp",
    "tracer_data": {
        "content": "/proc/net/bonding/bond0\nEthernet Channel Bonding Driver: v4.18.0...\nBonding Mode: IEEE 802.3ad Dynamic link aggregation\nMII Status: down\n..."
    }
}
Field Description
content Complete bonding interface status as multiline text, including all slaves’ LACP negotiation details; equivalent to /proc/net/bonding/bondX contents

Transmit Queue Timeouts

Observer: netdev_txqueue_timeout.

Detects NIC TX queue timeouts and records the affected queue index, device name, and driver name to investigate transmit-side device, driver, or link anomalies.

Example with some common fields omitted:

{
    "tracer_data": {
        "queue_index": 3,
        "device_name": "eth0",
        "driver_name": "ixgbe"
    }
}
Field Description
queue_index Transmit queue index that timed out
device_name NIC device name
driver_name NIC driver name

Compatibility

OOM Name Migration

The OOM kill tracer is now memory_oom_kill, previously memory_oom and earlier oom. Update blacklists, event filters, and alert queries together.

The metric prefix is now huatuo_bamai_memory_oom_kill_, replacing huatuo_bamai_memory_oom_ and the earlier huatuo_bamai_oom_. Update metric dashboards and recording rules accordingly.

Historical events retain their original names. Cross-version queries must match all three; the built-in event dashboard already covers them.