【问题标题】:How to add host name for beats input in logstash如何在logstash中为beats输入添加主机名
【发布时间】:2020-10-06 00:33:58
【问题描述】:

让我解释一下我现有的结构,我有 4 台服务器(Web 服务器、API 服务器、数据库服务器、SSIS 服务器)并在所有四台服务器中安装了 filebeat 和 winlog,从那里我在我的 logstash 中获取所有日志,但是在这里是我在消息正文中收到的每条日志的内容,对于某些消息,我很难编写正确的 GROK 模式,无论如何我可以从 Kibana 获取模式(仅供参考,我现在将所有日志存储在 elasticsearch 中,我可以看穿 Kibana。)

我的 Logstash 配置看起来像 -

1. Api-Pipeline
input {
  beats {
    host => "IP Address where my filebeat (API Server) is running"
    port => 5044
  }
}

2. DB Pipeline
input {
      beats {
        host => "IP Address where my filebeat (Database Server) is running"
        port => 5044
      }
    }

当我只使用端口时它正在工作,而当我添加主机时它停止工作。谁能帮帮我。

下面我正在努力实现

我在这里进行了更改,它是否有效,因为我需要编写冗长的过滤器,这就是我想在单独的文件中拥有的原因

Filebeat.yml on API Server
-----------------------------------------------------------------------------------------
filebeat.inputs:
- type: log
  source: 'ApiServerName' // MyAPIServerName(Same Server Where I have installed filebeat)
  enabled: true
  paths:
    - C:\Windows\System32\LogFiles\SMTPSVC1\*.log
    - E:\AppLogs\*.json

scan_frequency: 10s
ignore_older: 24h

filebeat.config.modules:
  path: C:\Program Files\Filebeat\modules.d\iis.yml
  reload.enabled: false

setup.template.settings:
  index.number_of_shards: 3

setup.kibana:
  host: "kibanaServerName:5601"

output.logstash:
  hosts: ["logstashServerName:5044"]



Logstash Configuration
----------------------------------------------------------------
Pipeline.yml

- pipeline.id: beats-server
  config.string: |
    input { beats { port => 5044 } }
    output {
        if [source] == 'APISERVERNAME' {
          pipeline { send_to => apilog }
        } else if [source] == 'DBSERVERNAME' {
          pipeline { send_to => dblog }
        }
        else{
          pipeline { send_to => defaultlog }
        }
    }

- pipeline.id: apilog-processing
  path.config: "/Logstash/config/pipelines/apilogpipeline.conf"

- pipeline.id: dblog-processing
  path.config: "/Logstash/config/pipelines/dblogpipeline.conf"

- pipeline.id: defaultlog-processing
  path.config: "/Logstash/config/pipelines/defaultlogpipeline.conf"



1. apilogpipeline.conf
----------------------------------------------------------
input { 
    pipeline { 
        address => apilog 
    } 
}
output {
    file {
        path => ["C:/Logs/apilog_%{+yyyy_MM_dd}.log"]
    }
}



2. dbilogpipeline.conf
---------------------------------------------------------
input { 
    pipeline { 
        address => dblog 
    } 
}
output {
    file {
        path => ["C:/Logs/dblog_%{+yyyy_MM_dd}.log"]
    }
}


3. defaultlogpipeline.conf
---------------------------------------------------------
input { 
    pipeline { 
        address => defaultlog 
    } 
}
output {
    file {
        path => ["C:/Logs/defaultlog_%{+yyyy_MM_dd}.log"]
    }
} 

【问题讨论】:

    标签: elasticsearch logstash kibana filebeat


    【解决方案1】:

    反之亦然,即不是 Logstash 连接到 Filebeat,而是 Filebeat 将数据发送到 Logstash。因此,在您的输入部分中,主机需要是运行 Logstash 的主机的名称。

    beats {
      host => "logstash-host"
      port => 5044
    }
    

    然后在你的 Filebeat 配置中,你需要像这样配置Logstash output

    output.logstash:
      hosts: ["logstash-host:5044"]
    

    由于您有多个 Filebeat 源并希望对每个源应用专用管道,您可以做的是在每个 Filebeat 配置(例如 source: dbsource: api-server 等)中定义一个 custom field or tag,然后在 Logstash 中您可以根据这些值应用不同的逻辑。

    filebeat.inputs:
    - type: log
      fields:
        source: 'APISERVERNAME'
      fields_under_root: true
    

    在 Logstash 中,您可以利用 conditionalspipeline to pipeline communication 来根据事件数据应用不同的逻辑。

    在最新链接上,您可以看到distributor pattern 的示例,这几乎就是您所追求的。

    【讨论】:

    • 感谢您的回复,但在这种情况下,我将如何运行多个管道?我想介绍基于输入类型、dbPipeline、appserver 管道和 Web 服务器管道的多个管道。有可能吗,或者我已经在单个管道中配置了。
    • 请看我发的图片
    • 再次感谢您的回复,我在那里做了一些更改,如果可能的话,您能看看我是否做得对。我仍在等待日志的可用性。
    • 对系统日志稍作改动,但它确实有效,谢谢 Man
    • 太棒了,很高兴它有帮助!
    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2022-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多