【问题标题】:How to set log filename in flume如何在flume中设置日志文件名
【发布时间】:2015-06-30 10:10:56
【问题描述】:

我正在使用 Apache Flume 进行日志收集。这是我的配置文件

httpagent.sources = http-source
httpagent.sinks = local-file-sink
httpagent.channels = ch3

#Define source properties 

httpagent.sources.http-source.type = org.apache.flume.source.http.HTTPSource
httpagent.sources.http-source.channels = ch3
httpagent.sources.http-source.port = 8082


# Local File Sink

httpagent.sinks.local-file-sink.type = file_roll
httpagent.sinks.local-file-sink.channel = ch3
httpagent.sinks.local-file-sink.sink.directory = /home/avinash/log_dir
httpagent.sinks.local-file-sink.sink.rollInterval = 21600

# Channels

httpagent.channels.ch3.type = memory
httpagent.channels.ch3.capacity = 1000

我的应用程序运行良好。我的问题是在 log_dir 中文件默认使用一些随机数(我猜它的时间戳)时间戳。

如何为日志文件提供正确的文件名后缀?

【问题讨论】:

  • 您能否提供生成的示例日志文件名以及 conf/log4j.properties 文件的内容?

标签: apache logging flume flume-ng flume-twitter


【解决方案1】:

查看documentation 似乎没有用于配置将要创建的文件的名称的参数。我已经到sources 寻找一些 hidden 参数,但没有一个:)

进入实现细节,文件名似乎由PathManager类管理:

private PathManager pathController;
...
@Override
public Status process() throws EventDeliveryException {
    ...
    if (outputStream == null) {
        File currentFile = pathController.getCurrentFile();
        logger.debug("Opening output stream for file {}", currentFile);
        try {
            outputStream = new BufferedOutputStream(new FileOutputStream(currentFile));
    ...
}

正如您已经注意到的,它基于当前时间戳(显示构造函数和下一个文件获取器):

public PathManager() {
    seriesTimestamp = System.currentTimeMillis();
    fileIndex = new AtomicInteger();
}

public File nextFile() {
    currentFile = new File(baseDirectory, seriesTimestamp + "-" + fileIndex.incrementAndGet());
    return currentFile;
}

所以,我认为您唯一的可能性是扩展 File Roll 接收器并覆盖 process() 方法以使用自定义路径控制器。

【讨论】:

  • 谢谢frb。我会调查的。
【解决方案2】:

对于源代码,您可以根据 shell 脚本执行命令来尾随和预先添加或附加详细信息。下面是一个示例:

# Describe/configure the source for tailing file
 httpagent.sources.source.type = exec
 httpagent.sources.source.shell = /bin/bash -c
 httpagent.sources.source.command = tail -F /path/logs/*_details.log
 httpagent.sources.source.restart = true
 httpagent.sources.source.restartThrottle = 1000
 httpagent.sources.source.logStdErr = true

【讨论】:

    猜你喜欢
    • 2015-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 2014-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多