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)
首先看入口文件bin/collector,这是个ruby脚本文件,非常简单:通过Config读取配置文件之后,利用EM启动了Collector。
Collector::Config.configure(YAML.load_file(config_file)) EM.run do Collector::Collector.new endvcap-tool的核心框架由lib/collector.rb实现。
在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)