Open cjuexuan opened 6 years ago
最开始立项做spoor的时候,我们仅仅想做的是对yarn上的任务的状态进行监控,当发生故障的时候时候能及时通知到开发。后来,我们想着去适配spark的metric system,采集更多任务的指标,让定位问题和性能调优的成本更低。在开发的过程中,我们发现这可以做的很通用,可以把我们所有的大数据组件的metric info都接入进来,所以从需求本身推动我们不断的迭代这个系统
这是我们目前的整体架构,最左边是客户端(agent和application),我们会在每个application中起一个我们的channel,发送到我们mq(目前是基于kafka实现的),对于进入mq的数据,我们会有两个流程序处理它,首先,我们先说上面的流程序,这个流程序主要用来做数据的预聚合以及做一个存储的拆分,接下来就是按照不同的metric的类型(gauge/delta),以及不同的聚合周期(分钟,10分钟,1小时),以及当天的日期写到不同的es的index,最终我们的看板按照用户指定的起始时间动态的路由到对应的index中去,按照选中的条件进行筛选过滤(没有聚合),选到一个比较小的数据集(几十万)之后再本地通过多线程完成最终的聚合。说完了第一个流,我们再说第二个流程序,第二个流程序主要用来做告警的,我们这里并没有选择常规的基于db的pull模式去做,而是选择通过streaming的push模式做告警,这里有一个后台程序和我们的流程序建立一个长连接,后台负责对规则的crud,并且在变更后下发到流程序,另外就是消费由流程序产生的告警事件,做告警的合并,并且最终通过钉钉,邮件,短信等方式通知到对应的开发
application_1516850428106_6144.driver.spoor.example.StreamingMetrics.streaming.receivers
application_1493749888910_1641.{executorId}.executor.filesystem.hdfs.largeRead_ops
spoor_gauge_double_10minute_2018_03_17
spoor概览
最开始立项做spoor的时候,我们仅仅想做的是对yarn上的任务的状态进行监控,当发生故障的时候时候能及时通知到开发。后来,我们想着去适配spark的metric system,采集更多任务的指标,让定位问题和性能调优的成本更低。在开发的过程中,我们发现这可以做的很通用,可以把我们所有的大数据组件的metric info都接入进来,所以从需求本身推动我们不断的迭代这个系统
整体架构
这是我们目前的整体架构,最左边是客户端(agent和application),我们会在每个application中起一个我们的channel,发送到我们mq(目前是基于kafka实现的),对于进入mq的数据,我们会有两个流程序处理它,首先,我们先说上面的流程序,这个流程序主要用来做数据的预聚合以及做一个存储的拆分,接下来就是按照不同的metric的类型(gauge/delta),以及不同的聚合周期(分钟,10分钟,1小时),以及当天的日期写到不同的es的index,最终我们的看板按照用户指定的起始时间动态的路由到对应的index中去,按照选中的条件进行筛选过滤(没有聚合),选到一个比较小的数据集(几十万)之后再本地通过多线程完成最终的聚合。说完了第一个流,我们再说第二个流程序,第二个流程序主要用来做告警的,我们这里并没有选择常规的基于db的pull模式去做,而是选择通过streaming的push模式做告警,这里有一个后台程序和我们的流程序建立一个长连接,后台负责对规则的crud,并且在变更后下发到流程序,另外就是消费由流程序产生的告警事件,做告警的合并,并且最终通过钉钉,邮件,短信等方式通知到对应的开发
细节
client端
application_1516850428106_6144.driver.spoor.example.StreamingMetrics.streaming.receivers
或者application_1493749888910_1641.{executorId}.executor.filesystem.hdfs.largeRead_ops
,由于每个周期都要有指标产生,而且我们对名字做适配,并且将executor id之类的信息作为我们的timeseries上的标签,所以如果事先知道executor id的话,我们就不需要用正则之类的东西去处理指标名了,我们可以直接按照字符串长度进行截取,对于一个调用频率很高的方法,这个优化是值得的,也是有必要的,对于具体的executor id的获取,可以参考我之前写的 spark on yarn如何获得applcationID和executorIdtransform流程序
spoor_gauge_double_10minute_2018_03_17
dashboard
judge
效果展示