现在我正在一个项目中,我们正在尝试使用flume读取tomcat访问日志并在saprk中处理这些数据并以适当的格式转储到DB中。但问题是tomcat访问日志文件是每日滚动文件,文件名每天都会变换。有点像......
localhost_access_log.2017-09-19.txt
localhost_access_log.2017-09-18.txt
localhost_access_log.2017-09-17.txt
和源节的我的flume conf文件类似于
# Describe/configure the source
flumePullAgent.sources.nc1.type = exec
flumePullAgent.sources.nc1.command = tail -F /tomcatLog/localhost_access_log.2017-09-17.txt
#flumePullAgent.sources.nc1.selector.type = replicating
哪个是在固定文件名上运行tail命令(我使用固定名称,仅用于测试)。如何将文件名作为flume conf文件中的参数传递。
事实上,如果我能够将文件名作为参数传递,那么它也不是一个实际的解决方案。说,我今天开始使用一些文件名(例如:" localhost_access_log.2017-09-19.txt"),明天我将更改文件名(localhost_access_log.2017-09-19.txt到localhost_access_log.2017-09-20.txt)有人必须停止水槽并重新启动新文件名。在那种情况下,它不会是一个持续的过程,我必须使用cron job或类似的东西停止/启动水槽。另一个问题是我会在处理时间内每天丢失一些数据(我们现在正在使用的服务器是高吞吐量服务器,几乎是700-800 TPS)。(我的意思是生成新文件名所需的时间+时间到停止流感+开始流感的时间)
任何人都知道如何在生产环境中使用翻转文件名运行水槽?任何帮助将受到高度赞赏......
答案 0 :(得分:0)
exec
来源不适合您的任务,您可以使用Spooling Directory Source。来自Flume用户指南:
此源允许您通过将要摄取的文件放入磁盘上的“假脱机”目录来摄取数据。此源将查看新文件的指定目录,并将在新文件出现时解析事件。
然后,在配置文件中,您可以像这样提及您的日志目录:
agent.sources.spooling_src.spoolDir = /tomcatLog