AutoTracing Fields

This reference covers AutoTracing record fields, units, and examples. See AutoTracing for use cases and Node Configuration for settings. Thresholds below are built-in defaults that configuration files can override.

Results

Automatic tracing events are written to Elasticsearch or local files according to enabled storage settings. Filter by tracer_type=autotracing, tracer_name, host or container identifiers, and time range. The JSON examples illustrate field structure, not measured results.

CPU examples use perf. With profiler, events retain trigger metrics; profiles are stored separately in Elasticsearch with the same tracer_id. See Node Configuration for storage requirements and viewing instructions.

Common Fields

Records contain these common fields. Container fields are provided only when a container is associated.

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
container_qos Container QoS class
tracer_name Event name, such as cpusys or memburst
tracer_id ID of this trace
started_timestamp Trace start time
tracer_type Observation type; always autotracing for AutoTracing records
tracer_data Event-specific data described below

Host CPU

Tracer: cpusys. Select perf (default) or profiler with AutoTracing.CPUSys.Tool.

Periodically reads /proc/stat to detect host system, user (user + nice), and executing-total (user + nice + system + irq + softirq) CPU bursts, including container work. Any group triggers profiling when both utilization and its increase strictly exceed its thresholds. Default utilization/increase thresholds are system 45%/20 percentage points, user 75%/45 percentage points, and total 90%/55 percentage points.

All three groups share a capture and a default 30-minute cooldown. Thresholds are configured under CPUSys independently of CPUIdle; see the configuration reference. Records retain system fields and add matching user_percent* and total_percent* fields; zero-valued additional fields are omitted.

Example with some common fields omitted:

{
    "tracer_name": "cpusys",
    "tracer_data": {
        "system_percent": 52,
        "system_percent_threshold": 45,
        "system_percent_delta": 25,
        "system_percent_delta_threshold": 20,
        "flamedata": [
            {"level": 0, "value": 1000, "self": 0, "label": "all"},
            {"level": 1, "value": 350, "self": 350, "label": "do_syscall_64"}
        ]
    }
}
Field Description
system_percent Host system-mode CPU utilization at trigger time (%)
system_percent_threshold System-mode utilization threshold (%)
system_percent_delta Increase between consecutive samples (percentage points)
system_percent_delta_threshold Increase threshold (percentage points)
flamedata perf: flame graph frames, with fields listed below. profiler: null; query the separate profile using the event tracer_id
flamedata.level Stack depth
flamedata.value Sample count for the frame, including children
flamedata.self Sample count for the frame alone, excluding children
flamedata.label Function or process name

Container CPU

Tracer: cpuidle. Select perf (default) or profiler with AutoTracing.CPUIdle.Tool.

Periodically reads container cgroup CPU statistics. Container-level CPU sampling starts when user, system, or total utilization exceeds both its utilization threshold and its increase threshold between consecutive samples.

The default cooldown is 30 minutes per container. AutoTracing.CPUIdle.Filter controls target scope. Built-in thresholds:

Metric Utilization Threshold Increase Threshold
User 75% 45 percentage points
System 45% 20 percentage points
Total 90% 55 percentage points

Example with some common fields omitted:

{
    "tracer_name": "cpuidle",
    "tracer_data": {
        "user_percent": 80,
        "user_percent_threshold": 75,
        "user_percent_delta": 48,
        "user_percent_delta_threshold": 45,
        "system_percent": 12,
        "system_percent_threshold": 45,
        "system_percent_delta": 5,
        "system_percent_delta_threshold": 20,
        "total_percent": 92,
        "total_percent_threshold": 90,
        "total_percent_delta": 53,
        "total_percent_delta_threshold": 55,
        "flamedata": [
            {"level": 0, "value": 1000, "self": 0, "label": "all"},
            {"level": 1, "value": 800, "self": 800, "label": "java/com.example.App.main"}
        ]
    }
}
Field Description
user_percent / user_percent_threshold Container user-mode CPU utilization at trigger time (%) and its threshold
user_percent_delta / user_percent_delta_threshold User-mode utilization increase (percentage points) and its threshold
system_percent / system_percent_threshold Container system-mode CPU utilization at trigger time (%) and its threshold
system_percent_delta / system_percent_delta_threshold System-mode utilization increase (percentage points) and its threshold
total_percent / total_percent_threshold Container total CPU utilization at trigger time (%) and its threshold
total_percent_delta / total_percent_delta_threshold Total utilization increase (percentage points) and its threshold
flamedata perf: container flame graph frames, with the same fields as cpusys. profiler: null; query the separate profile using the event tracer_id

Container D-State Load

Tracer: dload.

Reads container process states through netlink and cgroups to calculate an exponential moving average (EMA) of uninterruptible (D-state) process load. It triggers when the EMA exceeds the threshold (default: 5), with a default 30-minute cooldown per container.

Results include kernel stacks of container and host D-state processes. AutoTracing.IssuesList labels known issues.

Example with some common fields omitted:

{
    "tracer_name": "dload",
    "tracer_data": {
        "threshold": 5,
        "nr_sleeping": 120,
        "nr_running": 4,
        "nr_stopped": 0,
        "nr_uninterruptible": 8,
        "nr_iowait": 3,
        "load_avg": 7.23,
        "dload_avg": 6.81,
        "known_issue": "",
        "stack": "task:java            state:D stack:    0 pid: 12345 tgid: 12345 ...\n  io_schedule+0x18/0x40\n  ext4_file_write_iter+0x..."
    }
}
Field Description
threshold D-state load EMA trigger threshold
nr_sleeping Sleeping processes in the container
nr_running Running processes in the container
nr_stopped Stopped processes in the container
nr_uninterruptible Uninterruptible (D-state) processes in the container
nr_iowait Processes waiting for I/O in the container
load_avg Container load average at trigger time
dload_avg Container D-state load EMA at trigger time
known_issue Matched known-issue description; empty if none matched
stack Kernel stacks of D-state processes as multiline text

Disk I/O

Tracer: iotracing.

Reads /proc/diskstats every 5 seconds. A trigger condition must hold for two consecutive intervals. Non-NVMe devices check utilization; NVMe devices require both utilization and either read or write throughput to exceed thresholds. Each device also checks mean read and write wait times independently. Results include process and file I/O rates and I/O scheduling wait stacks.

When running iotracing directly, --enable-pprof (disabled by default) serves profiles at http://127.0.0.1:6000/debug/pprof/; if the address is already in use, the command fails to start. These profiles describe only the iotracing process’s Go runtime, not huatuo-bamai or the application processes performing disk I/O. Automatic tracing does not enable this option.

Example with some common fields omitted:

{
    "tracer_name": "iotracing",
    "tracer_data": {
        "reason_snapshot": {
            "type": "ioutil",
            "device": "sda",
            "major_num": 8,
            "minor_num": 0,
            "iostatus": {
                "read_bps": 125829120,
                "read_iops": 450,
                "read_await": 12,
                "write_bps": 2202009600,
                "write_iops": 890,
                "write_await": 145,
                "io_util": 95,
                "queue_size": 32
            }
        },
        "process_file_io_stats": [
            {
                "pid": 12345,
                "comm": "java",
                "container_hostname": "app-pod-xxx",
                "total_fs_read_bps": 0,
                "total_fs_write_bps": 52428800,
                "total_disk_read_bps": 0,
                "total_disk_write_bps": 49152000,
                "total_files": [
                    {
                        "path": "/data/logs/app.log",
                        "dev_name": "sda",
                        "fs_write_bps": 52428800,
                        "disk_write_bps": 49152000
                    }
                ],
                "total_file_count": 1
            }
        ],
        "io_schedule_timeout_stacks": [
            {
                "pid": 12345,
                "tid": 12346,
                "cpu": 2,
                "comm": "java",
                "container_hostname": "app-pod-xxx",
                "schedule_latency_us": 250000,
                "stack": [
                    "io_schedule+0x18/0x40",
                    "ext4_file_write_iter+0x2a0/0x4c0"
                ]
            }
        ]
    }
}
Field Description
reason_snapshot Trigger reason, device, and disk metrics at that time; type is ioutil, read_bps, write_bps, read_await, or write_await
reason_snapshot.iostatus *_bps: bytes/s; *_iops: operations/s; *_await: milliseconds; io_util: percentage; queue_size: mean queue depth
process_file_io_stats File I/O in the collection window grouped by process, including PID, process name, and container hostname
total_fs_read_bps / total_fs_write_bps Filesystem read/write rates (bytes/s)
total_disk_read_bps / total_disk_write_bps Disk read/write rates (bytes/s)
total_files / total_file_count A subset of file details and the untruncated total file count for the window; *_bps in file details uses bytes/s, and *_us uses microseconds
io_schedule_timeout_stacks I/O scheduling wait events with PID, TID, CPU, process name, and container hostname
schedule_latency_us / stack I/O scheduling wait duration (microseconds) and kernel stack frames

Host Anonymous Memory

Tracer: memburst.

By default, samples host anonymous memory every 10 seconds and evaluates after filling a 60-sample sliding window. It triggers when current anonymous memory reaches twice the oldest window value and at least 70% of total host memory. The default cooldown is 30 minutes.

Results list the top N processes by descending RSS (default: 10) and attempt runtime snapshots serially for the first min(N, 3) processes. Go, HotSpot, and CPython use their respective providers. Unsupported runtimes report unavailable and retain process memory counters when available. A failed capture does not mean zero memory usage.

Each process has a two-second capture budget. Each snapshot retains at most 10 memory object entries and 512 KiB of JSON. Timeouts are cooperative and cannot interrupt synchronous system calls, so capture may take longer than two seconds.

The complete tracer_data is limited to 2 MiB, with at most 1,000 persisted ranking entries. When limits are exceeded, the lowest-ranked snapshots are removed first, then ranking tails if needed, and snapshot_reason is set. Cancellation and fallback records follow the same limits.

Example (some common fields omitted):

{
    "tracer_name": "memburst",
    "tracer_data": {
        "top_memory_usage": [
            {
                "PID": 3456,
                "ProcessName": "go-service",
                "MemSize": 268435456
            }
        ],
        "process_snapshots": [
            {
                "pid": 3456,
                "process_name": "go-service",
                "language": "go",
                "snapshot": {
                    "runtime_version": "go1.24.0",
                    "status": "complete",
                    "duration_ms": 25,
                    "entries": [
                        {
                            "kind": "inuse_space_objects",
                            "name": "main.allocate",
                            "bytes": 1048576,
                            "objects": 16,
                            "stack": [
                                "main.allocate fixture.go:42"
                            ]
                        }
                    ]
                },
                "process_memory": {
                    "status": "complete",
                    "rss_bytes": 268435456,
                    "rss_anon_bytes": 260046848
                }
            }
        ]
    }
}
Field Description
top_memory_usage Processes ranked by descending RSS
top_memory_usage.PID Process PID
top_memory_usage.ProcessName Process name
top_memory_usage.MemSize Process RSS (bytes)
process_snapshots Optional process snapshots in rank order; each contains pid, process_name, language, snapshot, and optional process_memory
snapshot_reason Optional explanation of cancellation, a full queue, or whole-event truncation; per-process failures use snapshot.status_reason

snapshot fields:

Field Description
runtime_version Optional target runtime version
status / status_reason Status and optional explanation; status is complete, partial, unavailable, or failed
duration_ms Capture duration (milliseconds)
output_truncated Optional flag indicating truncated snapshot output
entries Optional ranked memory object entries
entries.kind / entries.name Entry type and name; their meaning depends on the runtime
entries.bytes / entries.objects Entry memory size (bytes) and object count
entries.average_bytes / entries.stack Optional average object size (bytes) and call stack

process_memory contains language-independent process memory counters. Its status and optional status_reason describe availability. All counters below are optional; missing values mean unavailable, not zero:

Field Meaning (bytes)
virtual_bytes / rss_bytes Virtual memory / RSS
rss_anon_bytes / rss_file_bytes / rss_shmem_bytes Anonymous / file-backed / shared memory in RSS
swap_bytes / page_table_bytes Swap space / page table memory