ELK堆栈中的Logstash和Filebeat

时间:2019-03-26 12:31:24

标签: elasticsearch logstash filebeat

我们正在服务器上设置elasticsearch,kibana,logstash和filebeat,以分析来自许多应用程序的日志文件。由于某些原因*,每个应用程序日志文件最终都位于ELK服务器上的单独目录中。我们大约有20个日志文件。

  1. 据我了解,我们可以为每个运行logstash管道配置文件 应用程序日志文件。那将是一个运行的logstash实例 有20条并行的管道,每个管道将需要自己的管道 击败港口。请确认这是正确的吗?
  2. 我们是否可以运行一个filebeat实例,还是每个实例都需要一个 管道/日志文件?
  3. 这种体系结构还可以吗?或者您看到主要的缺点吗?

谢谢!

*有不同的供应商负责不同的应用程序,它们在许多不同的操作系统上运行,并且其中许多将不会或无法安装文件拍子。

1 个答案:

答案 0 :(得分:0)

  

我们不建议从网络卷中读取日志文件。每当   可能的话,在主机上安装Filebeat并发送日志文件   直接从那里。从网络卷读取文件(尤其是在   Windows)可能会产生意想不到的副作用。例如,更改的文件   标识符可能导致Filebeat从头读取日志文件   再次。

Reference

  

我们始终建议在远程服务器上安装Filebeat。使用   不支持共享文件夹。典型的设置是您有一个   Logstash + Elasticsearch + Kibana放在一个中央位置(一个或多个)   服务器)和Filebeat安装在您的远程计算机上   正在收集数据。

Reference

对于一个正在运行的filebeat实例,您可以通过定义多个输入节来将不同的配置设置应用于不同的文件,如下例check here for more

filebeat.inputs:

- type: log

  enabled: true
  paths:
    - 'C:\App01_Logs\log.txt'
  tags: ["App01"]
  fields: 
    app_name: App01

- type: log
  enabled: true
  paths:
    - 'C:\App02_Logs\log.txt'
  tags: ["App02"]
  fields: 
    app_name: App02

- type: log
  enabled: true
  paths:
    - 'C:\App03_Logs\log.txt'
  tags: ["App03"]
  fields: 
    app_name: App03

而且您可以在过滤器中使用if语句创建一个logstash管道

filter {

    if [fields][app_name] == "App01" {

      grok { }

    } else if [fields][app_name] == "App02" {

      grok { }

    } else {

      grok { }

    }
}

当我们从filebeat发送时,条件也可以是if "App02" in [tags]if [source]=="C:\App01_Logs\log.txt"