Amazon CloudWatch简介
Amazon CloudWatch 是一项针对 AWS 云资源和在 AWS 上运行的应用程序进行监控的服务。
下面是官方对其功能的介绍:
使用 Amazon CloudWatch 可以收集和跟踪各项指标、收集和监控日志文件、设置警报以及自动应对 AWS 资源的更改。Amazon CloudWatch 可以监控各种 AWS 资源,例如 Amazon EC2 实例、Amazon DynamoDB 表、Amazon RDS 数据库实例、应用程序和服务生成的自定义指标以及应用程序生成的所有日志文件。您可通过使用 Amazon CloudWatch 全面地了解资源使用率、应用程序性能和运行状况。使用这些分析结果,您可以及时做出反应,保证应用程序顺畅运行。
与此同时,官方也给出的 Amazon CloudWatch 特色与优点,总共有7项:
- 监控 Amazon EC2
- 监控其他 AWS 资源
- 监控自定义指标
- 监控和存储日志
- 设置警报
- 查看图表和统计信息
- 监控并应对资源更改
Amazon CloudWatch 的工作方式和术语概念
工作方式
首先,我们先来看一下 CloudWatch 的工作方式。
从图上可以看出,CloudWatch 主要就是一个存放指标的数控库。
- AWS 服务和用户自定义的数据,可以通过 API 将指标和监控数据存入。
- 告警模块(Amazon CloudWatch Alarm)用于配置和处理告警,并将告警通知输出到邮件通知、自动伸缩、以及其他服务。
- 统计模块(Available Statistics)用于计算、统计、检索数据,以便AWS控制台及其他组件访问。
术语概念
Amazon CloudWatch 有以下几个核心术语和概念:
- 命名空间
- 指标
- 维度
- 统计数据
- 百分位数
- 警报
1. 命名空间(Namespace)
记录监控指标的所属,不同命名空间中的指标彼此独立。例如 CPUUtilization 是一个监控指标,表示 CPU使用率,如果单单只靠这个名字,我们很难判断这个是虚拟机、容器、还是物理主机的。
这时候就需要额外的概念(即这里的“命令空间”)来区分它,Amazon约定使用 AWS/service 的方式表示命名空间,例如:AWS/EC2 表示 Amazon EC2 虚拟机, AWS/ECS 表示容器,AWS/ELB 表示负载均衡。。。
2. 指标(Metric)
和其他监控系统的概念一样,表示监控的内容项目,如:CPU使用率,内存占用率。
指标数据点
是对于每个指标而言,具体某一时间(时间戳)的数据。
指标的所有监控数据,就是由间隔固定的时间段,所采集和记录的一个个数据点组成。
指标保留
每个时间段的指标数据点保存一定时间后,会进行聚合,以来实现长期存储。
- 时间段短于 60 秒的数据点,保持3小时
- 时间段为60 秒(1分钟)的数据点,保持15天
- 时间段为300秒(5分钟)的数据点,保持63天
- 时间段为3600秒(1小时)的数据点,保持455天(15个月)
较短时间段的数据点,在超过保持时间后,会聚合成较长一个时间段的数据点。即:60秒数据过期(超过15天),集合成300秒数据;300秒数据过期(超过63天),聚合成3600秒数据。
CloudWatch 会保留 5 分钟和 1 小时数据。
3. 维度(Metric)
维度可以理解是给指标追加的 label ,每个指标可以配置10个维度。
可以通过单个维度,或者维度组合来对指标和数据进行筛选。
4. 统计数据(Statistics)
是指定时间段内的指标数据聚合,可用的统计数据有:
- Minimum :最小值
- Maximum :最大值
- Sum :总和
- Average :平均值
- SampleCount,数据点计数 (数量) ,用于统计信息的计算。
- pNN.NN,指定的百分位数的值
5. 百分位数
指示某个值在数据集中的相对位置。例如,第 95 个百分位数表示 95% 的数据低于此值,5% 的数据高于此值。百分位数可帮助您更好地了解指标数据的分布情况。
6. 警报(Alarm)
在指定的时间段内监控单个指标,并根据指标值相对于阈值的变化情况执行一项或多项指定操作。
Amazon CloudWatch 的警报不单单能发出警报通知,还可以执行一定的操作,例如重启/关闭虚拟机
自定义监控指标
简单来说,监控自定义指标就是指,使用 AWS CLI 或 API 将自己的指标发送到 CloudWatch。
主要会使用到的 CLI 有以下两个:
-
put-metric-data
:发送指标数据到 CloudWatch -
get-metric-statistics
:从 CloudWatch 获取指标数据
示例:
# 数据上报
$ aws cloudwatch put-metric-data --metric-name Buffers --namespace MyNameSpace --unit Bytes --value 231434333 --dimensions InstanceId=1-23456789,InstanceType=m1.small
1
# 数据查询
$ aws cloudwatch get-metric-statistics --metric-name Buffers --namespace MyNameSpace --dimensions Name=InstanceId,Value=1-23456789 Name=InstanceType,Value=m1.small --start-time 2016-10-15T04:00:00Z --end-time 2016-10-19T07:00:00Z --statistics Average --period 60