мы используем конвейер в Elasticsearch для имитации фильтра Грока. Мы встречаемся со следующим странным поведением:
, если поле метки времени находится в начале сообщения, фильтр grok не работает.
## GROK NOT WORK
POST /_ingest/pipeline/_simulate
{
"pipeline": {
"processors": [
{
"grok": {
"field": "message",
"patterns": ["""%{TIMESTAMP_ISO8601:@timestamp} %{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{TIMESTAMP_ISO8601:@timestamp}"""]
}
}
]
},
"docs": [
{
"_source": {
"message": "2019-09-29T00:39:02.91ZZ 55.3.244.1 GET /index.html 15824 0.043 "
}
}
]
}
У нас есть следующая ошибка:
{
"docs" : [
{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "Provided Grok expressions do not match field value: [2019-09-29T00:39:02.91ZZ 55.3.244.1 GET /index.html 15824 0.043 ]"
}
],
"type" : "illegal_argument_exception",
"reason" : "Provided Grok expressions do not match field value: [2019-09-29T00:39:02.91ZZ 55.3.244.1 GET /index.html 15824 0.043 ]"
}
}
]
}
В этом формате отметка времени в конце сообщения, фильтр grok работает нормально.
## GROK WORKS FINE
POST /_ingest/pipeline/_simulate
{
"pipeline": {
"processors": [
{
"grok": {
"field": "message",
"patterns": ["""%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration} %{TIMESTAMP_ISO8601:@timestamp}"""]
}
}
]
},
"docs": [
{
"_source": {
"message": "55.3.244.1 GET /index.html 15824 0.043 2019-09-29T00:39:02.91ZZ"
}
}
]
}
Заранее спасибо