Amazon Cloudwatch 提供了一些非常有用的指标来监控我的 EC2、负载均衡器、elasticache 和 RDS 数据库等,并允许我为一系列标准设置警报;但是有什么方法可以配置它来监控我的 S3 吗?或者是否有任何其他监控工具(除了简单地启用日志记录)可以帮助我监控我的 S3 资源的 POST/GET 请求的数量和数据量?并为活动阈值或增加的数据存储提供警报?
5 回答
AWS S3 是一种托管存储服务。适用于 S3 的 AWS CloudWatch 中唯一可用的指标是NumberOfObjects
和BucketSizeBytes
。为了更好地了解您的 S3 使用情况,您需要做一些额外的工作。
我最近编写了一个 AWS Lambda 函数来完全满足您的要求,它可以在此处获得:
https://github.com/maginetv/s3logs-cloudwatch
它通过解析 S3 服务器端日志文件并将指标聚合/导出到 AWS Cloudwatch(CloudWatch 允许您发布自定义指标)来工作。
在您的 AWS 账户上部署此函数后,您将在 AWS CloudWatch 中获得的示例图如下:
RestGetObject_RequestCount
RestPutObject_RequestCount
RestHeadObject_RequestCount
BatchDeleteObject_RequestCount
RestPostMultiObjectDelete_RequestCount
RestGetObject_HTTP_2XX_RequestCount
RestGetObject_HTTP_4XX_RequestCount
RestGetObject_HTTP_5XX_RequestCount
+ many others
由于指标已导出到 CloudWatch,因此您也可以轻松地为它们设置警报。CloudFormation 模板包含在 GitHub 存储库中,您可以非常快速地部署此功能以了解您的 S3 存储桶使用情况。
编辑 2016-12-10:
2016 年 11 月,AWS 在 CloudWatch 中添加了额外的 S3 请求指标,可以在需要时启用。这包括AllRequests
、GetRequests
、PutRequests
、等指标。有关此功能的更多详细信息,请参阅DeleteRequests
使用Amazon CloudWatch文档监控指标。HeadRequests
我认为这可能取决于您要从哪里跟踪访问。即,如果您尝试从外部 http/https 请求测量/观察 S3 对象的使用情况,那么 Anthony 的建议是否启用 S3 日志记录然后导入 splunk(或 redshift)进行分析可能会奏效。您还可以每天查看请求的计费状态。
如果尝试从您自己的应用程序中评估使用情况,有一些 AWS SDK cloudwatch 指标:
http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/metrics/package-summary.html
和
我也找不到使用 CloudWatch 执行此操作的任何方法。Derek@AWS 回答了 2012 年 4 月的这个问题,因为 CloudWatch 中没有 S3 支持。https://forums.aws.amazon.com/message.jspa?messageID=338089
我唯一能想到的是将 S3 访问日志导入日志服务(如 Splunk)。然后创建一个自定义云观察指标,您可以在其中发布您从日志中解析的数据。但是,您必须过滤掉访问日志的轮询,并且……当您这样做时,您可以在 Splunk 中而不是在 S3 中创建警报。
如果您的用例只是在您使用过多时发出警报,您可以为您的 S3 使用情况设置帐户计费警报。
S3 是一项托管服务,这意味着您无需根据系统事件采取措施来保持其正常运行(只要您有能力支付服务的使用费用)。CloudWatch 的精神是帮助监控需要您采取行动以保持其运行的服务。
例如,EC2 实例(您自己管理)通常需要监控,以便在它们过载或未充分使用或崩溃时发出警报;在某些时候需要采取行动来启动新实例以横向扩展,关闭未使用的实例以缩减,或重新启动已崩溃的实例。CloudWatch 旨在帮助您更有效地管理这些资源。