MQ

创建时间:2024-06-01 最近修改时间:2024-06-24

#1. Kafka

通过解析 Kafka (opens new window) 协议,将 Kafka Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 request_api_version request_api_key --
request_type 请求类型 request_api_key request_api_version 支持的 API Key 列表 (opens new window)
request_domain 请求域名 topic topic 仅 Produce、Fetch 消息,取第一个对应字段
request_resource 请求资源 $topic-$partition:$offset $topic-$partition:$offset 仅 Produce、Fetch 消息,取第一个对应字段 [1][2]
request_id 请求 ID correlation_id correlation_id 参考:使用 CorrelationID 关联 Req-Resp 通信场景 (opens new window)
endpoint 端点 $topic-$partition $topic-$partition 仅 Produce、Fetch 消息,取第一个对应字段
Resp. response_code 响应码 -- error_code 仅 Produce、Fetch、JoinGroup、LeaveGroup、SyncGroup 消息
response_status 响应状态 -- error_code 正常: error_code=0; 服务端异常: error_code!=0
response_exception 响应异常 -- error_code error_code 的英文描述 (opens new window)
response_result 响应结果 -- -- --
Trace trace_id TraceID traceparent, sw8 traceparent, sw8 从首个 Record 的对应 Header 字段中提取
span_id SpanID traceparent, sw8 traceparent, sw8 从首个 Record 的对应 Header 字段中提取
x_request_id X-Request-ID correlation_id correlation_id 参考:使用 CorrelationID 关联 Req-Resp 通信场景 (opens new window)
Misc. attribute.group_id -- group_id group_id 仅 JoinGroup、LeaveGroup、SyncGroup 消息
  • [1] 表中所有 partition 对应 Kafka 协议中的 partition id 或 partition index。
  • [2] Produce 的 offset 取自 Response 中的 base_offset,Fetch 的 offset 取自 Request 中的 fetch_offset。

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
session_length 会话长度 -- -- 请求长度 + 响应长度
request_length 请求长度 message_size -- --
request_length 响应长度 -- message_size --
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- error_code 参考 Tag 字段响应状态的说明
server_error 服务端异常 -- error_code 参考 Tag 字段response_code的说明
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#2. MQTT

通过解析 MQTT (opens new window) 协议,将 MQTT Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 -- -- --
request_type 请求类型 PacketKind -- --
request_domain 请求域名 client_id -- --
request_resource 请求资源 topic -- --
request_id 请求 ID -- -- --
endpoint 端点 topic -- --
Resp. response_code 响应码 -- code connect_ack 消息获取了 code
response_status 响应状态 -- code 正常: code=0; 客户端异常: code=1/2/4/5; 服务端异常: code=3
response_exception 响应异常 -- -- --
response_result 响应结果 -- -- --
Trace trace_id TraceID -- -- --
span_id SpanID -- -- --
x_request_id X-Request-ID -- -- --
Misc. -- -- -- -- --

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- connect_ack 报文返回的 code 参考 Tag 字段响应状态的说明
server_error 服务端异常 -- connect_ack 报文返回的 code 参考 Tag 字段response_code的说明
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#3. AMQP

通过解析 AMQP (opens new window) 协议(即 RabbitMQ (opens new window) 的主要协议) 协议,将 AMQP Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 version -- 0-9-1
request_type 请求类型 class_id.method_id -- 例如: Channel.OpenOK
request_domain 请求域名 vhost -- --
request_resource 请求资源 exchange.routing_key 或 queue -- --
request_id 请求 ID -- -- --
endpoint 端点 exchange.routing_key 或 queue -- --
Resp. response_code 响应码 -- method_id OpenOK
response_status 响应状态 -- -- 均视为正常
response_exception 响应异常 -- -- --
response_result 响应结果 -- -- --
Trace trace_id TraceID traceparent, sw8 traceparent, sw8 Content Header 中的自定义字段
span_id SpanID traceparent, sw8 traceparent, sw8 Content Header 中的自定义字段
x_request_id X-Request-ID -- -- --
Misc. -- -- -- -- --

注意:受限于协议特征,目前仅支持识别在 agent 启动后建立连接的 AMQP 协议。

另外,以下为单向消息,会被直接保存为 type=session 的调用日志:

  • Connection.Blocked (s->c)
  • Connection.Unblocked (s->c)
  • Basic.Return (s->c)
  • Basic.Ack (both)
  • Basic.Nack (both)
  • Basic.Reject (c->s)
  • Basic.RecoverAsync (c->s)
  • Content-Header (both)
  • Content-Body (both)
  • Protocol-Header (c->s) 而如下消息可能有、也可能没有 ACK,DeepFlow 统一忽略他们的响应(因为 ACK 中没有关键信息,由于不会稳定 ACK 也无需计算时延):
  • Basic.Publish (c->s)
  • Basic.Deliver (s->c)

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- -- --
server_error 服务端异常 -- -- --
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#4. OpenWire

通过解析 OpenWire (opens new window)(即 ActiveMQ (opens new window) 的默认协议) 协议,将 OpenWire Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 version -- --
request_type 请求类型 OpenWireCommand -- --
request_domain 请求域名 broker_url -- --
request_resource 请求资源 topic -- --
request_id 请求 ID command_id correlation_id [1] 请求与响应的对应关系详见 [2]
endpoint 端点 topic -- --
Resp. response_code 响应码 -- -- --
response_status 响应状态 -- -- 正常: 无 error message; 服务端异常: 有 error message
response_exception 响应异常 -- error message --
response_result 响应结果 -- -- --
Trace trace_id TraceID traceparent, sw8 traceparent, sw8 --
span_id SpanID traceparent, sw8 traceparent, sw8 --
x_request_id X-Request-ID correlation_id correlation_id 参考:ActiveMQ 中的 CorrelationID (opens new window)
Misc. -- -- -- -- --
  • [1] 注意与下方 x_request_id 对应的 correlation_id 字段区分,为两个不同的字段
  • [2] 当 request 的 response_required 为 true 时,对应 response 的 correlation_id 字段与 request 的 command_id 应当一致

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- -- --
server_error 服务端异常 -- -- --
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#5. NATS

通过解析 NATS (opens new window) 协议,将 NATS Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 version -- 使用 INFO 中的 version
request_type 请求类型 NatsMessage -- 如 INFO, SUB, PUB, MSG
request_domain 请求域名 server_name -- 使用 INFO 中的 server_name
request_resource 请求资源 subject -- --
request_id 请求 ID -- -- --
endpoint 端点 subject -- 仅 subject 第一个 . 之前的部分
Resp. response_code 响应码 -- -- --
response_status 响应状态 -- -- 均视为正常
response_exception 响应异常 -- -- --
response_result 响应结果 -- -- --
Trace trace_id TraceID traceparent, sw8 traceparent, sw8 在 HMSG, HPUB 中的 NATS headers 提取
span_id SpanID traceparent, sw8 traceparent, sw8 在 HMSG, HPUB 中的 NATS headers 提取
x_request_id X-Request-ID -- -- --
Misc. -- -- -- -- --

注意,除了 Info/Connect、Ping/Pong 这两组消息以外,其他消息均为单向消息,会被直接保存为 type=session 的调用日志:

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- -- --
server_error 服务端异常 -- -- --
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#6. Pulsar

通过解析 Pulsar (opens new window) 协议,将 Pulsar Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 protocol_version -- 取 CommandConnect 和 CommandConnected 中的小者
request_type 请求类型 command -- --
request_domain 请求域名 proxy_to_broker_url -- 在 CommandConnect 中
request_resource 请求资源 topic -- 取协议 topic 最后一个 / 之后的内容
request_id 请求 ID request_id -- 对于 Send/SendError/SendReceipt,由于命令无 request_id,另取 producer_id 和 sequence_id 的低 16 位拼接作为请求 ID
endpoint 端点 topic -- --
Resp. response_code 响应码 -- code --
response_status 响应状态 -- status --
response_exception 响应异常 -- exception --
response_result 响应结果 -- -- --
Trace trace_id TraceID traceparent, sw8 traceparent, sw8 在 HMSG, HPUB 中的 NATS headers 提取
span_id SpanID traceparent, sw8 traceparent, sw8 在 HMSG, HPUB 中的 NATS headers 提取
x_request_id X-Request-ID x_request_id x_request_id --
Misc. -- -- -- -- --

注意,以下为单向消息,会被直接保存为 type=session 的调用日志:

  • Ack
  • Flow
  • Message
  • RedeliverUnacknowledgedMessages
  • ReachedEndOfTopic
  • ActiveConsumerChange
  • AckResponse
  • WatchTopicList
  • WatchTopicListSuccess
  • WatchTopicUpdate
  • WatchTopicListClose
  • TopicMigrated

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- -- --
server_error 服务端异常 -- -- --
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应

#7. ZMTP

通过解析 ZMTP (opens new window) 协议(即 ZeroMQ 使用的消息传输协议),将 ZMTP Request / Response 的字段映射到 l7_flow_log 对应字段中,映射关系如下表:

Tag 字段映射表格,以下表格只包含存在映射关系的字段

类别 名称 中文 Request Header Response Header 描述
Req. version 协议版本 version -- --
request_type 请求类型 frame_type -- --
request_domain 请求域名 subscription -- 仅当 socket 类型为 PUB/SUB/XPUB/XSUB
request_resource 请求资源 subscription -- 仅当 socket 类型为 PUB/SUB/XPUB/XSUB
Resp. response_code 响应码 -- -- --
response_status 响应状态 -- -- 正常: 无 error message; 异常: 有 error message
response_exception 响应异常 -- error message --
Misc. -- -- -- -- --
  • ZMTP 协议中,仅当一端 socket 为 REQ/REP 时,请求消息必须等待上一次请求得到响应后才能发起,请求与响应将聚合为一个会话
  • 其余类型目前仅识别为单向消息,会被直接保存为 type=session 的调用日志

Metrics 字段映射表格,以下表格只包含存在映射关系的字段

名称 中文 Request Response 描述
request 请求 -- -- Request 个数
response 响应 -- Response 个数
log_count 日志总量 -- -- --
error 异常 -- -- 客户端异常 + 服务端异常
client_error 客户端异常 -- -- --
server_error 服务端异常 -- -- --
error_ratio 异常比例 -- -- 异常 / 响应
client_error_ratio 客户端异常比例 -- -- 客户端异常 / 响应
server_error_ratio 服务端异常比例 -- -- 服务端异常 / 响应