功能

  • 负责数据转发,接受agent上报的数据,然后使用一致性hash规则对数据进行分片,最后将分片后的数据分别转发至judge,graph

  • 对接收到的数据进行合法性校验、规整

  • 针对每个后端实例维护一个RPC连接池

  • 准备内存Queue中转监控数据,可以保证后端judge和graph平稳接收数据

  • 根据一致性hash规则将Queue中的数据转发给judge和graph

  • 当后端宕机时做少量缓存,提供重试机制,但是容队列爆满之后会造成内存溢出

配置文件


debug: true/false, 如果为true,日志中会打印debug信息 http - enable: true/false, 表示是否开启该http端口,该端口为控制端口,主要用来对transfer发送控制命令、统计命令、debug命令等 - listen: 表示监听的http端口 rpc - enable: true/false, 表示是否开启该jsonrpc数据接收端口, Agent发送数据使用的就是该端口 - listen: 表示监听的http端口 socket #即将被废弃,请避免使用 - enable: true/false, 表示是否开启该telnet方式的数据接收端口,这是为了方便用户一行行的发送数据给transfer - listen: 表示监听的http端口 judge - enable: true/false, 表示是否开启向judge发送数据 - batch: 数据转发的批量大小,可以加快发送速度,建议保持默认值 - connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认 - callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认 - pingMethod: 后端提供的ping接口,用来探测连接是否可用,必须保持默认 - maxConns: 连接池相关配置,最大连接数,建议保持默认 - maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认 - replicas: 这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可 - cluster: key-value形式的字典,表示后端的judge列表,其中key代表后端judge名字,value代表的是具体的ip:port graph - enable: true/false, 表示是否开启向graph发送数据 - batch: 数据转发的批量大小,可以加快发送速度,建议保持默认值 - connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认 - callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认 - pingMethod: 后端提供的ping接口,用来探测连接是否可用,必须保持默认 - maxConns: 连接池相关配置,最大连接数,建议保持默认 - maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认 - replicas: 这是一致性hash算法需要的节点副本数量,建议不要变更,保持默认即可 - cluster: key-value形式的字典,表示后端的graph列表,其中key代表后端graph名字,value代表的是具体的ip:port(多个地址用逗号隔开, transfer会将同一份数据发送至各个地址,利用这个特性可以实现数据的多重备份) 附加配置 migrating: 是否数据迁移,用于扩容graph,由于一致性hash原则问题,扩容graph之后,为保证近期数据的连续性,需要预先将数据写入第二个集群,等写入一段时间之后,再将新集群上线。开启此参数之后,transfer将 再生成一个hash环,此时维护的是两套hash环,同时往里面写数据 clubsterMigrating: { 新的graph 集群 } tsdb - enabled: true/false, 表示是否开启向open tsdb发送数据 - batch: 数据转发的批量大小,可以加快发送速度 - connTimeout: 单位是毫秒,与后端建立连接的超时时间,可以根据网络质量微调,建议保持默认 - callTimeout: 单位是毫秒,发送数据给后端的超时时间,可以根据网络质量微调,建议保持默认 - maxConns: 连接池相关配置,最大连接数,建议保持默认 - maxIdle: 连接池相关配置,最大空闲连接数,建议保持默认 - retry: 连接后端的重试次数和发送数据的重试次数 - address: tsdb地址或者tsdb集群vip地址, 通过tcp连接tsdb.

默认端口:

  • rpc:8433 接受agent 上报的数据

  • http:6060 控制transfer,也可接受用户自定义上报数据

  • socket:4444 telnet 方式的数据接受端口

用户自定义上报数据的格式:


[{"metric":"123", "endpoint":"cpu.idle", "timestamp":123123123, "step":60, "value":9, "counterType":"GAUGE", "tags":"testtag" }] API:"127.0.0.1:6060/api/push"

其中,Step和CounterType中RRD中的概念。Step就是数据采集的间隔,单位为秒。而CounterType分为五个类型,分别如下表:

  • COUNTER: 必须是递增的,除非是计数器溢出(overflows)。在这种情况下,RRDtool 会自动修改收到的值。例如网络接口流量、收到的packets 数量都属于这一类型。

  • DERIVE: 和 COUNTER 类似。但可以是递增,也可以递减,或者一会增加一会儿减少。

  • ABSOLUTE: ABSOLUTE 比较特殊,它每次都假定前一个interval的值是0,再计算平均值。

  • GAUGE: GAGUE 和上面三种不同,它没有“平均”的概念,RRDtool 收到值之后字节存入 RRA 中。

  • COMPUTE: COMPUTE 比较特殊,它并不接受输入,它的定义是一个表达式,能够引用其他DS并自动计算出某个值。

数据转发流程

初始化

  • 初始化连接池

模块启动时,会根据配置初始化RPC连接池。Judge模块初始化的连接池个数为Judge.Cluster数量。从代码中可以看出,每一个Cluster中的Judge模块进行的是单点部署。Graph模块初始化的连接池个数为Graph.Cluster中的地址数。

  • 初始化发送队列

当Transfer接收到数据之后,跟根据一致性哈希确定节点,传递给相应的发送队列,队列中再去发送至Judge以及Graph模块。其中,发送给Judge模块一份数据(因为只配置了一个Judge实例),发送给所有属于该节点的所有Graph模块一份数据。 发送队列和连接池是一一对应的。

PS:transfer 会根据endpoint、metric、tag进行一致性hash计算key,保证多台transfer时同样的key可以发送至同一个graph,保证数据连续性

  • 接收

Transfer模块有两种方式接收数据:原始TCP,和RPC。

* 原始TCP方式,Transfer与请求方保持长连接,数据之间通过 \n 分割,一共分为两中命令:"quit"和"update",前者为退出连接,后者为上报数据。

* RPC方式,和Ping和Update方法,前者只会返回一个空response,后者为上报数据。
  • 发送

通过原始TCP或者RPC方式接收到数据之后,会根据配置决定是否向Judge或Graph发送数据。 对于向Judge发送数据,首先会将数据转换为对应模块要求的格式,之后对于每一份数据(item),计算其key,找到一致性哈希中的节点node。通过node找到队列,将数据Push至队列尾部。 向Graph发送数据的逻辑和Judge的基本类似,区别就是找到一致性哈希的节点node之后,遍历该node中的所有地址addr,通过node + addr找到队列,将数据Push至队列尾部,一共发送了len(addr)份数据。

open-falcon之transfer的更多相关文章

  1. 【Open-Falcon】Linux下安装Open-Falcon

    一.Open-Falcon组件简述 [Open-Falcon绘图相关组件] Agent:  部署在目标机器采集机器监控项 Transfer : 数据接收端,转发数据到后端Graph和Judge Gra ...

  2. Linux记录-JMX监控Tomcat上传到falcon

    1.登录测试服务器xxxxxx xxxxxx su root输入xxxx 2.先修改Tomcat的启动脚本,(linux下为catalina.sh),添加以下内容: CATALINA_OPTS=&qu ...

  3. 关于open falcon 与nightingale 的一些调研

    针对 open-falcon 与 nightingale 的调研 一.open-falcon 1.1 组件介绍 1.1.1 agent > agent用于采集机器负载监控指标,比如cpu.idl ...

  4. ArtifactTransferException: Failure to transfer org.apache.openejb:javaee-api:jar:5.0-1

    最近在myeclipse上创建maven类型的web项目的时候,出现了一个错误. ArtifactTransferException: Failure to transfer org.apache.o ...

  5. Server.Transfer 和 Response.Redirect 用法区别

    在ASP.NET中,在后台传值方式目前大多都是用 Response.Redirect("页面地址") 来重定向页面的,但是现在还有一种方式也可以达到重定向页面的作用,而且在某些时刻 ...

  6. Color Transfer between Images code实现

    上计算机视觉课老师布置的作业实现论文:Color Transfer between Images 基本思路是: 1.给定srcImg和targetImg 2.将RGB空间转为Lab空间 3.根据论文中 ...

  7. Webform server.transfer 用法

    server.transfer 特点: 1:大家熟悉的一个特点,用server.transfer 跳转到新页面时,浏览器的地址是没有改变的(因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行 ...

  8. 例子:Background Transfer Service Sample

    本例演示了如何使用后台传输服务来进行后台文件下载,也就是说及时App已经停止运行,同样可以通过后台代理进行文件的下载操作. 对于后台文件传输一下知识点必须注意: 1. 通过使用 BackgroundT ...

  9. PAT 5-8 File Transfer (25分)

    We have a network of computers and a list of bi-directional connections. Each of these connections a ...

  10. 胡说REST(REpresentational State Transfer)

    Roy T. Fielding的2000年在他的博士论文中提出REpresentational State Transfer这一软件架构风格,相比"表述性状态转移"等等类似的拗口的 ...

随机推荐

  1. 多媒体开发之h264中的sps---sps信息提取之帧率

    ------------------------------author:pkf -----------------------------------------time:2015-8-20 --- ...

  2. CI框架 -- 核心文件 之 config.php

    Config:该文件包含CI_Config类,这个类包含启用配置文件来管理的方法 /** * 加载配置文件 * * @param string $file 配置文件名 * @param bool $u ...

  3. ubuntu -- 安装最新版的nodejs

    1.安装最新的nodejs和npm # apt-get update # apt-get install -y python-software-properties software-properti ...

  4. linux mysql远程连接的命令

    mysql -u 用户名 -h 远程IP地址 -p  随后输入密码. 要确认远程数据库3306端口是否开放,mysql服务是否启动. hadoop@Master:~$ mysql -u root -h ...

  5. Specified key was too long; max key length is 1000 bytes问题解决

    今天使用帆软的报表平台管理,进行外接数据库配置,尝试多次一直提示数据导入失败 java的报错 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorExcep ...

  6. Adb 获取手机信息

    adb shell getprop [ro.product.board]: [herring][ro.product.brand]: [google][ro.product.cpu.abi2]: [a ...

  7. springmvc+jquery实现省市区地址下拉框联动

    参考资料:http://www.cnblogs.com/whgw/archive/2012/05/11/2496667.html 1.jsp页面实现 <%@ page language=&quo ...

  8. JSP判断闰年

    闰年条件: 能被4整除但不能被100整除 能被400整除 <%@ page language="java" import="java.util.*" co ...

  9. 源码分析五(HashSet的内部实现)

    一:首先来看看Hashset的继承体系 public class HashSet<E> extends AbstractSet<E> implements Set<E&g ...

  10. js将json数据以csv格式下载

    摘要: 最近有一个非项目的小需求,就是将项目开发分工文件化,方便后期管理维护.但是开发时,分工安排都是以json格式记录的,所以就做了一个将json数据以csv格式下载到本地. 代码: <!DO ...