簡體   English   中英

使用logstash中的grok在匹配位置后提取子字符串

[英]Extracting a substring after a match position using grok in logstash

目標:我有一個日志文件,我希望在下面給出的日志文件中的字符串Amount :::之后提取金額詳細信息。

到目前為止我做了什么:由於它是自定義分析,我使用RegEx創建了一個自定義模式,我正在嘗試使用logstash實現它。

這是我的日志文件 -

28-04-2017 14:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 3000.00  
28-04-2017 12:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 31000.00  
28-04-2017 14:15:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 10000.00  
28-04-2017 11:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 9000.00  
28-04-2017 08:15:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 7000.00

我用Regex找到字符串Amount :::
注意:我想提取字符串Amount :::之后的子字符串

這是我在Grok中使用的自定義模式:
(但它不會產生好的結果)

CUSTOM_AMOUNT (?<= - Amount::: ).*    
CUSTOM_AMOUNT (?<=Amount::: )%{BASE16FLOAT}

這是我的logstacsh.conf -

input { 
    file {
       path => "D:\elk\data\amnt_parse.txt"
       type => "customgrok"
       start_position => "beginning"
       sincedb_path => "/dev/null"
         } 
      }  
 filter{ 
       if[type]== "customgrok" {

            if "_grokparsefailure" in [tags] { 
                              grok { 
                                   patterns_dir => "D:\elk\logstash-5.2.1\vendor\bundle\jruby\1.9\gems\logstash-patterns-core-4.0.2\patterns\custom" 

                                    match => { "message" => "%{CUSTOM_AMOUNT:amount" } 
                                    add_field => { "subType" => "Amount"           } 

    } 

    }
    }  
 mutate {
      gsub => ['message', "\t", " "] 
        }  } }

 output {
     stdout {
         codec => "rubydebug"
            }
     elasticsearch {
         index => "amnt_parsing_change"
          hosts =>"localhost"

            }
            }   

我們的意圖是使用Kibana和Elasticsearch基於提取的子字符串可視化和執行聚合操作。
但它將日志文件存儲到變量"message" 正如你在這里看到的, match => { "message" => "%{CUSTOM_AMOUNT:amount" }

這是當我試圖在Kibana中查看時,行如何存儲在"message"中 -

"message": "28-04-2017 11:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 9000.00\r",  
"message": "28-04-2017 12:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 31000.00\r",    
"message": "28-04-2017 11:45:50 INFO  abcinfo (ABC_TxnLog_ServiceImpl.java295) - Amount::: 9000.00\r",  

Logstash文件正在加載數據(日志文件),並且也會創建索引,但Custom Pattern未提供預期結果。 有什么可能提取我上面提到的子字符串? 或者我們有其他選擇嗎?

這是你要做的:

filter {
     grok {
                match => {
                        "message" => "%{DATESTAMP:Date} %{WORD:LogSeverity}\s+%{WORD:LogInfo} \(%{NOTSPACE:JavaClass}\) \- Amount::: %{NUMBER:Amount}"
                        }
        }
                mutate
                        {
                                gsub =>
                                [
                                        "Data"," ","-"
                                ]
                                #If you dont want those fields
                                remove_field => ["Date","LogSeverity","LogInfo","JavaClass"]

                        }
        }

我建議你閱讀文件:

Grok文檔 Grok模式

您可以使用以下調試器:

GrokDebbuger

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM