CloudWatch metrics allows you to gather data from ALL AWS services. A Metric is a specific variable you may monitor, for EC2 it may be CPU util. These metrics belong in namespaces that are isolated from one another to avoid interference with each others data. S3 will be in a different namespace from EC2. The metrics may have up to 30 dimensions each. These are specific attributes to the metric that is being measured. You can create a dashboard to monitor these metrics and even create your own custom metrics as well if you so wish.
You can send these metrics by utilizing CloudWatch Metrics Streams. This will send the data through to kinesis data firehose where you can then send the data to any location available to kinesis firehose. If you so choose you also have the option to send to a third party as well. You could for example have the data sent through to S3 from firehose and then analyzed by Athena. As always feel free to leave a comment!