Загрузить многострочный JSON журнал в AWS CloudWatch Log - PullRequest
0 голосов
/ 24 апреля 2020

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

Ответы [ 3 ]

2 голосов
/ 02 мая 2020

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

0 голосов
/ 27 апреля 2020

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

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

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

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

0 голосов
/ 25 апреля 2020

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

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

...