概述
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