# 用于分析 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 的屏幕截圖:

有關如何收集 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/)
- Storm 基礎
- 概念
- Scheduler(調度器)
- Configuration
- Guaranteeing Message Processing
- 守護進程容錯
- 命令行客戶端
- Storm UI REST API
- 理解 Storm Topology 的 Parallelism(并行度)
- FAQ
- Layers on Top of Storm
- Storm Trident
- Trident 教程
- Trident API 綜述
- Trident State
- Trident Spouts
- Trident RAS API
- Storm SQL
- Storm SQL 集成
- Storm SQL 示例
- Storm SQL 語言參考
- Storm SQL 內部實現
- Flux
- Storm 安裝和部署
- 設置Storm集群
- 本地模式
- 疑難解答
- 在生產集群上運行 Topology
- Maven
- 安全地運行 Apache Storm
- CGroup Enforcement
- Pacemaker
- 資源感知調度器 (Resource Aware Scheduler)
- 用于分析 Storm 的各種內部行為的 Metrics
- Windows 用戶指南
- Storm 中級
- 序列化
- 常見 Topology 模式
- Clojure DSL
- 使用沒有jvm的語言編輯storm
- Distributed RPC
- Transactional Topologies
- Hooks
- Storm Metrics
- Storm 狀態管理
- Windowing Support in Core Storm
- Joining Streams in Storm Core
- Storm Distributed Cache API
- Storm 調試
- 動態日志級別設置
- Storm Logs
- 動態員工分析
- 拓撲事件檢查器
- Storm 與外部系統, 以及其它庫的集成
- Storm Kafka Integration
- Storm Kafka 集成(0.10.x+)
- Storm HBase Integration
- Storm HDFS Integration
- Storm Hive 集成
- Storm Solr 集成
- Storm Cassandra 集成
- Storm JDBC 集成
- Storm JMS 集成
- Storm Redis 集成
- Azue Event Hubs 集成
- Storm Elasticsearch 集成
- Storm MQTT(Message Queuing Telemetry Transport, 消息隊列遙測傳輸) 集成
- Storm MongoDB 集成
- Storm OpenTSDB 集成
- Storm Kinesis 集成
- Storm Druid 集成
- Storm and Kestrel
- Container, Resource Management System Integration
- Storm 高級
- 針對 Storm 定義一個不是 JVM 的 DSL
- 多語言協議
- Storm 內部實現
- 翻譯進度