【问题标题】:Parse Cloudwatch Log Already Exported to S3解析已导出到 S3 的 Cloudwatch 日志
【发布时间】:2017-02-02 23:49:44
【问题描述】:

我使用此处找到的过程将我的 Cloudwatch 日志导出到 S3:

http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/S3ExportTasks.html

现在我在 S3 中有大量较小的 Cloudwatch 日志文件。有没有一种工具可以用来一次性解析/搜索它们?我正在考虑使用类似 awslogs 的工具从 Cloudwatch 下载它们,但找不到任何东西。

【问题讨论】:

    标签: amazon-web-services amazon-cloudwatch amazon-cloudwatchlogs


    【解决方案1】:

    只要它们在 S3 中,您就不能对它们做太多事情。您也许可以使用Athena 来查询它们,但我不确定它们的格式是否正确。

    您可以启动一个Elastic MapReduce 集群来解析日志文件。您可以通过 EMR 运行查询,或者可能使用 EMR 将数据插入到 ElasticsearchRedshift 中,然后您可以在其中查询数据。

    如果您只想通过这些文件进行 样式搜索,您需要首先下载所有文件,以便它们位于运行grep 工具的计算机的本地。

    【讨论】:

    • 谢谢。有人建议下载它们,然后使用lesszgrep | less 递归地浏览它们——它们会出现大量的流目录,其中包含单独的.gz 文件。但是我仍然面临如何按时间戳排序的挑战。
    【解决方案2】:

    我需要手动 grep 通过日志文件,并找到了一种方法:

    • 从 S3 递归下载日志文件到本地目录:

    aws s3 cp --recursive s3://<bucket name>/<bucket subdir>/ ./

    • 我的 Cloudwatch 日志组中的不同流来自具有不同时间戳格式的不同应用程序,因此请使用 zgrep -r 递归查找我想要的流。
    • 我的日志文件行如下所示:

    api-api-0f73ed57-e0fc-4e69-a932-4ee16e28a9e6/000002.gz:2017-02-02T22:48:49.135Z [2017-02-02 22:48:49] Main.DEBUG: Router threshold 99.97 [] {"ip":"10.120.4.27"}

    • 所以使用sort -sk<key 1>,<key 2> 对第二个和第三个空格分隔的字段([2017-02-0222:48:49])进行排序
    • 这给了我以下命令:

    zgrep -r api-api logfile* | grep "Main.DEBUG" | sort -sk2,3

    感谢以下questionsort 的提示。

    【讨论】:

      猜你喜欢
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 2019-12-25
      • 2019-02-07
      • 2019-11-01
      相关资源
      最近更新 更多