将时间戳放在JSON日志中的位置

时间:2016-05-30 09:19:34

标签: json logging timestamp splunk cloudwatch

我正在编写一个自定义应用程序,以JSON格式输出日志,输出文件中每个日志一行。我想将这些日志放入AWS CloudWatch和Splunk进行分析。我的问题是将时间戳放在日志行中的标准位置是什么?它应该像JSON blob那样:

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

或者它应该像JSON一样进入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似乎想要前者,即希望将其时间戳作为日志行中的第一件事,这对于非JSON日志来说很好,但显然不适用于JSON日志。我已经尝试到处搜索答案,虽然有很多关于时间戳格式的文章,但似乎没有任何内容涉及这个与JSON相关的问题。

1 个答案:

答案 0 :(得分:0)

正如您所写,每个消息记录一个纯JSON对象是最好的方法。 不支持此功能的工具不能很好地支持JSON日志记录。

Splunk可以非常好地读取JSON日志行。它甚至会为您解析消息并在搜索结果中突出显示该消息。

但是,没有标准方式,除非日志行不是JSON,如果它不能作为JSON对象解析。