парсинг пользовательского журнала приложения в logstash - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть журналы ниже, и я хочу проанализировать их, чтобы я мог отправить их в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"
  }
}

Может кто-нибудь подсказать, как обрабатывать эти журналы в вышеуказанном формате?

...