返回 导航

大数据

hangge.com

Flume日志采集工具使用详解13(通过进程监控实现Agent自动重启修复)

作者:hangge | 2024-03-26 08:50
    FlumeAgent 服务是一个独立的进程。如果该采集进程因故障而退出,或者被误操作关闭,这将对数据收集和传输产生重大影响。为确保系统的稳定性和数据完整性,我们可以考虑引入自动恢复机制,使 Flume Agent 能够在意外退出后自动重新启动。下面我将通过样例进行演示。

十三、通过进程监控实现 Agent 自动重启修复

1,实现思路

(1)首先需要有一个配置文件,配置文件中指定我们现在需要监控哪些 Agent
(2)接着有一个脚本负责读取配置文件中的内容,定时挨个检查 Agent 对应的进程还在不在,如果发现对应的进程不在,则记录错误信息,然后告警(发短信或者发邮件)并尝试重启。

2,创建脚本

(1)首先创建一个文件 monlist.conf
mkdir -p /data/soft/
vi /data/soft/monlist.conf
  • 文件内容如下:
    • 文件中的第一列指定一个 Agent 的唯一标识,后期需要根据这个标识过滤对应的 Flume 进程,所以一定要保证至少在一台机器上是唯一的。这里建议使用 Flume 任务配置文件的文件名。
    • 等号后面是一个启动 Flume 进程的脚本,这个脚本和 Agent 的唯一标识是一一对应的,后期如果根据 Agent 标识没有找到对应的进程,那么就需要根据这个脚本启动进程
example=startExample.sh

(2)接着创建该文件里指定的脚本文件 startExample.sh
vi /data/soft/startExample.sh
  • 脚本内容如下:
#!/bin/bash
flume_path=/root/apache-flume-1.11.0-bin
nohup ${flume_path}/bin/flume-ng agent --name a1 --conf ${flume_path}/conf/ --conf-file ${flume_path}/conf/example.conf &

(3)最后创建一个脚本 monlist.sh 来检查进程在不在,不在的话尝试重启:
vi /data/soft/monlist.sh
  • 脚本内容如下:
#!/bin/bash
#进入脚本目录 
MON_DIR="/data/soft/"
cd $MON_DIR
monlist=`cat monlist.conf`
echo "start check"
for item in ${monlist}
do
	# 设置字段分隔符
	OLD_IFS=$IFS
	IFS="="
	# 把一行内容转成多列[数组]
	arr=($item)
	# 获取等号左边的内容
	name=${arr[0]}
	# 获取等号右边的内容
	script=${arr[1]}
	
	echo "time is:"`date +"%Y-%m-%d %H:%M:%S"`" check "$name
	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
  • 保存后给该脚本设置权限:
chmod 777  /data/soft/monlist.sh

3,创建定时任务

(1)我们这里使用 crontab 定时调度来定时执行检测脚本。首先,我们使用以下命令编辑 crontab
crontab -e

(2)这里我设置的是监测脚本每 1 分钟执行一次。同时我们还将脚本里面的打印信息输出到 log 文件中,方便后续的问题排查。
* * * * * /bin/bash /data/soft/monlist.sh >> /data/soft/monlist.log 2>&1

(3)保存后退出,执行 crontab -l 命令可以查看 crontab 服务是否创建成功: 

4,使用测试

(1)等待一会后,我们的 Agent 进程就会自动启动:

(2)将该进程杀死后,稍等一分钟,可以发现这个 Agent 又能自动启动了:

附:同一台服务器多个 Agent 自动重启样例

(1)有时我们在一台服务器上不止有 1 Agent,如果有多个 Agent 需要自动重启的话,首先修改 monlist.conf 文件:
vi /data/soft/monlist.conf
example=startExample.sh
mytask=startMytask.sh

(2)然后创建新 Agent 的脚本文件 startMytask.sh 即可:
vi /data/soft/startMytask.sh
#!/bin/bash
flume_path=/root/apache-flume-1.11.0-bin
nohup ${flume_path}/bin/flume-ng agent --name a1 --conf ${flume_path}/conf-mytask/ --conf-file ${flume_path}/conf-mytask/mytask.conf &
评论

全部评论(0)

回到顶部