需求
Flume是个单进程程序,会存在单点故障,所以需要有一个监控机制,发现Flume进程Down掉之后,需要重启。
思路
1. 首先需要有一个配置文件,配置文件中指定你现在需要监控哪些Agent2. 有一个脚本负责读取配置文件中的内容,定时挨个检查Agent对应的进程还在不在,如果发现对应的 进程不在,则记录错误信息,然后告警(发短信或者发邮件) 并尝试重启
开发
1、创建配置文件monlist.conf,指定要监控哪些Agent
example=startExample.sh
第一列指定一个 Agent 的唯一标识,后期需要根据这个标识过滤对应的 Flume 进程,所以一定要保证至少在一台机器上是唯一的,等号后面是一个启动 Flume 进程的脚本,这个脚本和 Agent 的唯一标识是一一对应的,后期如果根据 Agent 标识没有找到对应的进程,那么就需要根据这个脚本启动进程

这个脚本的内容如下:startExample.sh
#!/bin/bash
flume_path=/data/soft/apache-flume-1.9.0-bin
nohup ${flume_path}/bin/flume-ng agent --name a1 --conf ${flume_path}/conf/ --conf-file ${flume_path}/conf/example.conf &
2、写一个脚本来检查进程在不在,不在的话尝试重启,创建脚本 monlist.sh
#!/bin/bash
monlist=`cat monlist.conf`
echo "start check"
for item in ${monlist}
do
# 设置字段分隔符
OLD_IFS=$IFS
IFS="="
# 把一行内容转成多列[数组]
arr=($item)
# 获取等号左边的内容,即“example”
name=${arr[0]}
# 获取等号右边的内容,即“startExample.sh”
script=${arr[1]}
echo "time is:"`date +"%Y-%m-%d %H:%M:%S"`" check "$name
# 统计该flume进程的数量
if [ `jps -m|grep $name | wc -l` -eq 0 ]
then
# 发短信或者邮件告警
echo `date +"%Y-%m-%d %H:%M:%S"`$name "is none"
sh -x ./${script}
fi
done
jps -m|grep xxxxx | wc -l 统计xxxx进程的数量
[root@bigdata1 apache-flume-1.9.0-bin]# jps -m
96656 JobHistoryServer
96147 NodeManager
95751 SecondaryNameNode
95544 DataNode
17897 Jps -m
17290 Application --name a1 --conf-file conf/example.conf
95994 ResourceManager
95375 NameNode
[root@bigdata1 apache-flume-1.9.0-bin]# jps -m|grep example
17290 Application --name a1 --conf-file conf/example.conf
[root@bigdata1 apache-flume-1.9.0-bin]# jps -m|grep example | wc -l
1
[root@bigdata1 apache-flume-1.9.0-bin]# jps -m|grep example222 | wc -l
0
[root@bigdata1 apache-flume-1.9.0-bin]#
测试
上传脚本和配置文件
1、先停掉flume进程
2、执行脚本sh -x monlist.sh
可以看到flume又启动了
加入crontab
这个需要定时执行,所以可以使用 crontab 定时调度。
* * * * * root /bin/bash /data/soft/monlist.sh
