1、解决的痛点
各种原因导致的Azkaban任务运行假死,无法正常跑任务的情况。
2、解决方案
通过调用Azkaban API接口,获取project flow的startTime时间,通过程序进行相减,得出的值超过报警阀值进行报警。
API调用示例:
1、获取用户身份的session.id,有效时间24小时
bogon:~ kang$ curl -k -X POST --data "action=login&username=bigdata&password=123456" http://azkaban.fblinux.com { "status" : "success", "session.id" : "123456" }
2、获取一个项目所有的流(如project仅有一个流,可以直接进行第三步的调用)
kangdeMacBook-Pro:~ kang$ curl -k --get --data "session.id=123456&ajax=fetchprojectflows&project=project_name" http://azkaban.fblinux.com/manager { "project" : "project_name", "projectId" : 865, "flows" : [ { "flowId" : "flow_name" } ]
3、获取流的执行状态和开始执行时间(开始时间为毫秒级时间戳)
localhost:~ kang$ curl -k --get --data "session.id=123456&ajax=fetchFlowExecutions&project=project_name&flow=flow_name&start=0&length=1" http://azkaban.fblinux.com/manager { "executions" : [ { "startTime" : 1587093202373, 通过这个时间戳进行任务运行时间的判断 "submitUser" : "bigdata", "status" : "RUNNING", "submitTime" : 1587093202237, "execId" : 41335, "projectId" : 865, "endTime" : -1, "flowId" : "examStat" } ], "total" : 81, "project" : "project_name", "length" : 1, "from" : 0, "flow" : "flow_name", "projectId" : 865
Azkaban API文档参考:https://azkaban.readthedocs.io/en/latest/ajaxApi.html#fetch-executions-of-a-flow
3、监控实现
根据api调用方式编写的监控脚本如下,可以直接放入zabbix监控中,只需要传入project_name和flow_name 即可
#!/bin/bash project=$1 flow=$2 azkaban_host="" username="" password="" timestamp=`date +%s` session_id=`curl -sk -X POST --data "action=login&username=$username&password=$password" $azkaban_host|grep session|awk -F'"' '{print $4}'` result=`curl -sk --get --data "session.id=$session_id&ajax=fetchFlowExecutions&project=$project&flow=$flow&start=0&length=1" $azkaban_host/manager` startTime=$((`echo $result|jq -r ".executions[].startTime"`/1000)) endTime=$((`echo $result|jq -r ".executions[].endTime"`/1000)) status=`echo $result|jq -r ".executions[].status"` if [ $status == "RUNNING" ] then echo $timestamp-$startTime|bc elif [ $status == "SUCCEEDED" ] then echo $endTime-$startTime|bc else echo 0 fi
转载请注明:西门飞冰的博客 » Azkaban 任务运行时长监控