仅将一定百分比的日志发送到logstash

时间:2017-03-10 22:01:57

标签: elasticsearch logstash elastic-stack filebeat nxlog

如何配置filebeat只发送一定百分比的日志(如果你愿意,可以提供样本)来登录?

在我的应用程序的日志文件夹中,日志被分块到每个大约20兆。我希望filebeat只发送该日志卷的1/300到logstash。

我需要在通过线路将其发送到logstash之前削减日志卷,因此我无法从logstash进行此过滤,它需要在端点离开服务器之前发生。

我在ES论坛上问了这个问题,有人说用filebeat是不可能的:https://discuss.elastic.co/t/ship-only-a-percentage-of-logs-to-logstash/77393/2

我真的无法扩展filebeat来做到这一点吗?可以nxlog或其他产品吗?

2 个答案:

答案 0 :(得分:2)

据我所知,FileBeat无法做到这一点。但可以使用Logstash执行此操作。

filter {
  drop {
    percentage => 99.7
  }
}

这可能是一个用例,您可以在服务器上使用Logstash,而不是FileBeat。

input {
  file {
    path => "/var/log/hugelogs/*.log"
    add_tags => [ 'sampled' ]
  }
}

filter {
  drop {
    percentage => 99.7
  }
}

output {
  tcp {
    host =>  'logstash.prod.internal'
    port =>  '3390'
  }
}

这意味着在您的服务器上安装Logstash。但是,您可以尽可能少地配置它。只需一个输入,足够的过滤器来获得您想要的效果,以及单个输出(在这种情况下为Tcp,但它可以是任何东西)。完全过滤将在管道中发生。

答案 1 :(得分:1)

没有办法配置Filebeat根据概率丢弃任意事件。但Filebeat确实能够根据条件丢弃事件。有两种过滤事件的方法。

Filebeat可以在读取文件时指定要包含或排除的行。这是应用过滤的最有效的地方,因为它发生得很早。这是使用配置文件中的include_linesexclude_lines完成的。

filebeat.prospectors:
- paths:
  - /var/log/myapp/*.log
  exclude_lines: ['^DEBUG']

所有节拍都有"processors",允许您根据条件应用操作。一项操作为drop_events,条件为regexpcontainsequalsrange

processors:
- drop_event:
    when:
      regexp:
        message: '^DEBUG'