附录
目录
附录 A:常见问题
A.1. 无法建立到代理的连接
Netty 的 HTTP 代理支持始终使用 CONNECT 方法,以便与指定代理建立隧道,无论所用方案是 http 还是 https。(更多信息:Netty enforce HTTP proxy to support HTTP CONNECT method)。某些代理在方案为 http 时可能不支持 CONNECT 方法,或者可能需要额外配置才能支持这种通信方式。有时这正是无法连接到代理的原因。请查阅代理文档,确认它是否支持 CONNECT 方法或需要额外配置以支持该方法。
A.2. 每条日志记录前附加的信息是什么含义?
Reactor Netty 会在每条日志记录的开头(在可能的情况下)添加连接相关信息。当使用 TCP、UDP、HTTP/1.1 或 HTTP/2 时,连接细节略有不同。
A.2.1. TCP 与 UDP
对于 TCP 和 UDP,每条日志记录的开头会附加以下内容:底层连接的 id、本地地址和远程地址。
Examples
[a1566d55, L:/[0:0:0:0:0:0:0:1]:53446 - R:/[0:0:0:0:0:0:0:1]:53444]
[a1566d55, L:/[0:0:0:0:0:0:0:1]:53446 ! R:/[0:0:0:0:0:0:0:1]:53444]
Format
[<CONNECTION_ID>, L:<LOCAL_ADDRESS> <CONNECTION_OPENED_CLOSED> R:<REMOTE_ADDRESS>]
<CONNECTION_ID>: a1566d55
<LOCAL_ADDRESS>: [0:0:0:0:0:0:0:1]:53446
<CONNECTION_OPENED_CLOSED>: - (connection opened)
! (connection closed)
<REMOTE_ADDRESS>: [0:0:0:0:0:0:0:1]:53444
A.2.2. HTTP/1.1
对于 HTTP/1.1,每条日志记录的开头会附加以下内容:底层连接的 id、在该连接上接收到的请求序号、本地地址和远程地址。
Examples
[a1566d55-5, L:/[0:0:0:0:0:0:0:1]:53446 - R:/[0:0:0:0:0:0:0:1]:53444]
[a1566d55-5, L:/[0:0:0:0:0:0:0:1]:53446 ! R:/[0:0:0:0:0:0:0:1]:53444]
Format
[<CONNECTION_ID>-<REQUEST_NUMBER>, L:<LOCAL_ADDRESS> <CONNECTION_OPENED_CLOSED> R:<REMOTE_ADDRESS>]
<CONNECTION_ID>: a1566d55
<REQUEST_NUMBER>: 5
<LOCAL_ADDRESS>: [0:0:0:0:0:0:0:1]:53446
<CONNECTION_OPENED_CLOSED>: - (connection opened)
! (connection closed)
<REMOTE_ADDRESS>: [0:0:0:0:0:0:0:1]:53444
A.2.3. HTTP/2
对于 HTTP/2,每条日志记录的开头会附加以下内容:底层连接的 id、本地地址和远程地址、在该连接上接收到的流的 id。
Examples
[a1566d55, L:/[0:0:0:0:0:0:0:1]:53446 - R:/[0:0:0:0:0:0:0:1]:53444](H2 - 5)
[a1566d55, L:/[0:0:0:0:0:0:0:1]:53446 ! R:/[0:0:0:0:0:0:0:1]:53444](H2 - 5)
Format
[<CONNECTION_ID>, L:<LOCAL_ADDRESS> <CONNECTION_OPENED_CLOSED> R:<REMOTE_ADDRESS>]<STREAM_ID>
<CONNECTION_ID>: a1566d55
<LOCAL_ADDRESS>: [0:0:0:0:0:0:0:1]:53446
<CONNECTION_OPENED_CLOSED>: - (connection opened)
! (connection closed)
<REMOTE_ADDRESS>: [0:0:0:0:0:0:0:1]:53444
<STREAM_ID>: (H2 - 5)
A.3. 如何提取某个特定 HTTP 请求的所有日志记录?
Reactor Netty 会在每条日志记录的开头(在可能的情况下)添加连接相关信息。使用连接的 id 即可提取某个特定 HTTP 请求的所有日志记录。更多信息请参阅每条日志记录前附加的信息是什么含义?
A.4. 如何调试内存泄漏?
默认情况下,Reactor Netty 使用直接内存,因为在存在大量原生 I/O 操作(与套接字打交道)时这样性能更高,可以省去拷贝操作。由于分配与释放都是开销较大的操作,Reactor Netty 默认还使用池化缓冲区。更多信息请参阅引用计数对象。
为了能够调试直接内存和池化缓冲区的内存问题,Netty 提供了一种特殊的内存泄漏检测机制。请按照排查缓冲区泄漏中的说明启用该机制。除 Netty 提供的说明外,Reactor Netty 还提供了一个特殊日志记录器(reactor.netty.channel.LeakDetection),用于帮助识别内存泄漏可能发生在 Reactor Netty 内部的何处,或者 Reactor Netty 是否已经将缓冲区的所有权移交给了应用程序/框架。默认情况下此日志记录器为关闭。要启用它,请将日志级别提高到 DEBUG。
另一种检测内存泄漏的方式是监控 reactor.netty.bytebuf.allocator.active.heap.memory 和 reactor.netty.bytebuf.allocator.active.direct.memory 这两个指标:
-
reactor.netty.bytebuf.allocator.active.heap.memory提供从堆缓冲区池分配的在用缓冲区实际消耗的字节数 -
reactor.netty.bytebuf.allocator.active.direct.memory提供从直接缓冲区池分配的在用缓冲区实际消耗的字节数
如果上述指标持续增长,则很可能存在缓冲区内存泄漏。
调试内存泄漏问题时,请考虑减少所用内存(例如 -XX:MaxDirectMemorySize、-Xms、-Xmx)。应用程序可用内存越少,内存泄漏就越早暴露。
A.5. 如何调试“Connection prematurely closed BEFORE response”?
默认情况下,Reactor Netty 客户端使用连接池。从连接池获取连接时,会检查该连接是否仍然处于打开状态。然而,连接在获取之后随时可能被关闭。导致连接关闭的原因有很多。大多数情况下,客户端可能并非直接与服务器通信,它们之间可能存在其他网络组件(代理、负载均衡器等)。
如果在客户端观察到 Connection prematurely closed BEFORE response,请执行以下检查以确定连接被关闭的原因:
-
获取一次 TCP dump,并检查是哪一端发送了 FIN/RST 信号。
-
检查您的网络连接。
-
检查您的防火墙和 VPN。
-
检查是否存在任何代理和负载均衡器。
-
它们是否配置了某种空闲超时(在一段时间没有入站数据时关闭连接)?
-
它们是否会在不发送任何信号的情况下静默丢弃空闲连接?为了验证这是否可能是问题所在,您可以按照连接超时一节所述启用 TCP 保持连接。过去曾报告过与各种负载均衡器上 TCP 保持连接配置相关的问题。
-
-
检查目标服务器。
-
是否存在与以下任何一项相关的配置?
-
空闲超时(在一段时间没有入站数据时关闭连接)
-
内存中缓冲数据的上限
-
multipart 超出最大文件大小限制
-
错误请求
-
最大保持连接请求数(当请求达到配置的最大数量时关闭连接)
-
限流配置
-
-
目标服务器是否正处于关闭状态?
-
请考虑查阅超时配置。该节介绍了 Reactor Netty 客户端可用的各种超时配置选项。配置适当的超时可能会改善或解决通信过程中的问题。
附录 B:可观测性
B.1. 可观测性元数据
B.1.1. 可观测性 - 指标
以下列出了本项目声明的所有指标。
活动连接
连接池中已成功获取并处于活动使用状态的连接数。
指标名称 reactor.netty.connection.provider.active.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.client.Http2ConnectionProviderMeters。
表 1. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
活动连接
连接池中已成功获取并处于活动使用状态的连接数。
指标名称 reactor.netty.connection.provider.active.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 2. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
活动直接内存
从直接缓冲区池分配的在用缓冲区实际消耗的字节数。
指标名称 reactor.netty.bytebuf.allocator.active.direct.memory。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 3. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
活动堆内存
从堆缓冲区池分配的在用缓冲区实际消耗的字节数。
指标名称 reactor.netty.bytebuf.allocator.active.heap.memory。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 4. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
活动流
活动的 HTTP/2 流数量。
指标名称 reactor.netty.connection.provider.active.streams。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.client.Http2ConnectionProviderMeters。
表 5. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
块大小
Arena 的块大小。
指标名称 reactor.netty.bytebuf.allocator.chunk.size。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 6. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
活动连接数
服务器上当前正在处理请求的 HTTP 连接数。
指标名称 reactor.netty.http.server.connections.active。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 7. 低基数键
| 名称 | 描述 |
|---|---|
local.address (required) | 本地地址。 |
uri (required) | URI。 |
连接总数
服务器上所有已打开的连接数。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.channel.ChannelMeters。
表 8. 低基数键
| 名称 | 描述 |
|---|---|
local.address (required) | 本地地址。 |
uri (required) | URI。 |
连接耗时
连接指标。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 timer。
指标名称 %s.active——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 long task timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.channel.ConnectObservations。
表 9. 低基数键
| 名称 | 描述 |
|---|---|
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
接收数据
接收的数据量,以字节为单位。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 distribution summary,基本单位 bytes。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.channel.ChannelMeters。
表 10. 低基数键
| 名称 | 描述 |
|---|---|
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
uri (required) | URI。 |
发送数据
发送的数据量,以字节为单位。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 distribution summary,基本单位 bytes。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.channel.ChannelMeters。
表 11. 低基数键
| 名称 | 描述 |
|---|---|
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
uri (required) | URI。 |
直接 Arena
直接 Arena 的数量。
指标名称 reactor.netty.bytebuf.allocator.direct.arenas。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 12. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
错误数
已发生的错误数。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 counter。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.channel.ChannelMeters。
表 13. 低基数键
| 名称 | 描述 |
|---|---|
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
uri (required) | URI。 |
堆 Arena
堆 Arena 的数量。
指标名称 reactor.netty.bytebuf.allocator.heap.arenas。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 14. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
主机名解析耗时
主机名解析指标。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 timer。
指标名称 %s.active——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 long task timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.transport.HostnameResolutionObservations。
表 15. 低基数键
| 名称 | 描述 |
|---|---|
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
HTTP 客户端接收数据耗时
客户端消费入站数据所花费的时间。
指标名称 reactor.netty.http.client.data.received.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.client.HttpClientMeters。
表 16. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
uri (required) | URI。 |
HTTP 客户端发送数据耗时
客户端发送出站数据所花费的时间。
指标名称 reactor.netty.http.client.data.sent.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.client.HttpClientMeters。
表 17. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
uri (required) | URI。 |
HTTP 客户端响应耗时
响应指标。
指标名称 reactor.netty.http.client.response.time。类型 timer。
指标名称 reactor.netty.http.client.response.time.active。类型 long task timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.client.HttpClientObservations。
表 18. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
uri (required) | URI。 |
HTTP 服务器接收数据
接收的数据量,以字节为单位。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 distribution summary,基本单位 bytes。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 19. 低基数键
| 名称 | 描述 |
|---|---|
uri (required) | URI。 |
HTTP 服务器接收数据耗时
服务器消费入站数据所花费的时间。
指标名称 reactor.netty.http.server.data.received.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 20. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
uri (required) | URI。 |
HTTP 服务器发送数据
发送的数据量,以字节为单位。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 distribution summary,基本单位 bytes。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 21. 低基数键
| 名称 | 描述 |
|---|---|
uri (required) | URI。 |
HTTP 服务器发送数据耗时
服务器发送出站数据所花费的时间。
指标名称 reactor.netty.http.server.data.sent.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 22. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
status (required) | STATUS。 |
uri (required) | URI。 |
HTTP 服务器错误数
已发生的错误数。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 counter。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 23. 低基数键
| 名称 | 描述 |
|---|---|
uri (required) | URI。 |
HTTP 服务器响应耗时
响应指标。
指标名称 reactor.netty.http.server.response.time。类型 timer。
指标名称 reactor.netty.http.server.response.time.active。类型 long task timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.server.HttpServerObservations。
表 24. 低基数键
| 名称 | 描述 |
|---|---|
method (required) | METHOD。 |
status (required) | STATUS。 |
uri (required) | URI。 |
空闲连接
连接池中的空闲连接数。
指标名称 reactor.netty.connection.provider.idle.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.client.Http2ConnectionProviderMeters。
表 25. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
空闲连接
连接池中的空闲连接数。
指标名称 reactor.netty.connection.provider.idle.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 26. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
最大连接数
连接池中允许的最大活动连接数。
指标名称 reactor.netty.connection.provider.max.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 27. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
最大挂起连接数
在等待从连接池获取就绪连接时,最多可排队的请求数。
指标名称 reactor.netty.connection.provider.max.pending.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 28. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
普通缓存大小
普通缓存的大小。
指标名称 reactor.netty.bytebuf.allocator.normal.cache.size。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 29. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
挂起连接数
正在等待从连接池获取连接的请求数。
指标名称 reactor.netty.connection.provider.pending.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 30. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
挂起连接耗时
等待从连接池获取连接所花费的时间。
指标名称 reactor.netty.connection.provider.pending.connections.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 31. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
挂起流数
等待打开 HTTP/2 流的请求数。
指标名称 reactor.netty.connection.provider.pending.streams。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.client.Http2ConnectionProviderMeters。
表 32. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
挂起流耗时
等待从连接池获取流所花费的时间。
指标名称 reactor.netty.connection.provider.pending.streams.time。类型 timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.http.client.Http2ConnectionProviderMeters。
表 33. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
待处理任务
事件循环中待处理的已调度任务数。
指标名称 reactor.netty.eventloop.pending.tasks。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.EventLoopMeters。
表 34. 低基数键
| 名称 | 描述 |
|---|---|
name (required) | NAME。 |
小型缓存大小
小型缓存的大小。
指标名称 reactor.netty.bytebuf.allocator.small.cache.size。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 35. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
活动流数
服务器上当前活动的 HTTP/2 流数量。
指标名称 reactor.netty.http.server.streams.active。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.http.server.HttpServerMeters。
表 36. 低基数键
| 名称 | 描述 |
|---|---|
local.address (required) | 本地地址。 |
uri (required) | URI。 |
线程本地缓存
线程本地缓存的数量。
指标名称 reactor.netty.bytebuf.allocator.threadlocal.caches。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 37. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
TLS 握手耗时
TLS 握手指标。
指标名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 timer。
指标名称 %s.active——由于其中包含 %s,该名称是动态的,将在运行时解析。类型 long task timer。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
Micrometer 内部以 nanoseconds 作为基本单位。不过,实际的基本单位由各个后端决定(例如 Prometheus 使用秒)。
封闭类的全限定名为 reactor.netty.tcp.TlsHandshakeObservations。
表 38. 低基数键
| 名称 | 描述 |
|---|---|
proxy.address (required) | 配置了代理时的代理地址。 |
remote.address (required) | 远程地址。 |
status (required) | STATUS。 |
连接总数
连接池中所有连接(活动或空闲)的数量。
指标名称 reactor.netty.connection.provider.total.connections。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.resources.ConnectionProviderMeters。
表 39. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
name (required) | NAME。 |
remote.address (required) | 远程地址。 |
已用直接内存
直接缓冲区分配器保留的字节数。
指标名称 reactor.netty.bytebuf.allocator.used.direct.memory。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 40. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
已用堆内存
堆缓冲区分配器保留的字节数。
指标名称 reactor.netty.bytebuf.allocator.used.heap.memory。类型 gauge。
Observation 启动之后才添加的 KeyValues,可能会在 *.active 指标中缺失。
封闭类的全限定名为 reactor.netty.transport.ByteBufAllocatorMeters。
表 41. 低基数键
| 名称 | 描述 |
|---|---|
id (required) | ID。 |
type (required) | TYPE。 |
B.1.2. 可观测性 - Span
以下列出了本项目声明的所有 Span。
连接 Span
连接 Span。
Span 名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。
封闭类的全限定名为 reactor.netty.channel.ConnectSpans。
表 42. 标签键
| 名称 | 描述 |
|---|---|
net.peer.name (required) | 网络对端名称。 |
net.peer.port (required) | 网络对端端口。 |
reactor.netty.protocol (required) | Reactor Netty 协议(tcp/http 等)。 |
reactor.netty.status (required) | Reactor Netty 状态。 |
reactor.netty.type (required) | Reactor Netty 类型(始终为 client)。 |
主机名解析 Span
主机名解析 Span。
Span 名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。
封闭类的全限定名为 reactor.netty.transport.HostnameResolutionSpans。
表 43. 标签键
| 名称 | 描述 |
|---|---|
net.peer.name (required) | 网络对端名称。 |
net.peer.port (required) | 网络对端端口。 |
reactor.netty.protocol (required) | Reactor Netty 协议(tcp/http 等)。 |
reactor.netty.status (required) | Reactor Netty 状态。 |
reactor.netty.type (required) | Reactor Netty 类型(始终为 client)。 |
HTTP 客户端响应 Span
响应 Span。
Span 名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。
封闭类的全限定名为 reactor.netty.http.client.HttpClientSpans。
表 44. 标签键
| 名称 | 描述 |
|---|---|
http.status_code (required) | 状态码。 |
http.url (required) | URL。 |
net.peer.name (required) | 网络对端名称。 |
net.peer.port (required) | 网络对端端口。 |
reactor.netty.type (required) | Reactor Netty 类型(始终为 client)。 |
HTTP 服务器响应 Span
响应 Span。
Span 名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。
封闭类的全限定名为 reactor.netty.http.server.HttpServerSpans。
表 45. 标签键
| 名称 | 描述 |
|---|---|
http.scheme (required) | HTTP scheme。 |
http.status_code (required) | 状态码。 |
net.host.name (required) | 网络主机名。 |
net.host.port (required) | 网络主机端口。 |
reactor.netty.type (required) | Reactor Netty 类型(始终为 server)。 |
TLS 握手 Span
TLS 握手 Span。
Span 名称 %s——由于其中包含 %s,该名称是动态的,将在运行时解析。
封闭类的全限定名为 reactor.netty.tcp.TlsHandshakeSpans。
表 46. 标签键
| 名称 | 描述 |
|---|---|
reactor.netty.protocol (required) | Reactor Netty 协议(tcp/http 等)。 |
reactor.netty.status (required) | Reactor Netty 状态。 |
reactor.netty.type (required) | Reactor Netty 类型(client/server)。 |
remote.address (required) | 远程地址。 |