采集发送指标主流程:
1.主函数调用BuildMappers()方法,agent初始化一个数组,存了五种类型的map的FuncsAndInterval,每个FuncsAndInterval结构体包括采集指标的匿名函数和循环周期
2.当主函数执行collect()方法,每一种类型的map一个协程,分别回调FuncsAndInterval中的方法采集指标
3.采集的指标过滤,打时间戳,发送transfer,是串行发送;也就是说一种类型的FuncsAndInterval指标一个协程采集->发送
4.rpc调用transfer的update()方法发送指标,失败了记日志
关于agent发送指标到transfer:
1.遍历接收到的指标项,首先做异常处理,包括(nil,“kernel.hostname”,指标、endpoint为“”,指标类型不属于gauge/counter/derive,value为"",step<0,metric+endpoint长度>1024)都会过滤,reply.Invalid++
*注释说要限制tag的数量,但是并未做处理
2.发送三份数据分别到graph,judge,opentsdb
除此之外还有
定时向hbs心跳服务请求
1.通过hbs获取缓存的策略,agent采集的本地指标,包括url,port,du
2.通过hbs更新agent状态
3.通过hbs更新agent插件
网友评论