2017-06-14 41 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中使用了通配符。 –

相關問題