Skip to content

JSON 输出格式

本文档描述了使用 kyanos 的 --json-output 参数时的 JSON 输出格式。

使用方法

使用 --json-output 参数输出 JSON 格式数据,可以指定以下值:

bash
# 输出到终端
kyanos watch --json-output=stdout

# 输出到文件
kyanos watch --json-output=/path/to/custom.json

输出格式

每个请求-响应对都表示为一个 JSON 对象,包含以下字段:

时间信息

字段类型描述
start_timestring请求开始时间,RFC3339Nano 格式
end_timestring请求结束时间,RFC3339Nano 格式
total_duration_msnumber请求-响应总耗时,单位毫秒
black_box_duration_msnumber对于客户端:请求离开和响应到达网络接口之间的持续时间
对于服务器端:请求到达进程和响应离开进程之间的持续时间
read_socket_duration_msnumber从 socket 缓冲区读取数据的耗时
copy_to_socket_buffer_duration_msnumber复制数据到 socket 缓冲区的耗时

连接信息

字段类型描述
protocolstring协议名称(如 "HTTP"、"Redis"、"MySQL")
sidestring连接的角色(客户端或服务端)
local_addrstring本地 IP 地址
local_portnumber本地端口号
remote_addrstring远程 IP 地址
remote_portnumber远程端口号
pidnumber进程 ID
is_sslboolean是否是 SSL/TLS 加密连接

内容信息

字段类型描述
req_size_bytesnumber请求总大小,单位字节
resp_size_bytesnumber响应总大小,单位字节
req_plain_text_size_bytesnumber请求明文大小,单位字节
resp_plain_text_size_bytesnumber响应明文大小,单位字节
requeststring格式化后的请求内容
responsestring格式化后的响应内容

事件详情

字段类型描述
req_syscall_eventsarray请求相关的系统调用事件
resp_syscall_eventsarray响应相关的系统调用事件
req_nic_eventsarray请求相关的网卡事件
resp_nic_eventsarray响应相关的网卡事件

示例

json
{
  "start_time": "2024-01-01T12:00:00.123456789Z",
  "end_time": "2024-01-01T12:00:00.234567890Z",
  "protocol": "HTTP",
  "side": "client",
  "local_addr": "127.0.0.1",
  "local_port": 54321,
  "remote_addr": "192.168.1.1",
  "remote_port": 80,
  "pid": 12345,
  "is_ssl": false,
  "total_duration_ms": 111.111111,
  "black_box_duration_ms": 50.505050,
  "read_socket_duration_ms": 30.303030,
  "copy_to_socket_buffer_duration_ms": 20.202020,
  "req_size_bytes": 256,
  "resp_size_bytes": 1024,
  "req_plain_text_size_bytes": 256,
  "resp_plain_text_size_bytes": 1024,
  "request": "GET /api/v1/users HTTP/1.1\r\nHost: example.com\r\n\r\n",
  "response": "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n{\"status\":\"success\"}",
  "req_syscall_events": [...],
  "resp_syscall_events": [...],
  "req_nic_events": [...],
  "resp_nic_events": [...]
}