我有一个如下所示的输入行:
localhost_9999.kafka.server:type=SessionExpireListener,name=ZooKeeperSyncConnectsPerSec.OneMinuteRate
我可以使用这种模式来解析它:
%{DATA:kafka_node}:type=%{DATA:kafka_metric_type},name=%{JAVACLASS:kafka_metric_name}
给了我这个:
{
"kafka_node": [
[
"localhost_9999.kafka.server"
]
],
"kafka_metric_type": [
[
"SessionExpireListener"
]
],
"kafka_metric_name": [
[
"ZooKeeperSyncConnectsPerSec.OneMinuteRate"
]
]
}
我想将OneMinuteRate
分成一个单独的字段,但似乎无法使其正常工作。我试过这个:
%{DATA:kafka_node}:type=%{DATA:kafka_metric_type},name=%{WORD:kafka_metric_name}.%{WORD:attr_type}"
但当时没有得到任何回报。
我还使用https://grokdebug.herokuapp.com/来测试这些......
答案 0 :(得分:1)
您可以将上一个正则表达式与转义DATA
一起使用(请注意,GREEDYDATA
匹配任何字符但新行和%{DATA:kafka_node}:type=%{DATA:kafka_metric_type},name=% {DATA:kafka_metric_name}\.%{GREEDYDATA:attr_type}
将匹配文字点字符),或使用{ {1}}输入最后一个字段,最后一个字段输入%{DATA:name}
:
(?<name>.*?)
由于%{GREEDYDATA:name}
转换为(?<name>.*)
而name
转换为.
,attr_type
部分将匹配任何字符,0或更多次出现,因为少数,直至第一个.*
和{{1}} {{1}}模式将贪婪地#34;吃掉&#34;该行的其余部分一直到最后。