CloudFoundry源码分析:vcap-tool

 
 

概述

vcap-tool,顾名思义,是vcap平台的一个工具。这个工具将vcap平台的运行数据整合进OpenTSDB。

OpenTSDB是一个基于HBase的、分布式的、可扩展的Time Series Database (TSDB)。OpenTSDB was written to address a common need: store, index and serve metrics collected from computer systems (network gear, operating systems, applications) at a large scale, and make this data easily accessible and graphable.

详细参考(http://opentsdb.net/index.html)

vcap-tool

首先看入口文件bin/collector,这是个ruby脚本文件,非常简单:通过Config读取配置文件之后,利用EM启动了Collector。

Collector::Config.configure(YAML.load_file(config_file))

EM.run do
  Collector::Collector.new
end
vcap-tool的核心框架由lib/collector.rb实现。

Collector

在initialize方法中,首先通过EM建立与OpentTSDB的connection:

      @tsdb_connection = EventMachine.connect(Config.tsdb_host, Config.tsdb_port, TsdbConnection)
然后通过nats注册了ANNOUNCE_SUBJECT事件,并发布了DISCOVER_SUBJECT事件。(这两个事件的实现可以参见VCAP::Component)

通过ANNOUNCE_SUBJECT事件,当有新的组件(比如DEA)加入到VCAP平台中时,Collector将加入改组件到components中。

Collector通过设定一系列的定时器,搜集组件的信息。

下面介绍setup_timers方法

      EM.add_periodic_timer(Config.discover_interval) do
        @nats.publish(DISCOVER_SUBJECT, "", @inbox)
      end

这里定时发布组件发布信息,要求各个组件汇报更新当前的状态

EM.add_periodic_timer(Config.varz_interval) { fetch_varz }
这里是向OpenTSDB发送数据的定时器

首先搜集运行的实例的数据,调用Handler的process方法向OpenTSDB发送数据。这里利用了策略模式:Handler是个抽像的接口,process的实现由各个具体的Handler实现。各个Hander在lib/collector/handlers下,每个handler会将自己注册抽象类的map中。

              handler = Handler.handler(@tsdb_connection, job, index, now)
              if varz["mem"]
                handler.send_metric("mem", varz["mem"] / 1024,
                                    get_job_tags(job))
              end
              handler.process(varz)

抽象Handler类根据job类型获取具体的handler,然后处理varz






你可能感兴趣的:(CloudFoundry源码分析:vcap-tool)