一、需求
监控 Azkaban-web和Azkaban-exec进程状态和 Azkaban 任务执行的状态同步到SQLServer数据库,任务执行 5 分钟同步一次,发现异常就告警。

1.1.Azkaban 任务状态
30--------正在运行
50--------运行成功
60--------kill任务
70--------运行失败
1.2.存储 Azkaban任务状态的表
select exec_id,flow_id,status,FROM_UNIXTIME(start_time/1000) as start_time,FROM_UNIXTIME(end_time/1000) as end_time
from execution_flows where status = 70 or status = 50;

二、脚本编写
2.1.编写table.ini 的数据库配置文件
xxx 是不同的客户不同的数据库 可以读取多个数据库的配置写到不同的SQLServer数据库。

​[pcsprd@client ~]$ cat /hadoop/datadir/script/hadoop/table.ini
[xxx_CONNECT]
url=xxx
port=1433
username=PCS.Support
password=321@win#
dbname=HDP_TEST
customer=xxx_
2.2.任务状态写入SQLServer的shell
set -x
HOSTNAME=“xxx”
USER=“root”
PASSWD=“winner@001”
PORT=“3306”
DBNAME=“azkaban”

function ReadConnect(){
ReadINI=awk -F '=' '/\['$2'\]/{a=1}a==1&&$1~/^'$3'$/{print $2;exit}' $1
}

batchCustomer=xxx_
table_ini=/hadoop/datadir/script/hadoop/table.ini

ReadConnect tableini"table_ini "tablei​ni"{batchCustomer}CONNECT" url
server=$ReadINI
ReadConnect tableini"table_ini "tablei​ni"{batchCustomer}CONNECT" port
port=$ReadINI
ReadConnect tableini"table_ini "tablei​ni"{batchCustomer}CONNECT" dbname
database=$ReadINI
ReadConnect tableini"table_ini "tablei​ni"{batchCustomer}CONNECT" username
user=$ReadINI
ReadConnect tableini"table_ini "tablei​ni"{batchCustomer}CONNECT" password
paw=$ReadINI

azkaban_exec_tmp_file=/hadoop/datadir/temp/monitor/exec_tmp_file.txt
mysql_cmd=“mysql -hHOSTNAME−P{HOSTNAME} -PHOSTNAME−P{PORT} -uUSER−p{USER} -pUSER−p{PASSWD} ${DBNAME} -e”
sqlserver_cmd="/opt/mssql-tools/bin/sqlcmd -S $server -U $user -P $paw -d ${database} -Q "

if [ 0 == $azwebCount ];then

定义了 80 为进程 运行正常,90为进程挂掉

${sqlserver_cmd} “INSERT into task_monitor (flowId,taskId,status,startTime,endTime) VALUES(DATEDIFF(S,‘1970-01-01 00:00:00’, GETDATE()),‘azkban-web-heartbeat’,90,GETDATE(),GETDATE())”
else
${sqlserver_cmd} “INSERT into task_monitor (flowId,taskId,status,startTime,endTime) VALUES(DATEDIFF(S,‘1970-01-01 00:00:00’, GETDATE()),‘azkban-web-heartbeat’,80,GETDATE(),GETDATE())”
fi

#监控azkaban的exe
azexeCount=ps -ef |grep azkaban-exe |grep -v "grep" |wc -l
if [ 0 == $azexeCount ];then
${sqlserver_cmd} “INSERT into task_monitor (flowId,taskId,status,startTime,endTime) VALUES(DATEDIFF(S,‘1970-01-01 00:00:00’, GETDATE()),‘azkban-exec-heartbeat’,90,GETDATE(),GETDATE())”
else
${sqlserver_cmd} “INSERT into task_monitor (flowId,taskId,status,startTime,endTime) VALUES(DATEDIFF(S,‘1970-01-01 00:00:00’, GETDATE()),‘azkban-exec-heartbeat’,80,GETDATE(),GETDATE())”
fi

#查询Azkaban调度中 运行成功和失败的任务
select_exec_sql=“select exec_id,flow_id,status,FROM_UNIXTIME(start_time/1000) as start_time,FROM_UNIXTIME(end_time/1000) as end_time from execution_flows where (FROM_UNIXTIME(start_time/1000)>(select task_lastTime from task_lastTime)) and (status = 70 or status = 50)
into outfile “${azkaban_exec_tmp_file}” fields terminated by “,” ;”

azkaban从临时表抽入正式

task_move_sql=“insert into ${database}.[dbo].[task_monitor] (flowId,taskId,status,startTime,endTime) select flowId,taskId,status,startTime,endTime from ${database}.[dbo].[task_monitor_tmp];”

update_task_lastTime_sql=“UPDATE task_lastTime SET task_lastTime = NOW() WHERE id=1;”

#执行SQL 运行成功和失败的任务 写入文件
rm -rf ${azkaban_exec_tmp_file}
mysqlcmd"{mysql_cmd} "mysqlc​md"{select_exec_sql}"

if [ -f ${azkaban_exec_tmp_file} ];then
${sqlserver_cmd} “truncate table ${database}.[dbo].[task_monitor_tmp]”
/opt/mssql-tools/bin/bcp ${database}.dbo.task_monitor_tmp in azkabanexectmpfile−S{azkaban_exec_tmp_file} -Sazkabane​xect​mpf​ile−S{server} -Uuser−P{user} -Puser−P{paw} -c -t, -r’\n’ -b 1000
sqlservercmd"{sqlserver_cmd} "sqlserverc​md"{task_move_sql}"
else
echo file ${azkaban_exec_tmp_file} not exist!
fi

mysqlcmd"{mysql_cmd} "mysqlc​md"{update_task_lastTime_sql}"

Azkaban 进程和任务监控(任务状态从MySQL同步到SqlServer)相关推荐

  1. Linux实操-网络配置、进程管理、服务管理、动态监控进程、监控网络状态

    网络配置 网络配置原理图 查看网络IP和网关 查看虚拟网络编辑器 修改虚拟网卡ip地址 查看网关 linux网络环境配置 第一种方法(自动获取) 第二种方法(指定固定的 ip) 进程管理(重点) 显示 ...

  2. Linux:动态监控进程+监控网络状态

    1.动态监控进程: 当前时间 系统运行时间 用户数量 负载值(三个值的和/3如果大于0.7,则负载过大:否则负载还行) Tasks:任务数. running是正在运行的任务数 zombie是僵死进程( ...

  3. Windows应用程序进程级别统一监控实践

    一般的系统级别指标监控,更多关注CPU.内存.磁盘.网络等运行情况,对应用程序运行时的进程指标关注不够,导致不能深入了解系统运行状态.本文根据笔者应用实践,探讨一下进程级别监控涉及到的监控内容以及监控 ...

  4. 使用 shell 脚本对 Linux 系统和进程资源进行监控

    Shell 简介 Shell 语言对于接触 LINUX 的人来说都比较熟悉,它是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核去执行.实际上 Shell 是 ...

  5. Linux日常运维管理技巧(一)监控系统状态、监控网卡流量、监控IO性能、查看系统进程、查看网络状态、Linux下抓包tcpdump、Linux网络相关、DNS配置

    目录 监控系统状态 监控网卡流量 监控IO性能 查看系统进程 查看网络状态 Linux下抓包 Linux网络相关 监控系统状态 w/uptime查看系统负载 [root@zyshanlinux-01 ...

  6. zabix监控linux进程名称,Zabbix监控Windows进程重启

    前段时间,一个朋友咨询我怎么监控Windows进程的重启.生产环境有监控进程的启动和关闭,但重启还没想过.经过一番思考和摸索后成功完成了监控,下面把监控思路和方法分享给大家. 我首先想到的是通过Zab ...

  7. Linux监控网络状态

    Linux监控网络状态 查看系统网络情况 netstat netstat [选项] -an 按一定顺序排列输出 -p 显示哪个进程在调用 应用案例 请查看服务名为 sshd 的服务的信息. netst ...

  8. Linux 环境-TiDB组件进程维度的监控实现

    作者: sustyle 原文来源: https://tidb.net/blog/ab175b65 [toc] 一.背景介绍 TiDB运维工作中可能会遇到这么一个痛点,组件太多,机器永远不够.线上机器基 ...

  9. Linux 环境下针对进程维度的监控实现

    一.背景介绍 运维工作中可能会遇到这么一个痛点,因线上机器基本都是单机多实例,有时候会出现因为某个实例而影响了整个机器的性能.因缺少进程级别的监控,事后想分析是哪个实例跑满了系统资源往往比较困难.为了 ...

最新文章

  1. Ubuntu 安装 搜狗输入法
  2. Beej网络编程指南《三》
  3. 数据仓库之 ETL漫谈
  4. 绿联怎么样_移动电源降价了,小米、京选、绿联充电宝怎么选,网友:都非常合适...
  5. java按字节截取字符串牛客网_字符串计数
  6. mysql unable to find_centos8.2安装mysql8.0时报错Error:Unable to find a match: mysql-community-server...
  7. 长城守卫 Beijing guards CERC 2004 LA3177 解题总结
  8. mongodb 全文搜索---ttlsa教程系列之mongodb(十)
  9. PAT (Basic Level) Practice1009 说反话
  10. HTML5 前端原生 WebSocket 通信
  11. [AX]AX2012 AIF(五):使用文档服务更新数据
  12. 甲骨文解雇Java相关人员 Oracle cuts Java execs
  13. 使用 ssh-keygen访问服务器
  14. Vue电商网站项目开发总结
  15. 和我一起学Python
  16. java 文件上传乱码_java上传txt文件,出现中文乱码
  17. 如何在html页面中左尖括号,想要在HTML中显示一个尖括号“
  18. ZZULIOJ1194: 总成绩排序(结构体专题)
  19. 双色球,抽奖是否中奖
  20. 工作半年后的一点感悟

热门文章

  1. Linux系统常用命令备忘
  2. xml报错:xml.etree.ElementTree.ParseError: not well-formed (invalid token)
  3. linux创建django项目,Ubuntu 16.04下配置Django项目
  4. python怎么另起一行阅读答案_使用Python+Dlib构建人脸识别系统(在Nvidia Jetson Nano 2GB开发板上)...
  5. wepyjs小程序组件调用pages页面的方法
  6. note_pom.xml文件配置说明_note
  7. 计算机专业评副高论文要求,护士晋升副高职称论文要求
  8. python 把txt变成字符串_如何通过 Python 如何写文件 ?
  9. exif.js html图片旋转,解决图片显示 Exif.js更改图片的显示方向
  10. shell脚本面试题