2016-06-21 3 views
0

Я регистрирую и анализирую свои журналы с помощью стека ELK в приложении symfony3. Из приложения symfony я хочу, чтобы jsons мог зарегистрировать объект, который может быть немного глубоким. Есть ли какой-нибудь способ, которым Кибана интерпретирует моего json как json, а не строку?Symfony - ELK - интерпретировать json в Monolog

Вот пример того, как я журналирования,

$this->logger->notice('My log message', array(
    'foo'   => 'bar, 
    'myDeepJson1' => $deepJson1, 
    'myDeepJson2' => $deepJson2   
)); 

И там, мой logstash.conf. Я использовал шаблон в Symfony, что я нашел здесь: https://github.com/eko/docker-symfony

input { 
    redis { 
     type  => "symfony" 
     db  => 1 
     key  => monolog 
     data_type => ['list'] 
     host  => "redis" 
     port  => 6379 
    } 
} 

filter { 
    if [type] == "symfony" { 
     grok { 
      patterns_dir => "./patterns" 
      match  => [ "message", "%{SYMFONY}" ] 
     } 
     date { 
      match => [ "date", "YYYY-MM-dd HH:mm:ss" ] 
     } 
     if [log_type] == "app" { 
      json { 
       source => "log_context" 
      } 
     } 
    } 
} 

output { 
    if [type] == "symfony" { 
     elasticsearch { 
      hosts => ["172.17.0.1:9201"] 
      index => "azureva-logstash" 
     } 
    } 
} 

На самом деле, enverything я вход в переменной log_context, но Монолог преобразует массив в JSON, поэтому мои $ переменных deepJson являются двойным кодированным, но нет возможности регистрировать многомерный массив в контексте ...

любая помощь будет оценена по достоинству. Благодаря !

ответ

0

После того, как вы получили запрос Json из log_context, вы должны заменить все «с», чтобы иметь возможность проанализировать его с помощью json-плагина.
Вы можете сделать это с фильтром мутата и его опцией gsub (documentation).
После этого вы можете разобрать полученный json с помощью json-плагина.

Вы можете обновить документацию с:

if [log_type] == "app" { 
    json { 
     source => "log_context" 
    } 
    mutate { 
     gsub => ["requestJson", "\\"", "\""] 
    } 
    json { 
     source => "requestJson" 
     target => "requestJsonDecode" 
    } 
} 
+0

Для справки: [JSON кодек] (https://www.elastic.co/guide/en/logstash/2.2/plugins-codecs-json.html) – baudsp

+0

Привет и спасибо за ваш ответ, но это не решает мою проблему ... json string не интерпретируется ... я хотел бы иметь возможность перемещаться в json, как в таблице ... Kibana все еще показывает мне поле как raw json – nikophil

+0

Можете ли вы добавить несколько примеров журналов и то, что вы хотите иметь в ES, пожалуйста? Это может помочь мне понять вашу проблему. – baudsp

Смежные вопросы