【发布时间】:2017-05-03 07:39:31
【问题描述】:
目标:我有一个日志文件,我想从中提取以下给定日志文件中字符串 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 没有给出预期的结果。
提取我上面提到的子字符串的可能性是什么?或者我们有其他选择吗?
【问题讨论】:
标签: regex logstash elastic-stack logstash-grok