【问题标题】:Ship only a percentage of logs to logstash仅将一定比例的日志发送到 logstash
【发布时间】:2017-08-01 09:24:17
【问题描述】:

如何将 filebeat 配置为仅将一定比例的日志(如果您愿意,可以提供一个示例)发送到 logstash?

在我的应用程序的日志文件夹中,日志被分块到每个大约 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或其他产品到这个吗?

【问题讨论】:

  • 是的,NXLog 可以做到这一点,而且占用空间小。您可以根据各种条件(例如 regex )进行过滤和 drop()。
  • 嗯正则表达式?不确定这是否可行,我不想过滤掉消息类型我只想发送一定百分比的相同类型的消息。

标签: elasticsearch logstash elastic-stack filebeat nxlog


【解决方案1】:

据我所知,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,但它可以是任何东西)。完全过滤将在管道中进行。

【讨论】:

  • 我认为 logstash 的日志传送版本已被弃用。
  • @red888 是的,但是 Logstash 本身可以配置为发货。它不像 FIleBeat 那样占用空间小,但它可以完成工作。我们就是这样做的。
【解决方案2】:

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

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

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

所有 Beats 都有 "processors",可让您根据条件应用操作。一种操作是drop_events,条件是regexpcontainsequalsrange

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

【讨论】:

  • 好吧,我并不是要过滤掉特定的行,我想要的行会很大,所以我只想发送一个百分比。我可以对 drop_event 做一些事情吗?
  • 我可以:设置一个带有时间戳的变量。如果当前时间 ( 时间戳 + 5 分钟 ) 在当前时间 == (当前时间 + 30 分钟) 之前不要发送日志。然后再次设置时间戳变量并重新开始。这样的事情可能吗?
猜你喜欢
  • 1970-01-01
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
相关资源
最近更新 更多