AWS S3 is a managed repository. The only metrics available in AWS CloudWatch for S3 are NumberOfObjects and BucketSizeBytes . To better understand your use of S3, you need to do extra work.
I recently wrote an AWS Lambda function to accomplish exactly what you are asking for, and it is available here:
https://github.com/maginetv/s3logs-cloudwatch
It works by analyzing server-side S3 log files and aggregates / exports metrics to AWS Cloudwatch (CloudWatch allows you to publish custom metrics).
Examples of graphs that you will receive in AWS CloudWatch after deploying this feature to your AWS account:
RestGetObject_RequestCount RestPutObject_RequestCount RestHeadObject_RequestCount BatchDeleteObject_RequestCount RestPostMultiObjectDelete_RequestCount RestGetObject_HTTP_2XX_RequestCount RestGetObject_HTTP_4XX_RequestCount RestGetObject_HTTP_5XX_RequestCount + many others
Since metrics are exported to CloudWatch, you can also easily configure alarms for them. The CloudFormation template is included in the GitHub repository, and you can quickly deploy this feature to gain visibility in using your S3 bucket.
EDIT 2016-12-10:
In November 2016, AWS added additional S3 request parameters to CloudWatch, which can be enabled when necessary. This includes metrics such as AllRequests , GetRequests , PutRequests , DeleteRequests , HeadRequests , etc. See Monitoring Performance with Amazon CloudWatch for more on this feature.
source share