Shell脚本监控Flink作业状态指标

最基础的指标为作业状态相关的,如作业是否出故障,作业是否存活,作业是否稳定运行

监控flink作业的需求

1
2
3
4
原因: flink作业运行至yarn上,可以直接在yarn的Resource Manager上进行查看该作业是否因为某些原因强制退出以及containers是否大于等于2
(发现只有一个container的作业都有问题,需要报警进行查看原因)

解决方案:使用shell监控yarn上的flink相关脚本

shell脚本相关内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#!/bin/sh
#获取flink作业在yarn上的名称
nameIds=(`yarn application -list -appStates RUNNING|sed -n "3~1p" |awk -F "\t" '{print $1"|" $2}'|sed -e 's/[[:space:]]//g'`)

#获取需要监控的flink名称
arr=(`cat ./name|sed -e 's/[[:space:]]//g'`)
#cd /home/etiantian/common-jars
jarName='send-mail.jar'

base=`pwd`
dt=`date "+%Y-%m-%d_%H:%M:%S"`
echo $dt
echo $base
log="./"$dt".stop"
for i in ${arr[@]}
do
isExist="false"
flag="true"
for j in ${nameIds[@]}
do
nameId=(${j//\|/ })
if [ "$i" = "${nameId[1]}" ]
then
isExist="true"
attempt=(`yarn applicationattempt -list ${nameId[0]}|sed -n "3~1p" |awk -F "\t" '{print $1}'`)
#判断该作业对应containers是否大于2处于正常状态
container=`yarn container -list ${attempt[0]}|grep "Total number of containers"|awk -F ":" '{print $2}'`
if [ $container -lt 2 ]
then
flag="false"
fi
fi
done
if [ "$flag" != "true" ] || [ "$isExist" != "true" ]
#if [ "$flag" == "true" ] && [ "$isExist" == "true" ]
then
echo $i >> $log
fi
done
#对有问题的flink作业报警告处理
if [ -e $log ]
then
z=`cat $log|xargs echo|sed -e 's/ /,/g'`
#z=`cat $log`
echo $z
java -jar $BASE/$jarName $BASE/$config $z
#cd $base && java -jar $BASE/$jarName $BASE/$config $z
rm -rf $log
fi