# 用于分析 Storm 的各种内部行为的 Metrics

随着这些 Metrics 的增加, Storm 用户可以收集, 查看和分析各种内部操作的性能. 分析的动作包括 Storm 守护程序中的 rpc 调用和 http 任务. 例如, 在 Storm Nimbus 守护进程中, 下面是在 Nimbus$Iface 中定义的 thrift 调用简介：

*   submitTopology
*   submitTopologyWithOpts
*   killTopology
*   killTopologyWithOpts
*   activate
*   deactivate
*   rebalance
*   setLogConfig
*   getLogConfig

各种 HTTP GET 和 POST 请求也被 make 用于分析, 例如 Storm UI 守护程序的 GET 和 POST 请求 (ui/core.cj) 要实现这些 Metrics, 使用以下软件包：

*   io.dropwizard.metrics
*   metrics-clojure

## 怎么运行它

通过使用包 io.dropwizard.metrics 和 metrics-clojure (Metrics Java API 的 clojure 包装器), 我们可以通过声明 (defmeter num-some-func-calls) 来将功能标记为配置文件, 然后添加 (mark! num-some-func-calls) 调用函数的位置.例如：

```
(defmeter num-some-func-calls)
(defn some-func [args]
    (mark! num-some-func-calls)
    (body)) 
```

什么是 mark 的本质! API 调用是增加一个计数器, 表示某个操作发生了多少次.对于即时测量, 用户可以使用量规.例如：

```
(defgauge nimbus:num-supervisors
     (fn [] (.size (.supervisors (:storm-cluster-state nimbus) nil)))) 
```

上面的例子将得到集群中的主管数量.这个度量不像以前讨论过的那样累积.

还需要激活度量报告服务器来收集指标.您可以通过调用以下函数来执行此操作：

```
(defn start-metrics-reporters []
    (jmx/start (jmx/reporter {}))) 
```

## 如何收集 Metrics

Metrics 可以通过 JMX 或 HTTP 报告.用户可以使用 JConsole 或 VisualVM 连接到 jvm 进程并查看统计信息.

要在 GUI 中查看 Metrics, 请使用 VisualVM 或 JConsole.使用 VisualVm 进行 Metrics 的屏幕截图：

![Viewing metrics with VisualVM](http://storm.apachecn.org/releases/cn/1.1img/viewing_metrics_with_VisualVM.png)

有关如何收集 Metrics 的详细信息, 请参考：

[https://dropwizard.github.io/metrics/3.1.0/getting-started/](https://dropwizard.github.io/metrics/3.1.0/getting-started/)

如果要使用 JMX 并通过 JConsole 或 VisualVM 查看 Metrics, 请记住使用正确的 JMX 配置启动要配置文件的 JVM 进程. 例如在 Storm 中, 您将添加以下 conf/storm.yaml

```
nimbus.childopts: "-Xmx1024m -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=3333  -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

ui.childopts: "-Xmx768m -Dcom.sun.management.jmxremote.port=3334 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

logviewer.childopts: "-Xmx128m -Dcom.sun.management.jmxremote.port=3335 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

drpc.childopts: "-Xmx768m -Dcom.sun.management.jmxremote.port=3336 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

supervisor.childopts: "-Xmx256m -Dcom.sun.management.jmxremote.port=3337 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false" 
```

### 请注意:

由于我们遮蔽了我们使用的所有软件包, 所以用于收集 Metrics 的附加插件目前可能无法正常工作.目前通过 JMX 收集 Metrics 是受支持的.

有关 io.dropwizard.metrics 和 metrics-clojure 软件包的更多信息, 请参考原始文档：

*   [https://dropwizard.github.io/metrics/3.1.0/](https://dropwizard.github.io/metrics/3.1.0/)
*   [http://metrics-clojure.readthedocs.org/en/latest/](http://metrics-clojure.readthedocs.org/en/latest/)