put-log-events
期望JSON文件需要用[
和]
换行
例如
# aws logs put-log-events --log-group-name my-logs --log-stream-name 20150601 --log-events file://events
[
{
"timestamp": long,
"message": "string"
}
...
]
但是,我的JSON文件采用多行格式,例如
{"timestamp": xxx, "message": "xxx"}
{"timestamp": yyy, "message": "yyy"}
是否可以在不编写自己的程序的情况下上传?
[1] https://docs.aws.amazon.com/cli/latest/reference/logs/put-log-events.html#examples
答案 0 :(得分:2)
一种无需任何编码即可处理批量发布的简单方法是使用jq
在文件中进行必要的转换。 jq
是用于执行JSON处理的命令行实用程序。
cat events | jq -s '.'> events-formatted.json
aws logs put-log-events --log-group-name my-logs --log-stream-name 20150601 --log-events file://events-formatted.json
通过这种方式,数据应该被格式化并可以被摄取到CloudWatch。
答案 1 :(得分:0)
如果要将这些行保留为单个事件,则可以将这些行强制转换为字符串,并与\n
合并,然后以这种方式发送。
由于行本身看起来像是自给自足的json,因此将它们作为事件数组发送(因此[...]
)可能并没有那么糟糕,因为它们将进入同一日志组,并且很容易成批查找。
答案 2 :(得分:0)
您将需要按照建议进行转义,然后删除新行。即使这些天有JSON用作使用者格式,但在记录日志时,它也不是很好的原始表示形式。原因是日志可能会被截断。
尝试解析截断的JSON,一点都不有趣!
您也不想在日志中嵌入时间戳,这会破坏您使用cloudwatch的过滤器和搜索功能。
您可以将RAW格式流式传输到cloudwatch日志,然后使用流将原始数据解析,格式化,过滤或进行任何您想做的事情,转化为诸如Elastic Search之类的服务。如果您想对日志做更多的事情而不是cloudwatch所提供的,我建议在AWS上流式传输到Elastic Search服务,并且如果您愿意,您也可以做嵌入式时间戳格式。