由于blog各种垃圾评论太多,而且本人审核评论周期较长,所以懒得管理评论了,就把评论功能关闭,有问题可以直接qq骚扰我

Azkaban 任务运行时长监控

大数据 西门飞冰 3638℃

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 任务运行时长监控

喜欢 (25)or分享 (0)