繁体   English   中英

将数据从Filebeats发送到多个Logstash文件时遇到问题

[英]Facing Issue while sending data from Filebeats to Multiple Logstash files

准确地说,我正在处理一个日志文件,其中包含近百万条记录。 由于它是“帐单摘要”日志,因此不会按特定顺序记录客户信息。
我正在使用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 {
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模式提取不同的Customer Activity。 哪个会告诉你

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个不同的端口运行5个不同的logstash文件,但是那没有用,只有5个Logstash文件正在加载,其余配置文件处于空闲状态。
这是我的示例文件拍子output.prospector

output.logstash:
主机:[“ localhost:5044”]

output.logstash:
主机:[“ localhost:5045”]

output.logstash:
主机:[“ localhost:5046”]

我无法将所有grok模式都添加到一个logstash配置文件中,因为XML Filter插件采用了源代码“ GREEDYDATA” 在这种情况下,我将为5种不同的Grok模式使用5种不同的Source=> 我什至也尝试过,但是那没有用。

寻找更好的方法。

听起来像是您正在通过并行摄取来寻找规模。 碰巧的是,File beats支持一种称为负载平衡的功能 ,听起来像您想要的那样。

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

那是为了输出。 不过,我相信您希望在输入上使用多线程。 FileBeats应该可以跟踪探矿器配置中指定的所有文件,但是您已经发现了限制。 全局或指定目录将使该glob /目录中的文件单线程处理。 如果您的文件名支持它,那么通过在同一目录中定义多个glob,可以使Creative-globbing更好地并行化。

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

- 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-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小时的文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM