事件字段规范
事件字段必须先统一语义,再按各层的惯例命名。相同名称不得表示不同概念。
分层规则
| 层 | 规则 | 示例 |
|---|---|---|
| BPF C | 名称体现内核原始语义和单位 | tgid、kernel_observed_ns |
| Go | MixedCaps;缩写保持全大写 | TGID、KernelObservedNS |
| JSON | 使用面向用户的统计语义 | pid、observed_timestamp |
| CLI 参数 | 小写短横线 | --pid、--cpuid |
| CLI 文本和表头 | 使用标准大写缩写 | PID、CPU、COMM |
CPU 和任务
| 概念 | 定义 | BPF C | Go | JSON | CLI |
|---|---|---|---|---|---|
| 逻辑 CPU 编号 | bpf_get_smp_processor_id() 返回的编号 |
cpu |
CPU |
cpu |
--cpu、CPU |
| 进程 ID | 用户态进程标识,即 Linux TGID | tgid |
原始事件用 TGID,输出用 PID |
pid |
--pid、PID |
| 线程 ID | Linux task PID | tid |
TID |
tid |
--tid、TID |
| 父进程 ID | 父进程 TGID | parent_tgid |
ParentTGID 或输出层 ParentPID |
parent_pid |
PPID |
| task comm | 内核 task 的 comm,可能是线程名 |
comm |
Comm |
comm |
COMM |
时间和数值单位
| 概念 | 定义 | BPF C | Go | JSON |
|---|---|---|---|---|
| 内核观测原始时间 | CLOCK_MONOTONIC 纳秒读数,不含系统挂起时间 |
kernel_observed_ns |
KernelObservedNS |
不序列化,仅用于内部关联 |
| 内核观测时间 | 原始单调时间转换后的 UTC 时间 | 不适用 | KernelObservedTimestamp |
kernel_observed_timestamp |
| 用户态观测时间 | 事件生产者在用户态观测事件的 UTC 时间 | 不适用 | ObservedTimestamp |
observed_timestamp |
| Unix 纳秒时间 | Unix 纳秒时间 | timestamp_ns |
TimestampNS |
timestamp_ns |
| 纳秒时长 | 两个时间点的差值 | <name>_ns |
<Name>NS |
<name>_ns |
| 纳秒阈值 | 触发条件对应的时长 | <name>_threshold_ns |
<Name>ThresholdNS |
<name>_threshold_ns |
| 计数 | 无单位的累计值 | <name>_count |
<Name>Count |
<name>_count |
| 字节数 | 数据大小,不是位数 | <name>_bytes |
<Name>Bytes |
<name>_bytes |
容器、cgroup 和网络命名空间
| 概念 | BPF C | Go | JSON | CLI |
|---|---|---|---|---|
| 容器 ID | container_id |
ContainerID |
container_id |
--container-id、CONTAINER_ID |
| cgroup ID | cgroup_id |
CgroupID |
cgroup_id |
CGROUP_ID |
| cgroup CSS 地址 | <subsystem>_css_addr |
<Subsystem>CSSAddr |
<subsystem>_css_addr |
<SUBSYSTEM>_CSS_ADDR |
| 网络命名空间 inode | netns_inum |
NetNamespaceInum |
net_namespace_inum |
NETNS_INUM |
| 网络命名空间 cookie | netns_cookie |
NetNamespaceCookie |
net_namespace_cookie |
NETNS_COOKIE |
| 网络设备索引 | ifindex 或 <name>_ifindex |
Ifindex 或 <Name>Ifindex |
ifindex 或 <name>_ifindex |
IFINDEX |
内核术语 inum 和 ifindex 在 Go 中保持一个单词,不拆成 INum 或
IfIndex。面向用户的 Go 和 JSON 字段将 netns 展开为
NetNamespace 和 net_namespace。
观测时间与兼容性
kernel_observed_timestamp、observed_timestamp 和 uploaded_timestamp
分别表示内核观测、用户态观测和存储写入时刻。内核观测表示 hook 执行时刻,
不保证等同于物理硬件错误或网络故障开始的时刻。
Document 顶层保存 UTC 时间,不保存 kernel_observed_ns。
没有内核时间的生产者及旧文档省略 kernel_observed_timestamp,不得用
用户态时间或写入时间补填。历史 RAS 文档的 observed_timestamp 曾表示
内核观测时刻,不能据此推算历史用户态观测时刻。
tcpshark 和 dropwatch 的 JSON/文本输出使用 kernel_observed_timestamp 表示内核观测时间。
工具和 Agent 应一起升级;旧文档保持原样,不自动回填或重写。
单调时钟与 UTC 的转换要求相同主机、同一次启动及主机时间命名空间。
跨越校时跳变或系统挂起的历史事件,仅凭单调时间不能精确恢复 UTC。
UTC 转换缓存单调时钟到实时钟的偏移:距上次成功采样满 1 小时后,由下一次 调用刷新,普通调用不延长缓存期限。采样失败返回错误,下次调用重试。 系统校时跳变或挂起不会提前触发刷新,偏移会在缓存到期后的下一次调用更新。