Features
Measured
接口提供一套简单的API来检索metrics
,很多Vert.x
组件都实现了这个接口,例如 HttpServer, NetServer
,甚至Vertx
实例自身.
我们基于Dropwizard
接口配置JMX
报告,这个接口将Vert.x
像JMX MBeans
那样暴露出来.
Getting started
想要使用metrics
,首先我们在pom文件里依赖下面的仓库:
1 | <dependency> |
然后我们使用DropwizardMetricsOptions
对Vertx
实例开启metrics
.
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
你也可以开启JMX
:
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
Metrics service
Naming
下文中列出的每一个测量组件都会被分配一个名字. 每个metric
都可以通过全限定名baseName + . + metricName
从Vertx
实例中获得.
1 | JsonObject metrics = metricsService.getMetricsSnapshot(vertx); |
或者使用metric
名字获得该自身.
1 | EventBus eventBus = vertx.eventBus(); |
Retrieving metrics
一旦开启了metrics
功能, MetricsService
可以从任意Measured
对象中检索出metrics
快照, Measured
对象提供了一个meteric name
和meteric data
映射关系的map,这个map通过JsonObject
存储。
下面的例子打印出Vertx
实例中所有的metrics
.
1 | MetricsService metricsService = MetricsService.create(vertx); |
由于HttpServer
实现了Measured
,你可以轻松地抓取到该http服务器上所有的metrics
1 | MetricsService metricsService = MetricsService.create(vertx); |
Data
下面列出了每个dropwizard metric
在JSON
中的表现形式. 对于每个metric
详细信息请参考Dropwizard metrics documentation
Gauge
1 | { |
Counter
1 | { |
Histogram
1 | { |
Meter
1 | { |
ThroughputMeter
扩展自Meter
,提供即时吞吐量。
1 | { |
Timer
Histogram
和Meter
的组合:
1 | { |
Throughput Timer
拓展自Timer
,提供即时吞吐量的metric
1 | { |
The metrics
下面列出了当前支持的metric
Vert.x metrics
vertx.event-loop-size
-event loop pool
线程的数量。(Gauge
表示)vertx.worker-pool-size
-worker pool
线程的数量。(Gauge
表示)vertx.cluster-host
-cluster-host
设置。(Gauge
表示)vertx.cluster-port
-cluster-port
设置。(Gauge
表示)vertx.verticles
- 当前被部署的verticle
的数量。(Counter
表示)
Event bus metrics
Base name: vertx.eventbus
handlers
-event bus
里handler
的数量.(Counter
表示)handlers.myaddress
- Timer,表示myaddress
的handler
接收到消息的比例messages.bytes-read
- Meter, 表示接收到远端消息时读到的字节数的Meter
messages.bytes-written
- 向远端发送消息时,写入字节的Meter
messages.pending
- 接收到消息但并没有传递给handller
的统计消息数的Counter
messages.pending-local
- 接收到locally
消息但并没有传递给handller
的统计消息数的Counter
messages.pending-remote
- Counter, 表示接收到远端但是并没有传递给handler的消息数量.messages.received
- ThroughputMeter,表示接收到消息的比例messages.received-local
- ThroughputMeter,表示接收到本地消息的比例messages.received-remote
- ThroughputMeter, 表示接收到远程消息接收到的比例messages.delivered
- [throughpu_metert], 表示消息传递给handler的比例.messages.delivered-local
- ThroughputMeter,表示local消息传递给handler的比例.messages.delivered-remote
- ThroughputMeter,表示remote消息传递给handler的比例.messages.sent
- [throughput_metert], 表示发送出去的消息的比例.messages.sent-local
-ThroughputMeter, 表示本地send
出去的消息的比例.messages.sent-remote
- ThroughputMeter, 表示远端send
出去的消息的比例.messages.published
- ThroughputMeter, 表示publish
出去的消息的比例.messages.published-local
- ThroughputMeter, 表示向本地publish
出去的消息的比例.messages.published-remote
- ThroughputMeter, 表示给远端publish
出去的消息的比例.messages.reply-failures
- Meter, 表示reply
失败的比例
monitored event bus handlers
通过向handler
注册地址上的match
来完成配置. 由于Vert.x可以在event bus
进行海量的注册,因此比较好的配置是在默认的情况下我们不对任何handler
进行监听.
monitored handlers
可以通过一个指定的address match
或者regex match
在DropwizardMetricsOptions
中完成配置.
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
警告:如果你使用
regex match
, 当出现错误的regex
,那么可能会match
出大量的handler
Http server metrics
Base name: vertx.http.servers.<host>:<port>
Http server
除了包含Net Server
的metrics
之外还包含下面这些:
requests
- 请求的Throughput Timer
和该请求出现的比例<http-method>-requests
- 指定的http method
请求的Throughput Timer
和该http method
请求的出现的比例Examples: get-requests, post-requests
<http-method>-requests./<uri>
- 指定的http method & URI
请求的Throughput Timer
和该请求的出现的比例Examples: get-requests./some/uri, post-requests./some/uri?foo=bar
responses-1xx
- 回应状态码为1xx
的ThroughputMeter
responses-2xx
- 回应状态码为2xx
的ThroughputMeter
responses-3xx
- 回应状态码为3xx
的ThroughputMeter
responses-4xx
- 回应状态码为4xx
的ThroughputMeter
responses-5xx
- 回应状态码为5xx
的ThroughputMeter
open-websockets
- 统计开启的web socket
连接数的Counter
open-websockets.<remote-host>
- 统计对某个指定的remote host
开启的web socket
连接数的Counter
不管是exact match
还是regex match
,Http URI metrics
必须在DropwizardMetricsOptions
中显式地配置.
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
For bytes-read and bytes-written the bytes represent the body of the request/response, so headers, etc are ignored.
Http client metrics
Base name: vertx.http.clients.@<id>
Http client
除了包含Http Server
全部的metrics
之外,还包含下面这些.
connections.max-pool-size
- 表示最大连接池大小的Gauge
connections.pool-ratio
- 表示open connections / max connection pool size
的比例Gauge
responses-1xx
- 回应状态码为1xx
的Meter
responses-2xx
- 回应状态码为2xx
的Meter
responses-3xx
- 回应状态码为3xx
的Meter
responses-4xx
- 回应状态码为4xx
的Meter
responses-5xx
- 回应状态码为5xx
的Meter
Net server metrics
Base name: vertx.net.servers.<host>:<port>
open-netsockets
- 开启的socket
连接数的Counter
open-netsockets.<remote-host>
- 统计对于某个指定remote host
开启的socket
连接数的Counter
connections
- 某个连接的Timer
和该连接出现的比例exceptions
- 出现异常次数的Counter
bytes-read
- 已读字节数的Histogram
.bytes-written
- 写出字节数的Histogram
.
Net client metrics
Base name: vertx.net.clients.@<id>
Net client
包含全部的Net Server
的metrics
Datagram socket metrics
Base name: vertx.datagram
sockets
- 统计datagram sockets
数的Counter
exceptions
- 统计异常出现次数的Counter
bytes-written
- 写出字节数的Histogram
.<host>:<port>.bytes-read
- 已读字节数的Histogram
.
只有当datagram socket
被监听的时候上面的统计才有效。
JMX
JMX is disabled by default.
JMX
是被默认不开启的.
如果你想要开启JMX
,你需要像下面那样开启它.
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
如果你是从命令行中运行Vert.x
想要开启JMX
, 你可以在vertx
或者vertx.bat
脚本中将JMX_OPTS
那一行取消掉注释.
1 | JMX_OPTS="-Dcom.sun.management.jmxremote -Dvertx.options.jmxEnabled=true" |
你可以配置MBeans
创建时是处于哪个域名下的:
1 | Vertx vertx = Vertx.vertx(new VertxOptions().setMetricsOptions( |
Enabling remote JMX
如果你想metrics
远程被JMX
暴露,最少你需要设置下面这个系统属性:
1 | com.sun.management.jmxremote |
如果你是通过命令行运行Vert.x,那么你需要在vertx or vertx.bat
文件中将JMX_OPTS
的注释去掉。
如果你在公共服务器上运行Vert.x,那么你需要小心对JMX
的远程访问了。
Please see the Oracle JMX documentation for more information on configuring JMX
Accessing Dropwizard Registry
When configuring the metrics service, an optional registry name can be specified for registering the underlying Dropwizard Registry in the the Dropwizard Shared Registry so you can retrieve this registry and use according to your needs.
1 | VertxOptions options = new VertxOptions().setMetricsOptions( |