ELK 堆栈中的 Logstash 和 filebeat

Posted

技术标签:

【中文标题】ELK 堆栈中的 Logstash 和 filebeat【英文标题】:Logstash and filebeat in the ELK stack 【发布时间】:2019-08-16 20:14:04 【问题描述】:

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

    据我了解,我们可以为每个运行一个 logstash 管道配置文件 应用程序日志文件。这将是一个正在运行的 logstash 实例 有 20 条并行管道,每条管道都需要自己的 击败港口。请确认这是否正确? 我们可以运行一个 filebeat 实例,还是每个都需要一个 管道/日志文件? 此架构是否可行,或者您是否发现任何主要缺点?

谢谢!

*不同的供应商负责不同的应用程序,他们跨多个不同的操作系统运行,其中许多不会或不能安装像 filebeats 这样的东西。

【问题讨论】:

filebeat 应该在有应用程序日志的同一台服务器上,并且您可以将一个 filebeat 配置为读取多个文件 感谢您的回复,但就我而言,无法在运行应用程序的服务器上安装 filebeat。相反,文件将从 ELK 服务器读取。您能否分享有关文件节拍和许多日志的文档的链接? 检查我的答案 【参考方案1】:

我们不建议从网络卷中读取日志文件。每当 可能,在主机上安装 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  

    

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

【讨论】:

感谢您的反馈和链接。 1.如果我不允许在目标机器上安装 filebeat,你建议什么替代方案? 2. 由于我正在阅读看起来非常不同的日志文件,我的印象是我需要将它们发送到不同的 logstash 管道以进行非常不同的 grok 解析,因此它需要不同的 filebeat.outputs 但就我而言这是不允许的理解。我理解错了吗? @user1329339 对于第 1 点我现在没有建议,对于每个输入部分的第 2 点,您可以拥有例如 tags: ["App01"] 并在 logstash 中使用 if 语句来检查标签并做不同的 grok解析 @user1329339 我已经更新了我的答案以获取更多详细信息 再次感谢您的反馈。不幸的是,我无法在不同的服务器上安装 filebeats。是否可以使用 logstash 文件作为输入而不是 beats 并且对于不同的管道有不同的路径? @user1329339 检查此链接以获取logstash 文件elastic.co/guide/en/logstash/current/…,通常您将如何访问当前不同服务器的日志?

以上是关于ELK 堆栈中的 Logstash 和 filebeat的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 nsq 作为 ELK 堆栈的代理(ElasticSearch+LogStash+Kibana)

ini 使用ELK堆栈(Elasticsearch + Logstash + Kibana)进行脱机SSHD日志分析

在 ELK 堆栈中调试 Filebeat

Logstash/Kibana GeoIP 不工作

ELK(elasticsearch, logstash, kibana, filbeat for agent) 土耳其语字符问题

Django 服务器不向 Logstash 发送日志