1 - 采集框架

底层采集器提供三种数据采集模式:autotracingeventmetrics,分别针对不同的监控场景和需求,帮助用户全面掌握系统的运行状态。

采集模式对比

模式 类型 触发条件 数据输出 适用场景
Autotracing 异常事件驱动 系统异常时触发 ES + 本地存储,Prometheus(可选) 不能常态运行,异常时触发运行
Event 异常事件驱动 常态运行 ES + 本地存储,Prometheus(可选) 常态运行,直接抓取上下文信息
Metrics 指标数据采集 被动采集 Prometheus 格式 监控系统性能指标
  • Autotracing

    • 类型:异常事件驱动(tracing)。
    • 功能:自动跟踪系统异常状态,并在异常发生时再触发抓取现场上下文信息。
    • 特点
      • 当系统出现异常时,autotracing 会自动触发,捕获相关的上下文信息。
      • 数据会实时上报到 ES 并存储在本地,便于后续分析和排查问题,也可通过 Prometheus 格式进行监控,便于统计和告警。
      • 适用于获取现场时性能开销较大的场景,例如检测到指标上升到一定阈值、上升速度过快再触发抓取。
    • 已集成:cpu 异常使用跟踪(cpu idle)、D状态跟踪(dload)、容器内外部争抢(waitrate)、内存突发分配(memburst)、磁盘异常跟踪(iotracer)。
  • Event

    • 类型:异常事件驱动(tracing)。
    • 功能:常态运行在系统上下文中,达到预设阈值直接抓取上下文信息。
    • 特点
      • autotracing 不同,event 是常态运行,而不是在异常时再触发。
      • 数据同样会实时上报到 ES 并存储在本地,也可通过 Prometheus 格式进行监控。
      • 适合用于常态监控和实时分析,能够及时发现系统中的异常行为, event 类型的采集对系统性能影响可忽略。
    • 已集成:软中断异常(softirq)、内存异常分配(oom)、软锁定(softlockup)、D 状态进程(hungtask)、内存回收(memreclaim)、异常丢包(dropwatch)、网络入向延迟(net_rx_latency)。
  • Metrics

    • 类型:指标数据采集。
    • 功能:采集各子系统的性能指标数据。
    • 特点
      • 指标数据可以来自常规 procfs 采集,也可以从 tracing (autotracing,event) 类型获取数据。
      • 以 Prometheus 格式输出,便于集成到 Prometheus 监控系统中。
      • tracing 类数据不同,metrics 主要用于采集系统的性能指标,如 CPU 使用率、内存使用率、网络等。
      • 适合用于监控系统的性能指标,支持实时分析和长期趋势观察。
    • 已集成:cpu (sys, usr, util, load, nr_running…), memory(vmstat, memory_stat, directreclaim, asyncreclaim…), IO(d2c, q2c, freeze, flush…), 网络(arp, socket mem, qdisc, netstat, netdev, socketstat…)

Tracing 模式的多重用途

autotracingevent 都属于 tracing 类数据采集模式,它们具备以下双重用途:

  1. 实时保存到 ES 和 本地存储:用于异常事件的追踪和分析,帮助用户快速根因定位。
  2. 以 Prometheus 格式输出:作为指标数据集成到 Prometheus 监控系统中,提供更全面的系统监控能力。

通过这三种模式的灵活组合,用户可以全面监控系统的运行状态,既能捕获异常事件的上下文信息,也能持续采集性能指标数据,满足不同场景下的监控需求。

添加自己的采集

根据实际场景,你可以在 core/autotracingcore/events 目录下实现接口 ITracingEvent 即可完成 tracing 类型的采集。

// ITracingEvent represents a tracing/event
type ITracingEvent interface {
    Start(ctx context.Context) error
}

core/metrics 目录下添加接口 Collector 的实现即可完成 Metric 类型的采集。

type Collector interface {
    // Get new metrics and expose them via prometheus registry.
    Update() ([]*Data, error)
}

2 - 已集成功能

2.1 - 自动追踪(Autotracing)

HUATUO 已支持自动追踪指标如下:

追踪名称 核心功能 场景
cpusys 宿主 sys 突增检测 由于系统负载异常导致业务毛刺问题
cpuidle 容器 cpu idle 掉底检测,提供调用栈,火焰图,进程上下文信息等 容器 cpu 使用异常,帮助业务描绘进程热点
dload 跟踪容器loadavg状态进程状态,自动抓取容器 D 状态进程调用信息 系统 D 状态突增通常和资源不可用或者锁被长期持有相关,R 状态进程数量突增往往是业务代码设计不合理导致
waitrate 容器资源争抢检测,容器调度被争抢时提供正在争抢的容器信息 容器被争抢可能会引起业务毛刺,已存在争抢指标缺乏具体正在争抢的容器信息,通过 waitrate 追踪可以获取参与争抢的容器信息,给混部资源隔离提供参考
memburst 记录内存突发分配时上下文信息 宿主机短时间内大量分配内存,检测宿主机上短时间内大量分配内存事件。突发性内存分配可能引发直接回收或者 oom 等
iotracing 检测宿主磁盘 IO 延迟异常。输出访问的文件名和路径、磁盘设备、inode 号、容器等上下文信息 频繁出现磁盘 IO 带宽打满、磁盘访问突增,进而导致应用请求延迟或者系统性能抖动

CPUSYS

系统态 CPU 时间反映内核执行开销,包括系统调用、中断处理、内核线程调度、内存管理及锁竞争等操作。该指标异常升高,通常表明存在内核级性能瓶颈:高频系统调用、硬件设备异常、锁争用或内存回收压力(kswapd 直接回收)等。

cpusys 检测到该指标异常时,自动会触发抓取系统的调用栈并生成火焰图,帮助定位问题根因。 既考虑到系统 cpu sys 达到阈值,或者sys 突发毛刺带来的问题,其中触发条件如下:

  • CPU Sys 使用率 > 阈值 A
  • CPU Sys 使用率单位时间内增长 > 阈值 B

CPUIDLE

K8S 容器环境,CPU idle 时间(即 CPU 处于空闲状态的时间比例)的突然下降通常表明容器内进程正在过度消耗 CPU 资源,可能引发业务延迟、调度争抢甚至整体系统性能下降。

cpuidle 自动会触发抓取调用栈生成火焰图,触发条件:

  • CPU Sys 使用率 > 阈值 A
  • CPU User 使用率 > 阈值 B && CPU User 使用率单位时间增长 > 阈值 C
  • CPU Usage > 阈值 D && CPU Usage 单位时间增长 > 阈值 E

DLOAD

D 状态是一种特殊的进程状态,指进程因等待内核或硬件资源而进入的一种特殊阻塞状态。与普通睡眠(S 状态)不同,D 状态进程无法被强制终止(包括 SIGKILL),也不会响应中断信号。该状态通常发生在 I/O 操作(如直接读写磁盘)、硬件驱动故障时。系统 D 状态突增往往和资源不可用或者锁被长期持有导致,可运行进程突增往往是业务代码设计不合理导致。dload 借助 netlink 获取容器 running + uninterruptible 进程数量,通过滑动窗口算法计算出过去 1 分钟内容器 D 进程对负载做出的贡献值,当平滑计算后的 D 状态进程负载值超过阈值的时候,表示容器内的 D 状态进程数量出现异常,开始触发收集容器运行情况、D 状态进程信息。

MemBurst

memburst 用于检测宿主机上短时间内大量分配内存的情况,突发性内存分配可能引发直接回收甚至 OOM,所以一旦突发性内存分配就需要记录相关信息。

IOTracing

当 I/O 带宽被占满 或 磁盘访问量突增 时,系统可能因 I/O 资源竞争而出现 请求延迟升高、性能抖动,甚至影响整个系统的稳定性。

iotracing 在宿主磁盘负载高、IO 延迟异常时,输出异常时 IO 访问的文件名和路径、磁盘设备、inode 号,容器名等上下文信息。

2.2 - 异常事件(Event)

总览

HUATUO 目前支持的异常上下文捕获事件如下:

事件名称 核心功能 场景
softirq 宿主软中断延迟响应或长期关闭,输出长时间关闭软中断的内核调用栈,进程信息等 该类问题会严重影响网络收发,进而导致业务毛刺或者超时等其他问题
dropwatch TCP 数据包丢包检测,输出发生丢包时主机、网络上下文信息等 该类问题主要会引起业务毛刺和延迟
net_rx_latency 在网络收方向获取数据包从驱动、协议栈、到用户主动收过程的延迟事件 网络延迟问题中有一类是数据传输阶段收方向存在延迟,但不清楚是延迟位置,net_rx_latency 根据 skb 入网卡时间戳依次在驱动、协议栈和用户拷贝数据等路径计算延迟,通过预先设定的阈值过滤超时的数据包,定位延迟位置
oom 检测宿主或容器内 oom 事件 当宿主机层面或者容器维度发生 oom 事件时,能够获取触发 oom 的进程信息、被 kill 的进程信息以及容器信息,便于定位进程内存泄漏、异常退出等问题
softlockup 当系统上发生 softlockup 时,收集目标进程信息以及 cpu 信息,同时获取各个 cpu 上的内核栈信息 系统发生 softlockup
hungtask 提供系统内所有 D 状态进程数量、内核栈信息 用于定位瞬时出现 D 进程的场景,能及时保留现场便于后期问题跟踪
memreclaim 进程进入直接回收的耗时,超过时间阈值,记录进程信息 内存压力过大时,如果此时进程申请内存,有可能进入直接回收,此时处于同步回收阶段,可能会造成业务进程的卡顿,此时记录进程进入直接回收的时间,有助于我们判断此进程被直接回收影响的剧烈程度
netdev 检测网卡状态变化 网卡抖动、bond 环境下 slave 异常等
lacp 检测 lacp 状态变化 bond 模式 4 下,监控 lacp 协商状态

软中断关闭过长检测

功能介绍

Linux 内核存在进程上下文,中断上下文,软中断上下文,NMI 上下文等概念,这些上下文之间可能存在共享数据情况,因此为了确保数据的一致性,正确性,内核代码可能会关闭软中断或者硬中断。从理论角度,单次关闭中断或者软中断时间不能太长,但高频的系统调用,陷入内核态频繁执行关闭中断或软中断,同样会造"长时间关闭"的现象,拖慢了系统的响应。“关闭中断,软中断时间过长”这类问题非常隐蔽,且定位手段有限,同时影响又非常大,体现在业务应用上一般为接收数据超时。针对这种场景我们基于BPF技术构建了检测硬件中断,软件中断关闭过长的能力。

示例

如下为抓取到的关闭中断过长的实例,这些信息被自动上传到 ES.

{
  "_index": "***_2025-06-11",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-06-11T16:05:16.251152703+08:00",
    "hostname": "***",
    "tracer_data": {
      "comm": "observe-agent",
      "stack": "stack:\nscheduler_tick/ffffffffa471dbc0 [kernel]\nupdate_process_times/ffffffffa4789240 [kernel]\ntick_sched_handle.isra.8/ffffffffa479afa0 [kernel]\ntick_sched_timer/ffffffffa479b000 [kernel]\n__hrtimer_run_queues/ffffffffa4789b60 [kernel]\nhrtimer_interrupt/ffffffffa478a610 [kernel]\n__sysvec_apic_timer_interrupt/ffffffffa4661a60 [kernel]\nasm_call_sysvec_on_stack/ffffffffa5201130 [kernel]\nsysvec_apic_timer_interrupt/ffffffffa5090500 [kernel]\nasm_sysvec_apic_timer_interrupt/ffffffffa5200d30 [kernel]\ndump_stack/ffffffffa506335e [kernel]\ndump_header/ffffffffa5058eb0 [kernel]\noom_kill_process.cold.9/ffffffffa505921a [kernel]\nout_of_memory/ffffffffa48a1740 [kernel]\nmem_cgroup_out_of_memory/ffffffffa495ff70 [kernel]\ntry_charge/ffffffffa4964ff0 [kernel]\nmem_cgroup_charge/ffffffffa4968de0 [kernel]\n__add_to_page_cache_locked/ffffffffa4895c30 [kernel]\nadd_to_page_cache_lru/ffffffffa48961a0 [kernel]\npagecache_get_page/ffffffffa4897ad0 [kernel]\ngrab_cache_page_write_begin/ffffffffa4899d00 [kernel]\niomap_write_begin/ffffffffa49fddc0 [kernel]\niomap_write_actor/ffffffffa49fe980 [kernel]\niomap_apply/ffffffffa49fbd20 [kernel]\niomap_file_buffered_write/ffffffffa49fc040 [kernel]\nxfs_file_buffered_aio_write/ffffffffc0f3bed0 [xfs]\nnew_sync_write/ffffffffa497ffb0 [kernel]\nvfs_write/ffffffffa4982520 [kernel]\nksys_write/ffffffffa4982880 [kernel]\ndo_syscall_64/ffffffffa508d190 [kernel]\nentry_SYSCALL_64_after_hwframe/ffffffffa5200078 [kernel]",
      "now": 5532940660025295,
      "offtime": 237328905,
      "cpu": 1,
      "threshold": 100000000,
      "pid": 688073
    },
    "tracer_time": "2025-06-11 16:05:16.251 +0800",
    "tracer_type": "auto",
    "time": "2025-06-11 16:05:16.251 +0800",
    "region": "***",
    "tracer_name": "softirq",
    "es_index_time": 1749629116268
  },
  "fields": {
    "time": [
      "2025-06-11T08:05:16.251Z"
    ]
  },
  "_ignored": [
    "tracer_data.stack"
  ],
  "_version": 1,
  "sort": [
    1749629116251
  ]
}

本地物理机也会存储一份相同的数据:

2025-06-11 16:05:16 *** Region=***
{
  "hostname": "***",
  "region": "***",
  "uploaded_time": "2025-06-11T16:05:16.251152703+08:00",
  "time": "2025-06-11 16:05:16.251 +0800",
  "tracer_name": "softirq",
  "tracer_time": "2025-06-11 16:05:16.251 +0800",
  "tracer_type": "auto",
  "tracer_data": {
    "offtime": 237328905,
    "threshold": 100000000,
    "comm": "observe-agent",
    "pid": 688073,
    "cpu": 1,
    "now": 5532940660025295,
    "stack": "stack:\nscheduler_tick/ffffffffa471dbc0 [kernel]\nupdate_process_times/ffffffffa4789240 [kernel]\ntick_sched_handle.isra.8/ffffffffa479afa0 [kernel]\ntick_sched_timer/ffffffffa479b000 [kernel]\n__hrtimer_run_queues/ffffffffa4789b60 [kernel]\nhrtimer_interrupt/ffffffffa478a610 [kernel]\n__sysvec_apic_timer_interrupt/ffffffffa4661a60 [kernel]\nasm_call_sysvec_on_stack/ffffffffa5201130 [kernel]\nsysvec_apic_timer_interrupt/ffffffffa5090500 [kernel]\nasm_sysvec_apic_timer_interrupt/ffffffffa5200d30 [kernel]\ndump_stack/ffffffffa506335e [kernel]\ndump_header/ffffffffa5058eb0 [kernel]\noom_kill_process.cold.9/ffffffffa505921a [kernel]\nout_of_memory/ffffffffa48a1740 [kernel]\nmem_cgroup_out_of_memory/ffffffffa495ff70 [kernel]\ntry_charge/ffffffffa4964ff0 [kernel]\nmem_cgroup_charge/ffffffffa4968de0 [kernel]\n__add_to_page_cache_locked/ffffffffa4895c30 [kernel]\nadd_to_page_cache_lru/ffffffffa48961a0 [kernel]\npagecache_get_page/ffffffffa4897ad0 [kernel]\ngrab_cache_page_write_begin/ffffffffa4899d00 [kernel]\niomap_write_begin/ffffffffa49fddc0 [kernel]\niomap_write_actor/ffffffffa49fe980 [kernel]\niomap_apply/ffffffffa49fbd20 [kernel]\niomap_file_buffered_write/ffffffffa49fc040 [kernel]\nxfs_file_buffered_aio_write/ffffffffc0f3bed0 [xfs]\nnew_sync_write/ffffffffa497ffb0 [kernel]\nvfs_write/ffffffffa4982520 [kernel]\nksys_write/ffffffffa4982880 [kernel]\ndo_syscall_64/ffffffffa508d190 [kernel]\nentry_SYSCALL_64_after_hwframe/ffffffffa5200078 [kernel]"
  }
}

协议栈丢包检测

功能介绍

在数据包收发过程中由于各类原因,可能出现丢包的现象,丢包可能会导致业务请求延迟,甚至超时。dropwatch 借助 eBPF 观测内核网络数据包丢弃情况,输出丢包网络上下文,如:源目的地址,源目的端口,seq, seqack, pid, comm, stack 信息等。dorpwatch 主要用于检测 TCP 协议相关的丢包,通过预先埋点过滤数据包,确定丢包位置以便于排查丢包根因。

示例

通过 dropwatch 抓取到的相关信息会自动上传到 ES。如下为抓取到的一案例:kubelet 在发送 SYN 时,由于设备丢包,导致数据包发送失败。

{
  "_index": "***_2025-06-11",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-06-11T16:58:15.100223795+08:00",
    "hostname": "***",
    "tracer_data": {
      "comm": "kubelet",
      "stack": "kfree_skb/ffffffff9a0cd5c0 [kernel]\nkfree_skb/ffffffff9a0cd5c0 [kernel]\nkfree_skb_list/ffffffff9a0cd670 [kernel]\n__dev_queue_xmit/ffffffff9a0ea020 [kernel]\nip_finish_output2/ffffffff9a18a720 [kernel]\n__ip_queue_xmit/ffffffff9a18d280 [kernel]\n__tcp_transmit_skb/ffffffff9a1ad890 [kernel]\ntcp_connect/ffffffff9a1ae610 [kernel]\ntcp_v4_connect/ffffffff9a1b3450 [kernel]\n__inet_stream_connect/ffffffff9a1d25f0 [kernel]\ninet_stream_connect/ffffffff9a1d2860 [kernel]\n__sys_connect/ffffffff9a0c1170 [kernel]\n__x64_sys_connect/ffffffff9a0c1240 [kernel]\ndo_syscall_64/ffffffff9a2ea9f0 [kernel]\nentry_SYSCALL_64_after_hwframe/ffffffff9a400078 [kernel]",
      "saddr": "10.79.68.62",
      "pid": 1687046,
      "type": "common_drop",
      "queue_mapping": 11,
      "dport": 2052,
      "pkt_len": 74,
      "ack_seq": 0,
      "daddr": "10.179.142.26",
      "state": "SYN_SENT",
      "src_hostname": "***",
      "sport": 15402,
      "dest_hostname": "***",
      "seq": 1902752773,
      "max_ack_backlog": 0
    },
    "tracer_time": "2025-06-11 16:58:15.099 +0800",
    "tracer_type": "auto",
    "time": "2025-06-11 16:58:15.099 +0800",
    "region": "***",
    "tracer_name": "dropwatch",
    "es_index_time": 1749632295120
  },
  "fields": {
    "time": [
      "2025-06-11T08:58:15.099Z"
    ]
  },
  "_ignored": [
    "tracer_data.stack"
  ],
  "_version": 1,
  "sort": [
    1749632295099
  ]
}

本地物理机也会存储一份相同的数据:

2025-06-11 16:58:15 Host=*** Region=***
{
  "hostname": "***",
  "region": "***",
  "uploaded_time": "2025-06-11T16:58:15.100223795+08:00",
  "time": "2025-06-11 16:58:15.099 +0800",
  "tracer_name": "dropwatch",
  "tracer_time": "2025-06-11 16:58:15.099 +0800",
  "tracer_type": "auto",
  "tracer_data": {
    "type": "common_drop",
    "comm": "kubelet",
    "pid": 1687046,
    "saddr": "10.79.68.62",
    "daddr": "10.179.142.26",
    "sport": 15402,
    "dport": 2052,
    "src_hostname": ***",
    "dest_hostname": "***",
    "max_ack_backlog": 0,
    "seq": 1902752773,
    "ack_seq": 0,
    "queue_mapping": 11,
    "pkt_len": 74,
    "state": "SYN_SENT",
    "stack": "kfree_skb/ffffffff9a0cd5c0 [kernel]\nkfree_skb/ffffffff9a0cd5c0 [kernel]\nkfree_skb_list/ffffffff9a0cd670 [kernel]\n__dev_queue_xmit/ffffffff9a0ea020 [kernel]\nip_finish_output2/ffffffff9a18a720 [kernel]\n__ip_queue_xmit/ffffffff9a18d280 [kernel]\n__tcp_transmit_skb/ffffffff9a1ad890 [kernel]\ntcp_connect/ffffffff9a1ae610 [kernel]\ntcp_v4_connect/ffffffff9a1b3450 [kernel]\n__inet_stream_connect/ffffffff9a1d25f0 [kernel]\ninet_stream_connect/ffffffff9a1d2860 [kernel]\n__sys_connect/ffffffff9a0c1170 [kernel]\n__x64_sys_connect/ffffffff9a0c1240 [kernel]\ndo_syscall_64/ffffffff9a2ea9f0 [kernel]\nentry_SYSCALL_64_after_hwframe/ffffffff9a400078 [kernel]"
  }
}

协议栈收包延迟

功能介绍

线上业务网络延迟问题是比较难定位的,任何方向,任何的阶段都有可能出现问题。比如收方向的延迟,驱动、协议栈、用户程序等都有可能出现问题,因此我们开发了 net_rx_latency 检测功能,借助 skb 入网卡的时间戳,在驱动,协议栈层,用户态层检查延迟时间,当收包延迟达到阈值时,借助 eBPF 获取网络上下文信息(五元组、延迟位置、进程信息等)。收方向传输路径示意:网卡 -> 驱动 -> 协议栈 -> 用户主动收

示例

一个业务容器从内核收包延迟超过 90s,通过 net_rx_latency 追踪,ES 查询输出如下:

{
  "_index": "***_2025-06-11",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "tracer_data": {
      "dport": 49000,
      "pkt_len": 26064,
      "comm": "nginx",
      "ack_seq": 689410995,
      "saddr": "10.156.248.76",
      "pid": 2921092,
      "where": "TO_USER_COPY",
      "state": "ESTABLISHED",
      "daddr": "10.134.72.4",
      "sport": 9213,
      "seq": 1009085774,
      "latency_ms": 95973
    },
    "container_host_namespace": "***",
    "container_hostname": "***.docker",
    "es_index_time": 1749628496541,
    "uploaded_time": "2025-06-11T15:54:56.404864955+08:00",
    "hostname": "***",
    "container_type": "normal",
    "tracer_time": "2025-06-11 15:54:56.404 +0800",
    "time": "2025-06-11 15:54:56.404 +0800",
    "region": "***",
    "container_level": "1",
    "container_id": "***",
    "tracer_name": "net_rx_latency"
  },
  "fields": {
    "time": [
      "2025-06-11T07:54:56.404Z"
    ]
  },
  "_version": 1,
  "sort": [
    1749628496404
  ]
}

本地物理机也会存储一份相同的数据:

2025-06-11 15:54:46 Host=*** Region=*** ContainerHost=***.docker ContainerID=*** ContainerType=normal ContainerLevel=1
{
  "hostname": "***",
  "region": "***",
  "container_id": "***",
  "container_hostname": "***.docker",
  "container_host_namespace": "***",
  "container_type": "normal",
  "container_level": "1",
  "uploaded_time": "2025-06-11T15:54:46.129136232+08:00",
  "time": "2025-06-11 15:54:46.129 +0800",
  "tracer_time": "2025-06-11 15:54:46.129 +0800",
  "tracer_name": "net_rx_latency",
  "tracer_data": {
    "comm": "nginx",
    "pid": 2921092,
    "where": "TO_USER_COPY",
    "latency_ms": 95973,
    "state": "ESTABLISHED",
    "saddr": "10.156.248.76",
    "daddr": "10.134.72.4",
    "sport": 9213,
    "dport": 49000,
    "seq": 1009024958,
    "ack_seq": 689410995,
    "pkt_len": 20272
  }
}

物理机、容器内存超用

功能介绍

程序运行时申请的内存超过了系统或进程可用的内存上限,导致系统或应用程序崩溃。常见于内存泄漏、大数据处理或资源配置不足的场景。通过在 oom 的内核流程插入 BPF 钩子,获取 oom 上下文的详细信息并传递到用户态。这些信息包括进程信息、被 kill 的进程信息、容器信息。

示例

一个容器内发生 oom 时,被抓取的信息如下:

{
  "_index": "***_cases_2025-06-11",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-06-11T17:09:07.236482841+08:00",
    "hostname": "***",
    "tracer_data": {
      "victim_process_name": "java",
      "trigger_memcg_css": "0xff4b8d8be3818000",
      "victim_container_hostname": "***.docker",
      "victim_memcg_css": "0xff4b8d8be3818000",
      "trigger_process_name": "java",
      "victim_pid": 3218745,
      "trigger_pid": 3218804,
      "trigger_container_hostname": "***.docker",
      "victim_container_id": "***",
      "trigger_container_id": "***",
    "tracer_time": "2025-06-11 17:09:07.236 +0800",
    "tracer_type": "auto",
    "time": "2025-06-11 17:09:07.236 +0800",
    "region": "***",
    "tracer_name": "oom",
    "es_index_time": 1749632947258
  },
  "fields": {
    "time": [
      "2025-06-11T09:09:07.236Z"
    ]
  },
  "_version": 1,
  "sort": [
    1749632947236
  ]
}

另外 oom event 还实现了 Collector 接口,这样还会通过 Prometheus 统计宿主 oom 发生的次数,并区分宿主机和容器的事件。

内核 softlockup

功能介绍

softlockup 是 Linux 内核检测到的一种异常状态,指某个 CPU 核心上的内核线程(或进程)长时间占用 CPU 且不调度,导致系统无法正常响应其他任务。如内核代码 bug、cpu 过载、设备驱动问题等都会导致 softlockup。当系统发生 softlockup 时,收集目标进程的信息以及 cpu 信息,获取各个 cpu 上的内核栈信息同时保存问题的发生次数。

进程阻塞

功能介绍

D 状态进程(也称为不可中断睡眠状态,Uninterruptible)是一种特殊的进程状态,表示进程因等待某些系统资源而阻塞,且不能被信号或外部中断唤醒。常见场景如:磁盘 I/O 操作、内核阻塞、硬件故障等。hungtask 捕获系统内所有 D 状态进程的内核栈并保存 D 进程的数量。用于定位瞬间出现一些 D 进程的场景,可以在现场消失后仍然分析到问题根因。

示例

{
  "_index": "***_2025-06-10",
  "_type": "_doc",
  "_id": "8yyOV5cBGoYArUxjSdvr",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-06-10T09:57:12.202191192+08:00",
    "hostname": "***",
    "tracer_data": {
      "cpus_stack": "2025-06-10 09:57:14 sysrq: Show backtrace of all active CPUs\n2025-06-10 09:57:14 NMI backtrace for cpu 33\n2025-06-10 09:57:14 CPU: 33 PID: 768309 Comm: huatuo-bamai Kdump: loaded Tainted: G S      W  OEL    5.10.0-216.0.0.115.v1.0.x86_64 #1\n2025-06-10 09:57:14 Hardware name: Inspur SA5212M5/YZMB-00882-104, BIOS 4.1.12 11/27/2019\n2025-06-10 09:57:14 Call Trace:\n2025-06-10 09:57:14  dump_stack+0x57/0x6e\n2025-06-10 09:57:14  nmi_cpu_backtrace.cold.0+0x30/0x65\n2025-06-10 09:57:14  ? lapic_can_unplug_cpu+0x80/0x80\n2025-06-10 09:57:14  nmi_trigger_cpumask_backtrace+0xdf/0xf0\n2025-06-10 09:57:14  arch_trigger_cpumask_backtrace+0x15/0x20\n2025-06-10 09:57:14  sysrq_handle_showallcpus+0x14/0x90\n2025-06-10 09:57:14  __handle_sysrq.cold.8+0x77/0xe8\n2025-06-10 09:57:14  write_sysrq_trigger+0x3d/0x60\n2025-06-10 09:57:14  proc_reg_write+0x38/0x80\n2025-06-10 09:57:14  vfs_write+0xdb/0x250\n2025-06-10 09:57:14  ksys_write+0x59/0xd0\n2025-06-10 09:57:14  do_syscall_64+0x39/0x80\n2025-06-10 09:57:14  entry_SYSCALL_64_after_hwframe+0x62/0xc7\n2025-06-10 09:57:14 RIP: 0033:0x4088ae\n2025-06-10 09:57:14 Code: 48 83 ec 38 e8 13 00 00 00 48 83 c4 38 5d c3 cc cc cc cc cc cc cc cc cc cc cc cc cc 49 89 f2 48 89 fa 48 89 ce 48 89 df 0f 05 <48> 3d 01 f0 ff ff 76 15 48 f7 d8 48 89 c1 48 c7 c0 ff ff ff ff 48\n2025-06-10 09:57:14 RSP: 002b:000000c000adcc60 EFLAGS: 00000212 ORIG_RAX: 0000000000000001\n2025-06-10 09:57:14 RAX: ffffffffffffffda RBX: 0000000000000013 RCX: 00000000004088ae\n2025-06-10 09:57:14 RDX: 0000000000000001 RSI: 000000000274ab18 RDI: 0000000000000013\n2025-06-10 09:57:14 RBP: 000000c000adcca0 R08: 0000000000000000 R09: 0000000000000000\n2025-06-10 09:57:14 R10: 0000000000000000 R11: 0000000000000212 R12: 000000c000adcdc0\n2025-06-10 09:57:14 R13: 0000000000000002 R14: 000000c000caa540 R15: 0000000000000000\n2025-06-10 09:57:14 Sending NMI from CPU 33 to CPUs 0-32,34-95:\n2025-06-10 09:57:14 NMI backtrace for cpu 52 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 54 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 7 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 81 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 60 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 2 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 21 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 69 skipped: idling at intel_idle+0x6f/0xc0\n2025-06-10 09:57:14 NMI backtrace for cpu 58 skipped: idling at intel_idle+0x6f/
      ...
      "pid": 2567042
    },
    "tracer_time": "2025-06-10 09:57:12.202 +0800",
    "tracer_type": "auto",
    "time": "2025-06-10 09:57:12.202 +0800",
    "region": "***",
    "tracer_name": "hungtask",
    "es_index_time": 1749520632297
  },
  "fields": {
    "time": [
      "2025-06-10T01:57:12.202Z"
    ]
  },
  "_ignored": [
    "tracer_data.blocked_processes_stack",
    "tracer_data.cpus_stack"
  ],
  "_version": 1,
  "sort": [
    1749520632202
  ]
}

另外 hungtask event 还实现了 Collector 接口,这样还会通过 Prometheus 统计宿主 hungtask 发生的次数。

容器、物理机内存回收

功能介绍

内存压力过大时,如果此时进程申请内存,有可能进入直接回收,此时处于同步回收阶段,可能会造成业务进程的卡顿,在此记录进程进入直接回收的时间,有助于我们判断此进程被直接回收影响的剧烈程度。memreclaim event 计算同一个进程在 1s 周期,若进程处在直接回收状态超过 900ms, 则记录其上下文信息。

示例

业务容器的 chrome 进程进入直接回收状态,ES 查询输出如下:

{
  "_index": "***_cases_2025-06-11",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "tracer_data": {
      "comm": "chrome",
      "deltatime": 1412702917,
      "pid": 1896137
    },
    "container_host_namespace": "***",
    "container_hostname": "***.docker",
    "es_index_time": 1749641583290,
    "uploaded_time": "2025-06-11T19:33:03.26754495+08:00",
    "hostname": "***",
    "container_type": "normal",
    "tracer_time": "2025-06-11 19:33:03.267 +0800",
    "time": "2025-06-11 19:33:03.267 +0800",
    "region": "***",
    "container_level": "102",
    "container_id": "921d0ec0a20c",
    "tracer_name": "directreclaim"
  },
  "fields": {
    "time": [
      "2025-06-11T11:33:03.267Z"
    ]
  },
  "_version": 1,
  "sort": [
    1749641583267
  ]
}

网络设备状态

功能介绍

网卡状态变化通常容易造成严重的网络问题,直接影响整机网络质量,如 down/up, MTU 改变等。以 down 状态为例,可能是有权限的进程操作、底层线缆、光模块、对端交换机等问题导致,netdev event 用于检测网络设备的状态变化,目前已实现网卡 down, up 的监控,并区分管理员或底层原因导致的网卡状态变化。

示例

一次管理员操作导致 eth1 网卡 down 时,ES 查询到事件输出如下:

{
  "_index": "***_cases_2025-05-30",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-05-30T17:47:50.406913037+08:00",
    "hostname": "localhost.localdomain",
    "tracer_data": {
      "ifname": "eth1",
      "start": false,
      "index": 3,
      "linkstatus": "linkStatusAdminDown, linkStatusCarrierDown",
      "mac": "5c:6f:69:34:dc:72"
    },
    "tracer_time": "2025-05-30 17:47:50.406 +0800",
    "tracer_type": "auto",
    "time": "2025-05-30 17:47:50.406 +0800",
    "region": "***",
    "tracer_name": "netdev_event",
    "es_index_time": 1748598470407
  },
  "fields": {
    "time": [
      "2025-05-30T09:47:50.406Z"
    ]
  },
  "_version": 1,
  "sort": [
    1748598470406
  ]
}

LACP 协议状态

功能介绍

Bond 是 Linux 系统内核提供的一种将多个物理网络接口绑定为一个逻辑接口的技术。通过绑定,可以实现带宽叠加、故障切换或负载均衡。LACP 是 IEEE 802.3ad 标准定义的协议,用于动态管理链路聚合组(LAG)。目前没有优雅获取物理机LACP 协议协商异常事件的方法,HUATUO 实现了 lacp event,通过 BPF 在协议关键路径插桩检测到链路聚合状态发生变化时,触发事件记录相关信息。

示例

在宿主网卡 eth1 出现物理层 down/up 抖动时,lacp 动态协商状态异常,ES 查询输出如下:

{
  "_index": "***_cases_2025-05-30",
  "_type": "_doc",
  "_id": "***",
  "_score": 0,
  "_source": {
    "uploaded_time": "2025-05-30T17:47:48.513318579+08:00",
    "hostname": "***",
    "tracer_data": {
      "content": "/proc/net/bonding/bond0\nEthernet Channel Bonding Driver: v4.18.0 (Apr 7, 2025)\n\nBonding Mode: load balancing (round-robin)\nMII Status: down\nMII Polling Interval (ms): 0\nUp Delay (ms): 0\nDown Delay (ms): 0\nPeer Notification Delay (ms): 0\n/proc/net/bonding/bond4\nEthernet Channel Bonding Driver: v4.18.0 (Apr 7, 2025)\n\nBonding Mode: IEEE 802.3ad Dynamic link aggregation\nTransmit Hash Policy: layer3+4 (1)\nMII Status: up\nMII Polling Interval (ms): 100\nUp Delay (ms): 0\nDown Delay (ms): 0\nPeer Notification Delay (ms): 1000\n\n802.3ad info\nLACP rate: fast\nMin links: 0\nAggregator selection policy (ad_select): stable\nSystem priority: 65535\nSystem MAC address: 5c:6f:69:34:dc:72\nActive Aggregator Info:\n\tAggregator ID: 1\n\tNumber of ports: 2\n\tActor Key: 21\n\tPartner Key: 50013\n\tPartner Mac Address: 00:00:5e:00:01:01\n\nSlave Interface: eth0\nMII Status: up\nSpeed: 25000 Mbps\nDuplex: full\nLink Failure Count: 0\nPermanent HW addr: 5c:6f:69:34:dc:72\nSlave queue ID: 0\nSlave active: 1\nSlave sm_vars: 0x172\nAggregator ID: 1\nAggregator active: 1\nActor Churn State: none\nPartner Churn State: none\nActor Churned Count: 0\nPartner Churned Count: 0\ndetails actor lacp pdu:\n    system priority: 65535\n    system mac address: 5c:6f:69:34:dc:72\n    port key: 21\n    port priority: 255\n    port number: 1\n    port state: 63\ndetails partner lacp pdu:\n    system priority: 200\n    system mac address: 00:00:5e:00:01:01\n    oper key: 50013\n    port priority: 32768\n    port number: 16397\n    port state: 63\n\nSlave Interface: eth1\nMII Status: up\nSpeed: 25000 Mbps\nDuplex: full\nLink Failure Count: 17\nPermanent HW addr: 5c:6f:69:34:dc:73\nSlave queue ID: 0\nSlave active: 0\nSlave sm_vars: 0x172\nAggregator ID: 1\nAggregator active: 1\nActor Churn State: monitoring\nPartner Churn State: monitoring\nActor Churned Count: 2\nPartner Churned Count: 2\ndetails actor lacp pdu:\n    system priority: 65535\n    system mac address: 5c:6f:69:34:dc:72\n    port key: 21\n    port priority: 255\n    port number: 2\n    port state: 15\ndetails partner lacp pdu:\n    system priority: 200\n    system mac address: 00:00:5e:00:01:01\n    oper key: 50013\n    port priority: 32768\n    port number: 32781\n    port state: 31\n"
    },
    "tracer_time": "2025-05-30 17:47:48.513 +0800",
    "tracer_type": "auto",
    "time": "2025-05-30 17:47:48.513 +0800",
    "region": "***",
    "tracer_name": "lacp",
    "es_index_time": 1748598468514
  },
  "fields": {
    "time": [
      "2025-05-30T09:47:48.513Z"
    ]
  },
  "_ignored": [
    "tracer_data.content"
  ],
  "_version": 1,
  "sort": [
    1748598468513
  ]
}

2.3 - 指标(Metrics)

该文档汇总了当前 v1.0 版本支持的所有的指标,涉及CPU,内存,网络,IO。

子系统 指标 描述 单位 统计纬度 指标来源
cpu cpu_util_sys cpu 系统态利用率 % 宿主 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_util_usr cpu 用户态利用率 % 宿主 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_util_total 容器 cpu 总利用率 % 宿主 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_util_container_sys 容器 cpu 系统态利用率 % 容器 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_util_container_usr 容器 cpu 用户态利用率 % 容器 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_util_container_total 容器 cpu 总利用率 % 容器 基于 cgroup cpuacct.stat 和 cpuacct.usage 计算
cpu cpu_stat_container_burst_time 累计墙时(以纳秒为单位),周期内突发超出配额的时间 纳秒(ns) 容器 基于 cpu.stat 读取
cpu cpu_stat_container_nr_bursts 周期内突发次数 计数 容器 基于 cpu.stat 读取
cpu cpu_stat_container_nr_throttled cgroup 被 throttled/limited 的次数 计数 容器 基于 cpu.stat 读取
cpu cpu_stat_container_exter_wait_rate 容器外进程导致的等待率 % 容器 基于 cpu.stat 读取的 throttled_time hierarchy_wait_sum inner_wait_sum 计算
cpu cpu_stat_container_inner_wait_rate 容器内部进程导致的等待率 % 容器 基于 cpu.stat 读取的 throttled_time hierarchy_wait_sum inner_wait_sum 计算
cpu cpu_stat_container_throttle_wait_rate 容器被限制而引起的等待率 % 容器 基于 cpu.stat 读取的 throttled_time hierarchy_wait_sum inner_wait_sum 计算
cpu cpu_stat_container_wait_rate 总的等待率: exter_wait_rate + inner_wait_rate + throttle_wait_rate % 容器 基于 cpu.stat 读取的 throttled_time hierarchy_wait_sum inner_wait_sum 计算
cpu loadavg_container_container_nr_running 容器中运行的任务数量 计数 容器 从内核通过 netlink 获取
cpu loadavg_container_container_nr_uninterruptible 容器中不可中断任务的数量 计数 容器 从内核通过 netlink 获取
cpu loadavg_load1 系统过去 1 分钟的平均负载 计数 宿主 procfs
cpu loadavg_load5 系统过去 5 分钟的平均负载 计数 宿主 procfs
cpu loadavg_load15 系统过去 15 分钟的平均负载 计数 宿主 procfs
cpu softirq_latency 在不同时间域发生的 NET_RX/NET_TX 中断延迟次数:
0~10 us
100us ~ 1ms
10us ~ 100us
1ms ~ inf
计数 宿主 BPF 软中断埋点统计
cpu runqlat_container_nlat_01 容器中进程调度延迟在 0~10 毫秒内的次数 计数 容器 bpf 调度切换埋点统计
cpu runqlat_container_nlat_02 容器中进程调度延迟在 10~20 毫秒之间的次数 计数 容器 bpf 调度切换埋点统计
cpu runqlat_container_nlat_03 容器中进程调度延迟在 20~50 毫秒之间的次数 计数 容器 bpf 调度切换埋点统计
cpu runqlat_container_nlat_04 容器中进程调度延迟超过 50 毫秒的次数 计数 容器 bpf 调度切换埋点统计
cpu runqlat_g_nlat_01 宿主中进程调度延迟在范围内 0~10 毫秒的次数 计数 宿主 bpf 调度切换埋点统计
cpu runqlat_g_nlat_02 宿主中进程调度延迟在范围内 10~20 毫秒的次数 计数 宿主 bpf 调度切换埋点统计
cpu runqlat_g_nlat_03 宿主中进程调度延迟在范围内 20~50 毫秒的次数 计数 宿主 bpf 调度切换埋点统计
cpu runqlat_g_nlat_04 宿主中进程调度延迟超过 50 毫秒的次数 计数 宿主 bpf 调度切换埋点统计
cpu reschedipi_oversell_probability vm 中 cpu 超卖检测 0-1 宿主 bpf 调度 ipi 埋点统计
memory buddyinfo_blocks 内核伙伴系统内存分配 页计数 宿主 procfs
memory memory_events_container_watermark_inc 内存水位计数 计数 容器 memory.events
memory memory_events_container_watermark_dec 内存水位计数 计数 容器 memory.events
memory memory_others_container_local_direct_reclaim_time cgroup 中页分配速度 纳秒(ns) 容器 memory.local_direct_reclaim_time
memory memory_others_container_directstall_time 直接回收时间 纳秒(ns) 容器 memory.directstall_stat
memory memory_others_container_asyncreclaim_time 异步回收时间 纳秒(ns) 容器 memory.asynreclaim_stat
memory memory_stat_container_writeback 匿名/文件 cache sync 到磁盘排队字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_unevictable 无法回收的内存(如 mlocked) 字节(Bytes) 容器 memory.stat
memory memory_stat_container_shmem 共享内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgsteal_kswapd kswapd 和 cswapd 回收的内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgsteal_globalkswapd 由 kswapd 回收的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgsteal_globaldirect 过页面分配直接回收的内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgsteal_direct 页分配和 try_charge 期间直接回收的内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgsteal_cswapd 由 cswapd 回收的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgscan_kswapd kswapd 和 cswapd 扫描的内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgscan_globalkswapd kswapd 扫描的内存字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgscan_globaldirect 扫描内存中通过直接回收在页面分配期间的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgscan_direct 扫描内存的字节数,在页面分配和 try_charge 期间通过直接回收的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgscan_cswapd 由 cswapd 扫描内存的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgrefill 内存中扫描的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_pgdeactivate 内存中未激活的部分被添加到非活动列表中 字节(Bytes) 容器 memory.stat
memory memory_stat_container_inactive_file 文件内存中不活跃的 LRU 列表的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_inactive_anon 匿名和交换缓存内存中不活跃的 LRU 列表的字节数 字节(Bytes) 容器 memory.stat
memory memory_stat_container_dirty 等待写入磁盘的字节 字节(Bytes) 容器 memory.stat
memory memory_stat_container_active_file 活跃内存中文件内存的大小 字节(Bytes) 容器 memory.stat
memory memory_stat_container_active_anon 活跃内存中匿名和交换内存的大小 字节(Bytes) 容器 memory.stat
memory mountpoint_perm_ro 挂在点是否为只读 布尔(bool) 宿主 procfs
memory vmstat_allocstall_normal 宿主在 normal 域直接回收 计数 宿主 /proc/vmstat
memory vmstat_allocstall_movable 宿主在 movable 域直接回收 计数 宿主 /proc/vmstat
memory vmstat_compact_stall 内存压缩计数 计数 宿主 /proc/vmstat
memory vmstat_nr_active_anon 活跃的匿名页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_active_file 活跃的文件页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_boost_pages kswapd boosting 页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_dirty 脏页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_free_pages 释放的页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_inactive_anon 非活跃的匿名页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_inactive_file 非活跃的文件页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_kswapd_boost kswapd boosting 次数计数 页计数 宿主 /proc/vmstat
memory vmstat_nr_mlock 锁定的页面数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_shmem 共享内存页面数 页计数 宿主 /proc/vmstat
memory vmstat_nr_slab_reclaimable 可回收的 slab 页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_slab_unreclaimable 无法回收的 slab 页数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_unevictable 不可驱逐页面数量 页计数 宿主 /proc/vmstat
memory vmstat_nr_writeback 写入页面数 页计数 宿主 /proc/vmstat
memory vmstat_numa_pages_migrated NUMA 迁移中的页面数 页计数 宿主 /proc/vmstat
memory vmstat_pgdeactivate 页数被停用进入非活动 LRU 页计数 宿主 /proc/vmstat
memory vmstat_pgrefill 扫描的活跃 LRU 页面数 页计数 宿主 /proc/vmstat
memory vmstat_pgscan_direct 扫描的页数 页计数 宿主 /proc/vmstat
memory vmstat_pgscan_kswapd 扫描的页面数量,由 kswapd 回收的数量 页计数 宿主 /proc/vmstat
memory vmstat_pgsteal_direct 直接回收的页面 页计数 宿主 /proc/vmstat
memory vmstat_pgsteal_kswapd 被 kswapd 回收的数量 页计数 宿主 /proc/vmstat
memory hungtask_counter hungtask 事件计数 计数 宿主 BPF 埋点统计
memory oom_host_counter oom 事件计数 计数 宿主 BPF 埋点统计
memory oom_container_counter oom 事件计数 计数 容器 BPF 埋点统计
memory softlockup_counter softlockup 事件计数 计数 宿主 BPF 埋点统计
memory memory_free_compaction 内存压缩的速度 纳秒(ns) 宿主 bpf 埋点统计
memory memory_free_allocstall 内存中主机直接回收速度 纳秒(ns) 宿主 bpf 埋点统计
memory memory_cgroup_container_directstall cgroup 尝试直接回收的计数 计数 容器 bpf 埋点统计
IO iolatency_disk_d2c 磁盘访问时的 io 延迟统计,包括驱动程序和硬件组件消耗的时间 计数 宿主 bpf 埋点统计
IO iolatency_disk_q2c 磁盘访问整个 I/O 生命周期时的 I/O 延迟统计 计数 宿主 bpf 埋点统计
IO iolatency_container_d2c 磁盘访问时的 I/O 延迟统计,包括驱动程序和硬件组件消耗的时间 计数 容器 bpf 埋点统计
IO iolatency_container_q2c 磁盘访问整个 I/O 生命周期时的 I/O 延迟统计 计数 容器 bpf 埋点统计
IO iolatency_disk_flush 磁盘 RAID 设备刷新操作延迟统计 计数 宿主 bpf 埋点统计
IO iolatency_container_flush 磁盘 RAID 设备上由容器引起的刷新操作延迟统计 计数 容器 bpf 埋点统计
IO iolatency_disk_freeze 磁盘 freese 事件 计数 宿主 bpf 埋点统计
network tcp_mem_limit_pages 系统 TCP 总内存大小限制 页计数 系统 procfs
network tcp_mem_usage_bytes 系统使用的 TCP 内存总字节数 字节(Bytes) 系统 tcp_mem_usage_pages * page_size
network tcp_mem_usage_pages 系统使用的 TCP 内存总量 页计数 系统 procfs
network tcp_mem_usage_percent 系统使用的 TCP 内存百分比(相对 TCP 内存总限制) % 系统 tcp_mem_usage_pages / tcp_mem_limit_pages
network arp_entries arp 缓存条目数量 计数 宿主,容器 procfs
network arp_total 总 arp 缓存条目数 计数 系统 procfs
network qdisc_backlog 待发送的字节数 字节(Bytes) 宿主 netlink qdisc 统计
network qdisc_bytes_total 已发送的字节数 字节(Bytes) 宿主 netlink qdisc 统计
network qdisc_current_queue_length 排队等待发送的包数量 计数 宿主 netlink qdisc 统计
network qdisc_drops_total 丢弃的数据包数量 计数 宿主 netlink qdisc 统计
network qdisc_overlimits_total 排队数据包里超限的数量 计数 宿主 netlink qdisc 统计
network qdisc_packets_total 已发送的包数量 计数 宿主 netlink qdisc 统计
network qdisc_requeues_total 重新入队的数量 计数 宿主 netlink qdisc 统计
network ethtool_hardware_rx_dropped_errors 接口接收丢包统计 计数 宿主 硬件驱动相关, 如 mlx, ixgbe, bnxt_en, etc.
network netdev_receive_bytes_total 接口接收的字节数 字节(Bytes) 宿主,容器 procfs
network netdev_receive_compressed_total 接口接收的压缩包数量 计数 宿主,容器 procfs
network netdev_receive_dropped_total 接口接收丢弃的包数量 计数 宿主,容器 procfs
network netdev_receive_errors_total 接口接收检测到错误的包数量 计数 宿主,容器 procfs
network netdev_receive_fifo_total 接口接收 fifo 缓冲区错误数量 计数 宿主,容器 procfs
network netdev_receive_frame_total 接口接收帧对齐错误 计数 宿主,容器 procfs
network netdev_receive_multicast_total 多播数据包已接收的包数量,对于硬件接口,此统计通常在设备层计算(与 rx_packets 不同),因此可能包括未到达的数据包 计数 宿主,容器 procfs
network netdev_receive_packets_total 接口接收到的有效数据包数量 计数 宿主,容器 procfs
network netdev_transmit_bytes_total 接口发送的字节数 字节(Bytes) 宿主,容器 procfs
network netdev_transmit_carrier_total 接口发送过程中由于载波丢失导致的帧传输错误数量 计数 宿主,容器 procfs
network netdev_transmit_colls_total 接口发送碰撞计数 计数 宿主,容器 procfs
network netdev_transmit_compressed_total 接口发送压缩数据包数量 计数 宿主,容器 procfs
network netdev_transmit_dropped_total 数据包在传输过程中丢失的数量,如资源不足 计数 宿主,容器 procfs
network netdev_transmit_errors_total 发送错误计数 计数 宿主,容器 procfs
network netdev_transmit_fifo_total 帧传输错误数量 计数 宿主,容器 procfs
network netdev_transmit_packets_total 发送数据包计数 计数 宿主,容器 procfs
network netstat_TcpExt_ArpFilter 因 ARP 过滤规则而被拒绝的 ARP 请求/响应包数量 计数 宿主,容器 procfs
network netstat_TcpExt_BusyPollRxPackets 通过 busy polling​​ 机制接收到的网络数据包数量 计数 宿主,容器 procfs
network netstat_TcpExt_DelayedACKLocked 由于用户态锁住了sock,而无法发送delayed ack的次数 计数 宿主,容器 procfs
network netstat_TcpExt_DelayedACKLost 当收到已确认的包时,它将被更新。延迟 ACK 丢失可能会引起这个问题,但其他原因也可能触发,例如网络中重复的包。 计数 宿主,容器 procfs
network netstat_TcpExt_DelayedACKs 延迟的 ACK 定时器已过期。TCP 堆栈将发送一个纯 ACK 数据包并退出延迟 ACK 模式 计数 宿主,容器 procfs
network netstat_TcpExt_EmbryonicRsts 收到初始 SYN_RECV 套接字的重置 计数 宿主,容器 procfs
network netstat_TcpExt_IPReversePathFilter - 计数 宿主,容器 procfs
network netstat_TcpExt_ListenDrops 当内核收到客户端的 SYN 请求时,如果 TCP 接受队列已满,内核将丢弃 SYN 并将 TcpExtListenOverflows 加 1。同时,内核也会将 TcpExtListenDrops 加 1。当一个 TCP 套接字处于监听状态,且内核需要丢弃一个数据包时,内核会始终将 TcpExtListenDrops 加 1。因此,增加 TcpExtListenOverflows 会导致 TcpExtListenDrops 同时增加,但 TcpExtListenDrops 也会在没有 TcpExtListenOverflows 增加的情况下增加,例如内存分配失败也会导致 TcpExtListenDrops 增加。 计数 宿主,容器 procfs
network netstat_TcpExt_ListenOverflows 当内核收到客户端的 SYN 请求时,如果 TCP 接受队列已满,内核将丢弃 SYN 并将 TcpExtListenOverflows 加 1。同时,内核也会将 TcpExtListenDrops 加 1。当一个 TCP 套接字处于监听状态,且内核需要丢弃一个数据包时,内核会始终将 TcpExtListenDrops 加 1。因此,增加 TcpExtListenOverflows 会导致 TcpExtListenDrops 同时增加,但 TcpExtListenDrops 也会在没有 TcpExtListenOverflows 增加的情况下增加,例如内存分配失败也会导致 TcpExtListenDrops 增加。 计数 宿主,容器 procfs
network netstat_TcpExt_LockDroppedIcmps 由于套接字被锁定,ICMP 数据包被丢弃 计数 宿主,容器 procfs
network netstat_TcpExt_OfoPruned 协议栈尝试在乱序队列中丢弃数据包 计数 宿主,容器 procfs
network netstat_TcpExt_OutOfWindowIcmps ICMP 数据包因超出窗口而被丢弃 计数 宿主,容器 procfs
network netstat_TcpExt_PAWSActive 数据包在 Syn-Sent 状态被 PAWS 丢弃 计数 宿主,容器 procfs
network netstat_TcpExt_PAWSEstab 数据包在除 Syn-Sent 之外的所有状态下都会被 PAWS 丢弃 计数 宿主,容器 procfs
network netstat_TcpExt_PFMemallocDrop - 计数 宿主,容器 procfs
network netstat_TcpExt_PruneCalled 协议栈尝试回收套接字内存。更新此计数器后,将尝试合并乱序队列和接收队列。如果内存仍然不足,将尝试丢弃乱序队列中的数据包(并更新 TcpExtOfoPruned 计数器)。 计数 宿主,容器 procfs
network netstat_TcpExt_RcvPruned 在从顺序错误的队列中‘collapse’和丢弃数据包后,如果实际使用的内存仍然大于最大允许内存,则此计数器将被更新。这意味着‘prune’失败 计数 宿主,容器 procfs
network netstat_TcpExt_SyncookiesFailed MSS 从 SYN cookie 解码出来的无效。当这个计数器更新时,接收到的数据包不会被当作 SYN cookie 处理,并且 TcpExtSyncookiesRecv 计数器不会更新 计数 宿主,容器 procfs
network netstat_TcpExt_SyncookiesRecv 接收了多少个 SYN cookies 的回复数据包 计数 宿主,容器 procfs
network netstat_TcpExt_SyncookiesSent 发送了多少个 SYN cookies 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedChallenge ACK 为 challenge ACK 时,将跳过 ACK 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedFinWait2 ACK 在 Fin-Wait-2 状态被跳过,原因可能是 PAWS 检查失败或接收到的序列号超出窗口 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedPAWS 由于 PAWS(保护包装序列号)检查失败,ACK 被跳过 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedSeq 序列号超出窗口范围,时间戳通过 PAWS 检查,TCP 状态不是 Syn-Recv、Fin-Wait-2 和 Time-Wait 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedSynRecv ACK 在 Syn-Recv 状态中被跳过。Syn-Recv 状态表示协议栈收到一个 SYN 并回复 SYN+ACK 计数 宿主,容器 procfs
network netstat_TcpExt_TCPACKSkippedTimeWait CK 在 Time-Wait 状态中被跳过,原因可能是 PAWS 检查失败或接收到的序列号超出窗口 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortFailed 内核 TCP 层将在满足 RFC2525 2.17 节时发送 RST。如果在处理过程中发生内部错误,TcpExtTCPAbortFailed 将增加 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortOnClose 用户模式程序缓冲区中有数据时关闭的套接字数量 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortOnData TCP 层有正在传输的数据,但需要关闭连接 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortOnLinger 当 TCP 连接进入 FIN_WAIT_2 状态时,内核不会等待来自另一侧的 fin 包,而是发送 RST 并立即删除套接字 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortOnMemory 当一个应用程序关闭 TCP 连接时,内核仍然需要跟踪该连接,让它完成 TCP 断开过程 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAbortOnTimeout 此计数器将在任何 TCP 计时器到期时增加。在这种情况下,内核不会发送 RST,而是放弃连接 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAckCompressed - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPAutoCorking 发送数据包时,TCP 层会尝试将小数据包合并成更大的一个 计数 宿主,容器 procfs
network netstat_TcpExt_TCPBacklogDrop - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPChallengeACK challenge ack 发送的数量 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKIgnoredNoUndo 当 DSACK 块无效时,这两个计数器中的一个将被更新。哪个计数器将被更新取决于 TCP 套接字的 undo_marker 标志 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKIgnoredOld 当 DSACK 块无效时,这两个计数器中的一个将被更新。哪个计数器将被更新取决于 TCP 套接字的 undo_marker 标志 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKOfoRecv 收到一个 DSACK,表示收到一个顺序错误的重复数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKOfoSent 收到一个乱序的重复数据包,因此向发送者发送 DSACK 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKOldSent 收到一个已确认的重复数据包,因此向发送者发送 DSACK 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKRecv 收到一个 DSACK,表示收到了一个已确认的重复数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDSACKUndo - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDeferAcceptDrop - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDelivered - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPDeliveredCE - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenActive 当 TCP 栈在 SYN-SENT 状态接收到一个 ACK 包,并且 ACK 包确认了 SYN 包中的数据,理解 TFO cookie 已被对方接受,然后它更新这个计数器 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenActiveFail Fast Open 失败 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenBlackhole - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenCookieReqd 客户端想要请求 TFO cookie 的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenListenOverflow 挂起的 Fast Open 请求数量大于 fastopenq->max_qlen 时,协议栈将拒绝 Fast Open 请求并更新此计数器 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenPassive 指示 TCP 堆栈接受 Fast Open 请求的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastOpenPassiveFail 协议栈拒绝 Fast Open 的次数,这是由于 TFO cookie 无效或 在创建套接字过程中发现错误所引起的 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFastRetrans 快速重传 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFromZeroWindowAdv TCP 接收窗口设置为非零值 计数 宿主,容器 procfs
network netstat_TcpExt_TCPFullUndo - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHPAcks 如果数据包设置了 ACK 标志且没有数据,则是一个纯 ACK 数据包,如果内核在快速路径中处理它,TcpExtTCPHPAcks 将增加 1 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHPHits 如果 TCP 数据包包含数据(这意味着它不是一个纯 ACK 数据包),并且此数据包在快速路径中处理,TcpExtTCPHPHits 将增加 1 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHystartDelayCwnd CWND 检测到的包延迟总和。将此值除以 TcpExtTCPHystartDelayDetect,即为通过包延迟检测到的平均 CWND 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHystartDelayDetect 检测到数据包延迟阈值次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHystartTrainCwnd TCP Hystart 训练中使用的拥塞窗口大小,将此值除以 TcpExtTCPHystartTrainDetect 得到由 ACK 训练长度检测到的平均 CWND 计数 宿主,容器 procfs
network netstat_TcpExt_TCPHystartTrainDetect TCP Hystart 训练检测的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPKeepAlive 此计数器指示已发送的保活数据包。默认情况下不会启用保活功能。用户空间程序可以通过设置 SO_KEEPALIVE 套接字选项来启用它。 计数 宿主,容器 procfs
network netstat_TcpExt_TCPLossFailures 丢失数据包而进行恢复失败的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPLossProbeRecovery 检测到丢失的数据包恢复的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPLossProbes TCP 检测到丢失的数据包数量,通常用于检测网络拥塞或丢包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPLossUndo TCP重传数据包成功到达目标端口,但之前已经由于超时或拥塞丢失,因此被视为“撤销”丢失的数据包数量 计数 宿主,容器 procfs
network netstat_TcpExt_TCPLostRetransmit 丢包重传个数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMD5Failure 校验错误 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMD5NotFound 校验错误 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMD5Unexpected 校验错误 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMTUPFail 使用 DSACK 无需慢启动即可恢复拥塞窗口 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMTUPSuccess - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMemoryPressures 到达 tcp 内存压力位 low 的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMemoryPressuresChrono - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPMinTTLDrop - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPOFODrop TCP 层接收到一个乱序的数据包,但内存不足,因此丢弃它。此类数据包不会计入 TcpExtTCPOFOQueue 计数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPOFOMerge 接收到的顺序错误的包与上一个包有重叠。重叠部分将被丢弃。所有 TcpExtTCPOFOMerge 包也将计入 TcpExtTCPOFOQueue 计数 宿主,容器 procfs
network netstat_TcpExt_TCPOFOQueue TCP 层接收到一个乱序的数据包,并且有足够的内存来排队它 计数 宿主,容器 procfs
network netstat_TcpExt_TCPOrigDataSent 发送原始数据(不包括重传但包括 SYN 中的数据)的包数量。此计数器与 TcpOutSegs 不同,因为 TcpOutSegs 还跟踪纯 ACK。TCPOrigDataSent 更有助于跟踪 TCP 重传率 计数 宿主,容器 procfs
network netstat_TcpExt_TCPPartialUndo 检测到一些错误的重传,在我们快速重传的同时,收到了部分确认,因此能够部分撤销我们的一些 CWND 减少 计数 宿主,容器 procfs
network netstat_TcpExt_TCPPureAcks 如果数据包设置了 ACK 标志且没有数据,则是一个纯 ACK 数据包,如果内核在快速路径中处理它,TcpExtTCPHPAcks 将增加 1,如果内核在慢速路径中处理它,TcpExtTCPPureAcks 将增加 1 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRcvCoalesce 当数据包被 TCP 层接收但未被应用程序读取时,TCP 层会尝试合并它们。这个计数器表示在这种情况下合并了多少个数据包。如果启用了 GRO,GRO 会合并大量数据包,这些数据包不会被计算到 TcpExtTCPRcvCoalesce 中 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRcvCollapsed 在“崩溃”过程中释放了多少个 skbs 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRenoFailures TCP_CA_Disorder 阶段进入并经历 RTO 的重传失败次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRenoRecovery 当拥塞控制进入恢复状态时,如果使用 sack,TcpExtTCPSackRecovery 增加 1,如果不使用 sack,TcpExtTCPRenoRecovery 增加 1。这两个计数器意味着协议栈开始重传丢失的数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRenoRecoveryFail 进入恢复阶段并 RTO 的连接数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRenoReorder 重排序数据包被快速恢复检测到。只有在 SACK 被禁用时才会使用 计数 宿主,容器 procfs
network netstat_TcpExt_TCPReqQFullDoCookies - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPReqQFullDrop - 计数 宿主,容器 procfs
network netstat_TcpExt_TCPRetransFail 尝试将重传数据包发送到下层,但下层返回错误 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSACKDiscard 有多少个 SACK 块无效。如果无效的 SACK 块是由 ACK 记录引起的,tcp 栈只会忽略它,而不会更新此计数器 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSACKReneging 一个数据包被 SACK 确认,但接收方已丢弃此数据包,因此发送方需要重传此数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSACKReorder SACK 检测到的重排序数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSYNChallenge 响应 SYN 数据包发送的 Challenge ack 数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackFailures TCP_CA_Disorder 阶段进入并经历 RTO 的重传失败次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackMerged skb 已合并计数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackRecovery 当拥塞控制进入恢复状态时,如果使用 sack,TcpExtTCPSackRecovery 增加 1,如果不使用 sack,TcpExtTCPRenoRecovery 增加 1。这两个计数器意味着 TCP 栈开始重传丢失的数据包 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackRecoveryFail SACK 恢复失败的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackShiftFallback skb 应该被移动或合并,但由于某些原因,TCP 堆栈没有这样做 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSackShifted skb 被移位 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSlowStartRetrans 重新传输一个数据包,拥塞控制状态为“丢失” 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSpuriousRTOs 虚假重传超时 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSpuriousRtxHostQueues 当 TCP 栈想要重传一个数据包,发现该数据包并未在网络中丢失,但数据包尚未发送,TCP 栈将放弃重传并更新此计数器。这可能会发生在数据包在 qdisc 或驱动程序队列中停留时间过长的情况下 计数 宿主,容器 procfs
network netstat_TcpExt_TCPSynRetrans SYN 和 SYN/ACK 重传次数,将重传分解为 SYN、快速重传、超时重传等 计数 宿主,容器 procfs
network netstat_TcpExt_TCPTSReorder tcp 栈在接收到时间截包而进行乱序包阀值调整的次数 计数 宿主,容器 procfs
network netstat_TcpExt_TCPTimeWaitOverflow TIME_WAIT 状态的套接字因超出限制而无法分配的数量 计数 宿主,容器 procfs
network netstat_TcpExt_TCPTimeouts TCP 超时事件 计数 宿主,容器 procfs
network netstat_TcpExt_TCPToZeroWindowAdv TCP 接收窗口从非零值设置为零 计数 宿主,容器 procfs
network netstat_TcpExt_TCPWantZeroWindowAdv 根据当前内存使用情况,TCP 栈尝试将接收窗口设置为零。但接收窗口可能仍然是一个非零值 计数 宿主,容器 procfs
network netstat_TcpExt_TCPWinProbe 定期发送的 ACK 数据包数量,以确保打开窗口的反向 ACK 数据包没有丢失 计数 宿主,容器 procfs
network netstat_TcpExt_TCPWqueueTooBig - 计数 宿主,容器 procfs
network netstat_TcpExt_TW TCP 套接字在快速计时器中完成 time wait 状态 计数 宿主,容器 procfs
network netstat_TcpExt_TWKilled TCP 套接字在慢速计时器中完成 time wait 状态 计数 宿主,容器 procfs
network netstat_TcpExt_TWRecycled 等待套接字通过时间戳回收 计数 宿主,容器 procfs
network netstat_Tcp_ActiveOpens TCP 层发送一个 SYN,进入 SYN-SENT 状态。每当 TcpActiveOpens 增加 1 时,TcpOutSegs 应该始终增加 1 计数 宿主,容器 procfs
network netstat_Tcp_AttemptFails TCP 连接从 SYN-SENT 状态或 SYN-RCVD 状态直接过渡到 CLOSED 状态次数,加上 TCP 连接从 SYN-RCVD 状态直接过渡到 LISTEN 状态次数 计数 宿主,容器 procfs
network netstat_Tcp_CurrEstab TCP 连接数,当前状态为 ESTABLISHED 或 CLOSE-WAIT 计数 宿主,容器 procfs
network netstat_Tcp_EstabResets TCP 连接从 ESTABLISHED 状态或 CLOSE-WAIT 状态直接过渡到 CLOSED 状态次数 计数 宿主,容器 procfs
network netstat_Tcp_InCsumErrors TCP 校验和错误 计数 宿主,容器 procfs
network netstat_Tcp_InErrs 错误接收到的段总数(例如,错误的 TCP 校验和) 计数 宿主,容器 procfs
network netstat_Tcp_InSegs TCP 层接收到的数据包数量。如 RFC1213 所述,包括接收到的错误数据包,如校验和错误、无效 TCP 头等 计数 宿主,容器 procfs
network netstat_Tcp_MaxConn 可以支持的总 TCP 连接数限制,在最大连接数动态的实体中,此对象应包含值-1 计数 宿主,容器 procfs
network netstat_Tcp_OutRsts TCP 段中包含 RST 标志的数量 计数 宿主,容器 procfs
network netstat_Tcp_OutSegs 发送的总段数,包括当前连接上的段,但不包括仅包含重传字节的段 计数 宿主,容器 procfs
network netstat_Tcp_PassiveOpens TCP 连接从监听状态直接过渡到 SYN-RCVD 状态的次数 计数 宿主,容器 procfs
network netstat_Tcp_RetransSegs 总重传段数 - 即包含一个或多个先前已传输字节的 TCP 段传输的数量 计数 宿主,容器 procfs
network netstat_Tcp_RtoAlgorithm The algorithm used to determine the timeout value used for retransmitting unacknowledged octets 计数 宿主,容器 procfs
network netstat_Tcp_RtoMax TCP 实现允许的重传超时最大值,以毫秒为单位 毫秒 宿主,容器 procfs
network netstat_Tcp_RtoMin TCP 实现允许的重传超时最小值,以毫秒为单位 毫秒 宿主,容器 procfs
network sockstat_FRAG_inuse - 计数 宿主,容器 procfs
network sockstat_FRAG_memory - 页计数 宿主,容器 procfs
network sockstat_RAW_inuse 使用的 RAW 套接字数量 计数 宿主,容器 procfs
network sockstat_TCP_alloc TCP 已分配的套接字数量 计数 宿主,容器 procfs
network sockstat_TCP_inuse 已建立的 TCP 套接字数量 计数 宿主,容器 procfs
network sockstat_TCP_mem 系统使用的 TCP 内存总量 页计数 系统 procfs
network sockstat_TCP_mem_bytes 系统使用的 TCP 内存总量 字节(Bytes) 系统 sockstat_TCP_mem * page_size
network sockstat_TCP_orphan TCP 等待关闭的连接数 计数 宿主,容器 procfs
network sockstat_TCP_tw TCP 套接字终止数量 计数 宿主,容器 procfs
network sockstat_UDPLITE_inuse - 计数 宿主,容器 procfs
network sockstat_UDP_inuse 使用的 UDP 套接字数量 计数 宿主,容器 procfs
network sockstat_UDP_mem 系统使用的 UDP 内存总量 页计数 系统 procfs
network sockstat_UDP_mem_bytes 系统使用的 UDP 内存字节数总和 字节(Bytes) 系统 sockstat_UDP_mem * page_size
network sockstat_sockets_used 系统使用 socket 数量 计数 系统 procfs