2017-06-14 70 views
0

准确而言,我正在处理一个拥有近百万条记录的日志文件。由于它是帐单摘要日志,因此客户信息将以特定顺序记录。
我正在使用customized GROK Patternslogstash XML filter plugin来提取足以跟踪的数据。要跟踪个人客户活动,我使用“Customer_ID”作为唯一密钥。所以,即使我用多Logstash文件,多神交模式,所有他的信息可以使用以下界/聚集了他的“CUSTOMER_ID”(唯一键)将数据从Filebeats发送到多个Logstash文件时面临问题

这里是我的日志文件的样本,
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模式提取不同的客户活动。它会告诉,

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

上述所有神交模式具有不同的一组信息,这将被分组正如我前面所说的,通过Customer_ID。

我可以通过使用具有不同日志文件的自定义模式,在Kibana中清楚地提取信息并将其可视化,而没有任何缺陷。

由于我有100个日志文件,每个日志文件放入logstash,我选择了Filebeats,但Filebeats只运行一个端口“5044”。我试图用5个不同的端口运行5个不同的logstash文件,但那是行不通的,只有一个5的logstash文件被加载其余的配置文件被闲置。
这里是我的样品filebeat output.prospector

output.logstash:
主机: “本地主机:5044”]

output.logstash:
主机: “本地主机:5045” ]

output.logstash:
主机: “本地主机:5046”]

我不能添加所有的神交PATT erns在一个logstash配置文件中,因为XML Filter插件需要源“GREEDYDATA”。在这种情况下,我将有5种不同的Source=> 5种不同的格罗克模式。 我甚至也试过,但那不起作用。

寻找更好的方法。

回答

0

听起来像你正在寻找规模,并行摄取。碰巧,File beats支持一种叫做load-balancing的东西,这听起来像你要找的东西。

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

这是输出。虽然,我相信你想要在输入上多线程。 FileBeats应该追踪在探矿者配置中指定的所有文件,但是你已经发现了限制。全局化或指定目录将单线程处理该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配置配置选项到您的探矿者将保持您的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小时的文件。

+0

是的这是工作..!但我想确保,负载均衡解析日志每一行?因为正如我在我的问题中提到的,我有不同模式的多个配置文件。我不希望负载平衡留下任何这些模式。也可以介绍一下globbing?以及当我持有多个配置文件时globbing会如何增加并行性。因为我在Input Prospector中使用了通配符。 –

相关问题