【问题标题】:How to watch or read new log files with Logstash?如何使用 Logstash 观看或读取新的日志文件?
【发布时间】:2016-12-26 03:21:45
【问题描述】:

编辑:尝试查看 Magento 报告日志。每次发生异常时,Magento 都会将其崩溃报告写入一个新文件。

根据Logstash官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html 选项 dicover_interval 的意思是“我们多久(以秒为单位)扩展路径选项中的文件名模式以发现要观看的新文件。”

问题:我有一个系统,每次发生新异常时都会将其日志写入新文件(文件名是异常编号)。但是,Logstash 在启动时会开始查看现有文件,但我无法让 Logstash 读取新文件。

我的配置文件:

    input {
      file {
        type => "error-report-log"
        path => "/srv/www/var/report"
        #start_position => "beginning"
        ignore_older => 30
        close_older => 30
        discover_interval => 5
        codec => multiline {
            pattern => "."
            what => "previous"
        }
    }
}

如您所见,我尝试了 discover_interval,但没有成功。新文件没有被观看。

是我遗漏了什么还是 Logstash 根本不支持这种行为?

提前致谢。

【问题讨论】:

    标签: logging logstash elastic-stack logstash-configuration


    【解决方案1】:

    我猜你错过了file 中的sincedb_path。如果您有这样的意见怎么办:

    input {
      file {
        type => "error-report-log"
        path => "/srv/www/var/report"
        sincedb_path => "/dev/null"   <-- add this line
        start_position => "beginning" <-- uncomment this
        ignore_older => 0             <-- change it to zero
        codec => multiline {
            pattern => "."
            what => "previous"
        }
    }
    

    一旦你拥有它,logstash 应该会选择任何正在添加的新行或新文件。

    【讨论】:

    • 谢谢@Darth_Vader。您已经接近,但只有在重新启动 logstash 时才能读取新文件。我还尝试了 discover_interval => 1 ignore_older => 0/1 没有运气,logstash 肯定不会拾取新文件,除非你重新启动它。有什么想法吗?
    • 所以您的意思是,当logstash 启动并运行时,当您在文件路径中添加新文件时,它不会被拾取?你确定你给你的文件路径而不是文件名提供了一个模式,以便它可以读取新文件?
    • 正确。它没有拾取或观看新文件,logstash 正在运行。尝试了版本 5 和 5.1。我确定我指定了一条路径。我尝试了以下路径: /srv/www/var/report 和 /srv/www/var/report/* 。有什么问题?
    • /srv/www/var/report/* 表示所有新添加的文件都应该在路径中被拾取。
    【解决方案2】:

    解决方案:使用 Filebeat 并通过 Logstash 传递日志是一种更好的方法:

    filebeat:
      prospectors:
        -
          input_type: log
          scan_frequency: 5s
          paths:
            - /srv/www/var/report/*
          fields:
            app_id: "${APP_ID}"
            type: error-report-log
          multiline:
            pattern: '^\$'
            negate: true
            match: after
    output:
      logstash:
        enabled: true
        hosts: ["my.logstash.com:5044"]
    
    

    此解决方案已使用 Magento 2 进行测试。

    Magento 2 每次都会将其异常/崩溃报告写入一个新文件。

    【讨论】:

      【解决方案3】:

      感谢@kaßta 提供模板!

      我对其进行了一些改进,因此文件不会被ignore_olderscan_frequency 一次又一次地拾取。 close_eof 也将处理资源保持在最低限度。

      filebeat.prospectors:
        - input_type: log
          close_eof: true
          ignore_older: 1m
          scan_frequency: 1m
          paths:
            - "/srv/www/var/report/*"
          fields:
            project: shop
            app: magento
            env: development
          multiline:
            pattern: '^\$'
            negate: true
            match: after
      
      output.logstash:
        hosts: ['logstash:5044']
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-11-20
        • 2016-12-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多