🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 用于分析 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/)