Обработка собственного журнала NGINX с помощью logstash

У меня есть журнал доступа nginx, который регистрирует тело запроса в виде строки json. например.

"{\x0A\x22userId\x22 : \x22MyUserID\x22,\x0A\x22title\x22 : \x22\MyTitle\x0A}" 

Моя цель - сохранить эти 2 значения (userId и title) в 2 отдельных полях в Elastic Search.

Моя конфигурация Logstash:

filter {
  if [type] == "nginxlog" {
    grok {
      match => { "message" => "%{COMBINEDAPACHELOG} %{QS:partner_id} %{NUMBER:req_time} %{NUMBER:res_time} %{GREEDYDATA:extra_fields}" }
      add_field => [ "received_at", "%{@timestamp}" ]
      add_field => [ "received_from", "%{host}" ]

    }

   mutate {
    gsub => [
      "extra_fields", x22 ,'"' ,
         "extra_fields",x0A ,'\n'

        ]
    }

    json{
        source => "extra_fields"
        target => "extra_json"

    }

   mutate {
    add_field => {

          "userId => "%{[extra_json][userId]}"
          "title"=> "%{[extra_json][title]}"
        }
 }



   }
}

Но он извлечен неправильно, значение в ES userId = userId, а не MyUserID. Любая подсказка, где проблема? Или какая-нибудь лучшая идея для достижения того же?

0 ответов

Другие вопросы по тегам