# 用于分析 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/)
- 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 内部实现
- 翻译进度