如何使用Logstash观看或阅读新的日志文件?

时间:2016-12-26 03:21:46

标签: logging logstash elastic-stack logstash-configuration

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

根据Logstash官方文档:https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html 选项dicover_interval表示"我们在路径选项中扩展文件名模式的频率(以秒为单位),以发现要观看的新文件。"

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

我的conf文件:

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根本不支持这种行为吗?

提前致谢。

3 个答案:

答案 0 :(得分: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应该选择正在添加的任何新行或新文件。

答案 1 :(得分:0)

解决方案:使用 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每次都将其异常/崩溃报告写入新文件。

答案 2 :(得分:0)

感谢@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']