我正在尝试在logstash 1.5.0版中使用grok过滤器来解析日志文件中的几个数据字段。
我能够解析一个没有问题的简单WORD字段,但是当我尝试定义一个自定义模式并将其添加时,grok解析失败。
我尝试过使用其他地方推荐的一些grok调试器来查找问题:
http://grokconstructor.appspot.com/do/match
和
http://grokdebug.herokuapp.com/
两者都说我的正则表达式应该没问题,并返回我想要的字段,但是当我将它添加到我的logstash.conf时,grok无法解析日志行并简单地将原始数据传递给elasticsearch。
我的示例行如下:
APPERR [2015/06/10 11:28:56.602] C1P1405 S39 (VPTestSlave002_001)| 8000B Connect to CGDialler DB (VPTest - START)| {39/A612-89A0-A598/60B9-1917-B094/9E98F46E} Failed to get DB connection: SQLConnect failed. 08001 (17) [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied.
我的logstash.conf grok配置如下所示:
grok
{
patterns_dir => ["D:\rt\Logstash-1.5.0\bin\patterns"]
match => {"message" => "%{WORD:LogLevel} \[%{KERNELTIMESTAMP:TimeStamp}\]"}
}
我的自定义模式文件的内容是:
KERNELTIMESTAMP %{YEAR}/%{MONTHNUM}/%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?
我希望这会返回以下数据集:
{
"LogLevel": [
[
"APPERR"
]
],
"TimeStamp": [
[
"2015/06/10 11:28:56.602"
]
],
"YEAR": [
[
"2015"
]
],
"MONTHNUM": [
[
"06"
]
],
"MONTHDAY": [
[
"10"
]
],
"HOUR": [
[
"11",
null
]
],
"MINUTE": [
[
"28",
null
]
],
"SECOND": [
[
"56.602"
]
],
"ISO8601_TIMEZONE": [
[
null
]
]
}
谁能告诉我我的问题在哪里?