azkaban jmx扩展指标梳理

我这里的指标是用Prometheus jmx_exporter导出的,具体如何使用见:https://github.com/prometheus/jmx_exporter

jvm通用的指标这里就不列了,重点梳理一下azkaban扩展的metrics

azkaban-web:

指标含义详细释义
azkaban_jmx_jmxexecutormanager_executormanager_numrunningflows正在运行的flow数对于azkaban-web来说,每个任务对应一个配置的flow,每个flow都可以包含多个job;azkaban-web只负责调度,实际的job执行由azkaban-exec执行
azkaban_jmx_jmxexecutormanager_executormanager_lastsuccessfulexecutorinforefresh最近executorinfo刷新时间azkaban-web会定期调用azkaban-exec接口查询节点最新的状态信息,并保存在内存中,这里是记录最近一次的时间
azkaban_jmx_jmxexecutormanager_executormanager_lastthreadchecktimeexecutormanager检测线程最近更新时间executormanager有一个专门的线程,每隔一段时间(2s或200ms,取决于是否有运行中的executors),执行一次updateExecutions操作。updateExecutions主要流程是调azkaban-exec的api接口,查询运行中flow的信息,并把最新的flow信息缓存在内存中
azkaban_jmx_jmxexecutormanager_executormanager_threadactiveexecutormanager检测线程是否活跃直接调用的Thread.isAlive()方法,用来判断线程是否开始工作,并且没有挂掉
azkaban_jmx_jmxexecutormanager_executormanager_queueprocessoractiveexecutormanager队列处理线程是否活跃直接调用的Thread.isAlive()方法;azkaban-web push模式下,flow的执行流程是:先把flow执行信息放入一个队列中,然后有个队列处理线程从队列中拉取flow信息并调用对应的azkaban-exec的api接口真正提交任务。如果这个队列处理线程出问题,那azkaban就没法进行任务提交了(正常来说这里不应该有问题,但是如果代码哪里没有处理好异常之类的,这个线程挂掉也是有可能的,这时候只能通过重启来解决)
azkaban_jmx_jmxtriggermanager_triggermanager_lastrunnerthreadchecktimetrigger扫描线程最近运行时间首先说一下什么是Trigger,azkaban配置的每个定时任务都是一个Trigger缓存在内存中,任务的执行就是由Trigger来触发的。triggermanager有个扫描线程,默认每隔60s(参数trigger.scan.interval)执行一次,会遍历所有的Trigger,并执行对应的操作(触发定时任务执行、trigger过期移除等)
azkaban_jmx_jmxtriggermanager_triggermanager_numtriggerstrigger数量对应的是页面中配置的定时任务数量
azkaban_jmx_jmxtriggermanager_triggermanager_runnerthreadactivetrigger扫描线程是否活跃直接调用的Thread.isAlive()方法
azkaban_jmx_jmxtriggermanager_triggermanager_scanneridletimetrigger扫描线程空闲等待时间scanneridletime = scannerInterval(默认60s) - (当前时间-lastRunnerThreadCheckTime)扫描线程每次执行完扫描处理逻辑,会按这个公式计算应该wait多长时间,通过这个保证没两次执行之间的间隔为scanneridletime(60s)

azkaban-exec:

指标含义详细释义
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_numrunningflows正在运行的flow数量azkaban一个flow由多个job组成,一般从人的角度来说,习惯把一个flow叫做一个任务,但是从azkaban-exec角度来说,job才是实际执行的“任务”
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_totalnumexecutedflows执行的总flow数量通过总数,可以计算过去某段时间的执行flow数
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_numrunningjobs正在运行的job数量
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_totalnumexecutedjobs执行的总job数量通过总数,可以计算过去某段时间的执行job数
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_totalsucceededjobs执行成功的job总数
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_totalsucceededjobsbyjobtype执行成功的job总数(按job类型过滤),类型有javaprocess、commandjob的jobType有多种,我们用的主要是java进程和执行shell命令(主要是这种).关于jobType的介绍:https://azkaban.readthedocs.io/en/latest/jobTypes.html
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_totalfailedjobs运行失败的总的job数
azkaban_execapp_jmx_jmxjobmbeanmanager_jobjmxmbean_totalfailedjobsbyjobtype运行失败的job总数(按job类型过滤),类型有javaprocess、command
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_executorthreadpoolshutdownflowrunner线程池是否关闭,1:关闭,0:未关闭azkaban-exec执行flow是通过线程池来提交任务执行的,如果线程池异常关闭,就会导致无法提交任务
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_maxnumrunningflows最大同时执行flow数量其实就是线程池最大线程数(等于核心线程数
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_numqueuedflowsflowrunner线程池队列中当前的flow数如果队列中的flow较多,可能是azkaban-exec的负载较高,导致任务堆积在队列中
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_maxqueuedflowsflowrunner线程池队列大小默认使用的无界队列,这种情况下这个值没有意义,返回-1;要配置executor.use.bounded.threadpool.queue=true,才会使用有界队列,这时可以通过executor.threadpool.workqueue.size配置来调整队列的大小,没有配置则默认等于线程池核心线程数(30)
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_lastcleanerthreadchecktimeflowrunner manager清理线程最近执行时间flowrunner有一个清理线程,每分钟执行一次,执行逻辑主要有两个:1、每2分钟触发一次清理最近完成flow操作,从最近完成的flow map中移除flow信息。flow完成的时候,会把这个flow缓存到一个Map中,之所以要缓存,是因为azkaban会定时来查询flow信息,对于刚刚完成的flow,要可以查询到,但是这个信息也不能无限期的缓存,至少保留1分钟后进行清理;2、如果有配置flow最大执行时间(azkaban.server.flow.max.running.minutes),则每5分钟触发一次kill执行时间过长的任务;
azkaban_execapp_jmx_jmxflowrunnermanager_flowrunnermanager_cleanerthreadactiveflowrunner manager清理线程是否存活直接调Thread.isAlive()方法
azkaban_execapp_jmx_jmxjobcallback_jobcallbackjmxmbean_numsuccessfuljobcallbacksjob回调http请求成功次数azkaban-exec的job执行有个回调机制,在任务执行成功或失败时,通过回调机制可以调用外部接口来通知任务执行情况。外部接口调用使用的httpclient这个类库的FutureRequestExecutionService.execute()方法,FutureRequestExecutionService内置有一个FutureRequestExecutionMetrics,提供对http请求的指标统计。
zkaban_execapp_jmx_jmxjobcallback_jobcallbackjmxmbean_numfailedjobcallbacksjob回调http请求失败次数
azkaban_execapp_jmx_jmxjobcallback_jobcallbackjmxmbean_numactivejobcallbacksjob回调http请求连接活跃数
azkaban_execapp_jmx_jmxjobcallback_jobcallbackjmxmbean_numjobcallbacksjob回调http请求次数
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值