Загрузить многострочный журнал JSON в AWS CloudWatch Log

put-log-events ожидают, что файл JSON необходимо обернуть [ & ]

e.g.

# 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.


person Ryan    schedule 24.04.2020    source источник


Ответы (3)


Простым способом публикации пакета без какого-либо кодирования было бы использование 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.

person Siddharth    schedule 02.05.2020

Если вы хотите сохранить эти строки как одно событие, вы можете преобразовать строки в строку, соединить их с помощью \n и отправить их таким образом.

Поскольку сами строки выглядят как самодостаточные json, отправка их в виде массива событий (следовательно, [...]) может быть не так уж и плоха, поскольку они попадут в ту же группу журналов и их будет легко найти в виде пакета.

person Oleksii Donoha    schedule 24.04.2020

Вам нужно будет экранировать его, как предлагается, и удалить новые строки. Несмотря на то, что в наши дни в качестве потребительского формата используется JSON, это не лучшее сырое представление, когда дело доходит до журналов. Причина в том, что журналы могут быть усечены.

Попробуйте разобрать усеченный JSON, совсем не весело!

Вы также не хотите, чтобы временная метка была встроена в ваши журналы, это нарушит фильтр и возможности поиска, которые вы получаете с Cloudwatch.

Вы можете транслировать формат RAW в журналы cloudwatch, а затем использовать потоки для анализа этих необработанных данных, форматирования, фильтрации или того, что вы хотите сделать, в такой сервис, как Elastic Search. Я бы порекомендовал выполнять потоковую передачу в сервис Elastic Search на AWS, если вы хотите делать со своими журналами больше, чем то, что дает вам cloudwatch, и вы также можете использовать свой встроенный формат временной метки, если хотите.

person Derrops    schedule 27.04.2020