2016-05-30 7 views
2

Я пишу настраиваемое приложение, которое выводит журналы в формате JSON, по одной строке на журнал в выходном файле. Я хочу получить эти журналы в AWS CloudWatch и Splunk для анализа. Мой вопрос в том, что является стандартным местом для размещения метки времени в строке журнала? Должен ли он идти до JSON сгустка, как это:Где помещать временную метку в журнал JSON

2016-05-30 10:13:00 { "field1": 6, "field2": "Hello world!", ...} 

Или это пойти внутри JSON как это:

{"timestamp": "2016-05-30 10:13:00", "field1": 6, "field2": "Hello world!", ...} 

Splunk, кажется, предпочитает последний, и если вы скажете это формат журнала _json кажется недовольны бывший, и вы получите сообщение об ошибке, как это:

05-28-2016 16:29:17.973 +0100 ERROR JsonLineBreaker - JSON StreamId:18154196253238674442 had parsing error:Unexpected character: '-' - data_source=..... 

Но Cloudwatch, кажется, хотят прежнего, т.е. хочет метку времени, как первое, что на строке журнала, который отлично подходит для не-JS ON, но, видимо, не для журнала JSON. Я пробовал искать везде ответы, и в то время как есть много статей о форматировании timestamp, ничто, кажется, не затрагивает этот вопрос, связанный с JSON.

ответ

0

Как вы писали, запись чистого объекта JSON на сообщение - лучший способ сделать это. Инструменты, которые не поддерживают это, не поддерживают запись JSON очень хорошо.

Splunk может читать строки журнала JSON очень хорошо. Он даже анализирует сообщение для вас и выделяет презентацию в результатах поиска.

Однако, существует стандарт, за исключением того, что строка журнала не является JSON, если она не обрабатывается как объект JSON.