【问题标题】:Facing Issue while sending data from Filebeats to Multiple Logstash files将数据从 Filebeats 发送到多个 Logstash 文件时面临的问题
【发布时间】:2017-06-14 13:09:34
【问题描述】:

准确地说,我正在处理一个包含数百万条记录的日志文件。由于它是账单摘要日志,因此客户信息将不按特定顺序记录。
我正在使用customized GROK Patternslogstash XML filter plugin 来提取足以跟踪的数据。为了跟踪个人客户活动,我使用“Customer_ID”作为唯一键。因此,即使我使用多个 Logstash 文件和多个 GROK 模式,他的所有信息都可以使用他的“Customer_ID”(唯一键)进行绑定/聚合

这是我的日志文件示例,
7-04-2017 08:49:41 INFO abcinfo (ABC_RemoteONUS_Processor.java52) - Customer_Entry :::<?xml version="1.0" encoding="UTF-8"?><ns2:ReqListAccount xmlns:ns2="http://vcb.org/abc/schema/"/"><Head msgId="1ABCDEFegAQtQOSuJTEs3u" orgId="ABC" ts="2017-04-27T08:49:51+05:30" ver="1.0"/><Cust id="ABCDVFR233cd662a74a229002159220ce762c" note="Account CUST Listing" refId="DCVD849512576821682" refUrl="http://www.ABC.org.in/" ts="2017-04-27T08:49:51+05:30"

我的 Grok 模式,

grok {
patterns_dir => "D:\elk\logstash-5.2.1\vendor\bundle\jruby\1.9\gems\logstash-patterns-core-4.0.2\patterns"
match => [ "message" , "%{DATESTAMP:datestamp} %{LOGLEVEL:Logseverity}\s+%{WORD:ModuleInfo} \(%{NOTSPACE:JavaClass}\)%{ABC:Customer_Init}%{GREEDYDATA:Cust}"]add_field => { "Details" => "Request" }remove_tag => ["_grokparsefailure"]}  

我的自定义模式,存储在 Pattern_dir 中,

ABC ( - Customer_Entry :::)

我的 XML 过滤器插件,

xml {
source => "Cust"
store_xml =>false
xpath => [
  "//Head/@ts", "Cust_Req_time",
  "//Cust/@id", "Customer_ID",
  "//Cust/@note", "Cust_note", ]
  }  

因此,无论 ** - Customer_Entry :::** 后面的细节如何,我都可以使用 XML 插件过滤器将其提取出来(类似于多行编解码器的存储方式)。我编写了 5 个不同的 Logstash 文件来提取具有 5 种不同 Grok 模式的客户的不同活动。这会告诉你,

1.Customer_Entry
2.Customer_Purchase
3.Customer_Last_Purchase
4.Customer_Transaction
5.Customer_Authorization

以上所有 Grok 模式都有不同的信息集,如我之前所说,它们将按 Customer_ID 分组。

通过使用我的自定义模式和不同的日志文件,我可以毫无缺陷地在 Kibana 中提取信息并将其清晰地可视化。

由于我每天都有 100 多个日志文件要放入 logstash,因此我选择了 Filebeats,但 Filebeats 仅使用一个端口“5044”运行。我尝试为 5 个不同的 logstash 文件使用 5 个不同的端口运行,但这不起作用,只有一个 5 个 logstash 文件被加载,其余配置文件处于空闲状态。
这是我的示例文件output.prospector

输出.logstash:
主机:[“本地主机:5044”]

输出.logstash:
主机:[“本地主机:5045”]

输出.logstash:
主机:[“本地主机:5046”]

我无法在一个logstash 配置文件中添加所有的grok 模式,因为XML 过滤器插件需要源“GREEDYDATA”。在这种情况下,我将有 5 种不同的 Source=> 用于 5 种不同的 Grok 模式。 我什至也尝试过,但是没有用。

寻找更好的方法。

【问题讨论】:

    标签: elasticsearch logstash kibana filebeat logstash-forwarder


    【解决方案1】:

    听起来您正在寻找具有并行摄取的规模。碰巧的是,File beats 支持名为 load-balancing 的东西,这听起来像是您正在寻找的东西。

    output.logstash:
      hosts: [ "localhost:5044", "localhost:5045", "localhost:5046" ]
      loadbalance: true
    

    这是为了输出。不过,我相信您希望在输入上使用多线程。 FileBeats 应该跟踪探矿者配置中指定的所有文件,但您发现了限制。通配或指定一个目录将单线程该 glob/目录中的文件。如果你的文件名支持它,creative-globbing 可以通过在同一目录中定义多个 glob 来获得更好的并行性。

    假设您的日志按类型输入:

    - input_type: log
      paths:
        - /mnt/billing/*entry.log
        - /mnt/billing/*purchase.log
        - /mnt/billing/*transaction.log
    

    将在此处启用在并行文件中读取的多个线程上的探矿者。

    如果您的日志以随机名称出现,您可以使用类似的设置

    - input_type: log
      paths:
        - /mnt/billing/a*
        - /mnt/billing/b*
        - /mnt/billing/c*
        [...]
        - /mnt/billing/z*
    

    如果您正在处理大量具有从不重复的唯一名称的文件,则将 clean_inactive config 配置选项添加到您的探矿者将使您的 FileBeat 快速运行。

    - input_type: log
      ignore_older: 18h
      clean_inactive: 24h
      paths:
        - /mnt/billing/a*
        - /mnt/billing/b*
        - /mnt/billing/c*
        [...]
        - /mnt/billing/z*
    

    这将删除超过 24 小时的文件的所有状态,并且不会处理任何超过 18 小时的文件。

    【讨论】:

    • 是的,它正在工作.. !!但我想确保,负载平衡会解析每一行的日志吗?因为正如我在问题中提到的,我有多个具有不同模式的配置文件。我不希望负载平衡留下任何这些模式。你能简要介绍一下globbing吗?以及当我持有多个配置文件时,globbing 将如何增加并行度。因为我在输入探查器中使用了通配符。
    猜你喜欢
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2019-10-27
    • 2021-09-26
    • 1970-01-01
    相关资源
    最近更新 更多