У меня есть журналы ниже, и я хочу проанализировать их, чтобы я мог отправить их вasticsearch.
72.246.50.159: 2018-09-14T05:43:59.728Z: ~ OPTIONS PASSED: {[User: kkbinte] [Endpoint: https://test.abc.com/api/data/recent_accounts.json] [Method: GET] [ContentType: application/json] [Args: {\"user\":\"asarma\"}]}\n 72.246.50.159: 2018-09-14T05:44:17.810Z: ~ OPTIONS PASSED: {[User: kkbinte] [Endpoint: https://test-hcpl.abc.com/onboarding/v1/Accounts] [Method: GET] [ContentType: application/json] [Args: {\"q\":\"SONY\",\"category\":\"account_name\"}]}\n 72.246.50.159: 2018-09-14T05:45:01.010Z: ~ OPTIONS PASSED: {[User: kkbinte] [Endpoint: https://test-hcpl.abc.com/onboarding/v1/Accounts] [Method: GET] [ContentType: application/json] [Args: {\"q\":\"HOTSTAR\",\"category\":\"account_name\"}]}\n
В строке есть символ "\ n", и я хочу обработать их как отдельный документ. Так требуется формат
{
"ip":"72.246.50.159",
"datetime":"2018-09-14T05:43:59.728Z"
"User": "kkbinte",
"Endpoint": "https://test.abc.com/api/data/recent_accounts.json",
"Method":"GET",
"ContentType": "application/json",
"Args: {\"user\":\"asarma\"}
}
{
"ip":"72.246.50.159",
"datetime":"2018-09-14T05:44:17.810Z",
"User: kkbinte",
"Endpoint":"https://test-hcpl.abc.com/onboarding/v1/Accounts",
"Method":"GET",
"ContentType": "application/json",
"Args": "{\"q\":\"SONY\",\"category\":\"account_name\"}"
}
{
"ip":"72.246.50.159",
"datetime":"2018-09-14T05:48:00.810Z",
"User: kkbinte",
"Endpoint":"https://test-hcpl.abc.com/onboarding/v1/Accounts",
"Method":"GET",
"ContentType": "application/json",
"Args: {\"q\":\"HOTSTAR\",\"category\":\"account_name\"}"
}
данные выше являются динамическими, поэтому в этом примере у меня будет 3 документа, но в некоторых случаях их будет больше 5 или 10.
Я попытался разбить строку в "\ n", а затем попытался использовать фильтр grok для этого, но результаты не приходят в одном документе.
input{
file{
path => "/tmp/a.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter{
mutate { split => ["message", "\n"] }
mutate { gsub => [
"message", "\", " "
] }
grok {
match => { "message" => "%{IP:ip}: %{TIMESTAMP_ISO8601:d}: ~ %{GREEDYDATA:option_passed}"}
}
}
output {
stdout {
codec => "rubydebug"
}
}
Может кто-нибудь подсказать, как обрабатывать эти журналы в вышеуказанном формате?