2

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

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 似乎想要前者,即希望它的时间戳作为日志行的第一件事,这对于非 JSON 日志很好,但显然不适用于 JSON 日志。我试过到处寻找答案,虽然有很多关于时间戳格式的文章,但似乎没有任何内容涵盖这个与 JSON 相关的问题。

4

1 回答 1

0

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

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

但是,没有标准方法,除非日志行不能解析为 JSON 对象,否则它就不是 JSON。

于 2016-12-07T19:18:47.413 回答