AWS CloudWatch监控配置

一、简介

1. Amazon CloudWatch简介

1.1 CloudWatch简介

Amazon CloudWatch 实时监控您的 Amazon Web Services (AWS) 资源以及您在 AWS 中运行的应用程序。您可以使用 CloudWatch 收集和跟踪指标,这些指标是您可衡量的相关资源和应用程序的变量。

CloudWatch 主页自动显示有关您使用的每项 AWS 服务的指标。此外,您还可以创建自定义控制面板,以显示有关自定义应用程序的指标,并显示您选择的指标的自定义集合。

您可以创建警报,这些警报监视指标,当超出阈值时,它们会发送通知或者对您所监控的资源自动进行更改。例如,您可以监控您的 Amazon EC2 实例的 CPU 使用率以及磁盘读写情况,然后使用此数据确定您是否应启动其他实例来处理增加的负载。您还可以使用此数据停止未完全利用的实例以节省开支。

您可通过使用 CloudWatch 全面地了解资源使用率、应用程序性能和运行状况。

1.2 CloudWatch访问方式

可以使用下面任何方式访问CloudWatch

  • Amazon CloudWatch控制台
  • AWS CLI
  • CloudWatch API
  • AWS开发工具包

1.3 可关联的AWS服务

以下服务可与Amazon CloudWatch一起使用

  • Amazon Simple Notification Service (Amazon SNS)

可用于协调和管理向订阅终端节点或客户交付或发送消息的过程。可结合使用 Amazon SNS 与 CloudWatch 以便在达到警报阈值时发送消息

  • Amazon EC2 Auto Scaling

可用于根据用户定义的策略、运行状况检查和时间表自动启动或终止 Amazon EC2 实例。可将 CloudWatch 警报与 Amazon EC2 Auto Scaling 一起使用以根据需求扩展 EC2 实例

  • AWS CloudTrail

可用于监控对您的账户的 Amazon CloudWatch API 的调用(包括由 AWS 管理控制台、AWS CLI 和其他服务进行的调用)

  • AWS Identity and Access Management (IAM)

可帮助您安全地控制用户对 AWS 资源的访问

2.CloudWatch的工作原理

Amazon CloudWatch 基本上是一个指标存储库。AWS 服务—例如 Amazon EC2—将指标放在存储库中,您可以根据这些指标来检索统计数据。如果将自己的自定义指标放在存储库中,则还可以检索有关这些指标的统计数据。

AWS CloudWatch监控配置

您可以在 CloudWatch 控制台中使用指标计算统计数据,然后以图形化的方式显示数据

在满足特定条件时,您可以配置警报操作以停止、启动或终止 Amazon EC2 实例。此外,您还可以创建代表您启动 Amazon EC2 Auto Scaling 和 Amazon Simple Notification Service (Amazon SNS) 操作的警报

3.CloudWatch的核心术语和概念

3.1 命名空间

命名空间 是 CloudWatch 指标的容器。不同命名空间中的指标彼此独立,因此来自不同应用程序的指标不会被错误地聚合到相同的统计信息中。

3.2 指标

指标 是 CloudWatch 中的基本概念。指标表示一个发布到 CloudWatch 并且按时间排序的数据点集。可将指标视为要监控的变量,而数据点代表该变量随时间变化的值。

3.2.1 时间戳

每个指标数据点必须与一个时间戳关联。时间戳最长可以为过去的两周和将来的两小时。如果不提供时间戳,CloudWatch 会根据收到数据点的时间创建一个时间戳。

3.2.2指标保留

CloudWatch 将保留指标数据,如下所示

  • 时间段短于 60 秒的数据点的可用时间为 3 小时。这些数据点是高精度自定义指标
  • 时间段为 60 秒 (1 分钟) 的数据点可用 15 天
  • 时间段为 300 秒 (5 分钟) 的数据点可用 63 天
  • 时间段为 3600 秒 (1 小时) 的数据点可用 455 天 (15 个月)

3.3维度

维度是一个名称/值对,它是指标标识的一部分。您可以为一个指标分配最多 10 个维度

每个指标包含用于描述该指标的特定特征,您可以将维度理解为这些特征的类别。维度可以帮助您设计统计数据计划的结构。因为维度是指标的唯一标识符的一部分,因此无论您在何时向一个指标添加唯一名称/值对,都会创建该指标的一个新变体

3.3.1维度组合

CloudWatch 将维度的每种唯一组合视为一个单独的指标,即使指标具有相同的指标名称也是如此。您只能使用已发布的特定维度组合检索统计数据。当您检索统计数据时,为命名空间、指标名称和维度参数指定创建指标时使用的相同值。您还可为 CloudWatch 指定要用于聚合的开始和结束时间

3.4统计数据

CloudWatch 将维度的每种唯一组合视为一个单独的指标,即使指标具有相同的指标名称也是如此。您只能使用已发布的特定维度组合检索统计数据。当您检索统计数据时,为命名空间、指标名称和维度参数指定创建指标时使用的相同值。您还可为 CloudWatch 指定要用于聚合的开始和结束时间

3.4.1 单位

所有统计数据都有度量单位。示例单位包括 Bytes、Seconds、Count 和 Percent等

3.4.2 时间段

时间段是与特定 Amazon CloudWatch 统计信息关联的时间的长度。每项统计信息代表在指定时间段内对收集的指标数据的聚合。时间段以秒为单位定义,时间段的有效值为 1、5、10、30 或 60 的任意倍数

3.4.3 聚合

Amazon CloudWatch 将根据您在检索统计数据时指定的时间段长度聚合统计数据。您可以根据需要发布包含相同或类似时间戳的任意数量的数据点。CloudWatch 会根据指定的时间段长度对其进行聚合。CloudWatch 不会跨区域聚合数据

3.5 百分位数

百分位数指示某个值在数据集中的相对位置。例如,第 95 个百分位数表示 95% 的数据低于此值,5% 的数据高于此值。百分位数可帮助您更好地了解指标数据的分布情况

3.6 警报

您可使用警报 代表您自动发起操作。警报在指定的时间段内监控单个指标,并根据指标值相对于阈值的变化情况执行一项或多项指定操作。操作是向 Amazon SNS 主题或 Auto Scaling 策略发送的通知。您还可以将警报添加到控制面板

二、创建Amazon CloudWatch控制面板

此次会以为一台EC2添加常用的监控指标为例,详细说明整个添加监控指标的过程。

1. 创建控制面板

首先先创建一个对应的EC2控制面板,登录CloudWatch主页控制台,做如下操作

AWS CloudWatch监控配置

AWS CloudWatch监控配置

AWS CloudWatch监控配置

2. 搜寻需要的指标

此次根据EC2的实例ID,搜寻单个EC2现有的所有指标

AWS CloudWatch监控配置

可以看到一共有13个相关指标,包括了磁盘、网络流量、CPU使用率、实例状态检查等

AWS CloudWatch监控配置

3.添加指标绘制成图标

此次挑选磁盘、网络、CPU以及实例状态检查几个指标添加至图表中

AWS CloudWatch监控配置

其中统计数据的类型、时段可根据具体的需求自由选择。选择完成后,点击“创建小部件”生成图标。

4.调整并保存控制面板

图表生成后,调整图表的名称和显示比例,并将时区调整为本地时区(默认为UTC时间)

AWS CloudWatch监控配置

AWS CloudWatch监控配置

全部调整完毕后,点击“保存控制面板”,单台EC2主机的监控指标图添加完成。

三、添加警报

此次以如上添加的EC2-Demo添加相应的监控报警,有如下几种方式可进行添加警报

  • 方式一:通过CloudWatch控制台主页的“警报”入库,添加警报

AWS CloudWatch监控配置

  • 方式二:通过控制面板中创建的图表,进入选择对应的指标,添加警报

AWS CloudWatch监控配置

AWS CloudWatch监控配置

此次选择方式二进行警报的配置

1.SNS配置

在配置警报之前,创建一个用于接收及发送告警信息的SNS主题。

1.1 SNS简介

Amazon Simple Notification Service (Amazon SNS) 是一项 Web 服务,用于协调和管理向订阅终端节点或客户端交付或发送消息的过程。在 Amazon SNS 中,有两类客户端—发布者和订阅者—也称为创建者和用户。发布者通过创建消息并将消息发送至主题与订阅者进行异步交流,主题是一个逻辑访问点和通信渠道。订阅者(即 Web 服务器、电子邮件地址、Amazon SQS 队列、AWS Lambda 函数)在其订阅主题后通过受支持协议(即 Amazon SQS、HTTP/S、电子邮件、SMS、Lambda)之一使用或接收消息或通知

AWS CloudWatch监控配置

1.2 SNS控制面板

1.21 SNS配置

通过AWS服务控制面板进入SNS控制面板

“服务”->“移动服务”->“SNS”

AWS CloudWatch监控配置1.2.2创建主题

使用“创建主题”操作,创建一个新的主题用以接收和发送警报信息

AWS CloudWatch监控配置AWS CloudWatch监控配置

1.2.3 创建订阅

创建订阅,用以接收警报信息。订阅协议可以选择HTTP、HTTPS、Email、SQS、Lambda等多种,此次选择Email方式

AWS CloudWatch监控配置

创建成功后,会发送一封Confirmation邮件至之前填写的邮箱,登录邮箱接受订阅完成整个订阅配置

AWS CloudWatch监控配置AWS CloudWatch监控配置

接受订阅后,在SNS主题面板会生成相应的订阅ID

AWS CloudWatch监控配置

2.警报配置

此次以创建一个CPUUtilization警报为例,说明下整个警报的配置过程

2.1 指标选择

选择CPUUtilization指标并创建警报

AWS CloudWatch监控配置

    1. 指定指标和条件

AWS CloudWatch监控配置

设置警报触发条件及阈值

AWS CloudWatch监控配置

2.3 配置操作

配置告警触发后进行的操作

通知:

选择之前创建的SNS主题,接收告警通知

AWS CloudWatch监控配置

其他操作:

在触发告警后,针对EC2可以定义Auto Scaling及其他一些EC2操作,本次不做配置

AWS CloudWatch监控配置

2.4 添加名称和描述

定义警报名称和描述

AWS CloudWatch监控配置

2.5 预览和创建

预览前三步定义的配置无误后,创建警报,完成CPUUtilization警报的整个创建过程

AWS CloudWatch监控配置

四、配置CloudWatch代理收集更多指标

默认的AWS CloudWatch提供的监控指标较少,无法满足日常监控预警的需求。因此通过配置“CloudWatch代理”来获取更多的性能监控指标。

1. CloudWatch代理可执行操作

  • 跨操作系统从 Amazon EC2 实例中收集更多系统级指标。除了 EC2 实例的指标之外,这些指标还可以包括来宾中的指标
  • 从本地服务器中收集系统级别指标。这些服务器可能包括混合环境中的服务器以及不是由 AWS 管理的服务器
  • 使用 StatsD 和 collectd 协议从应用程序或服务中检索自定义指标。StatsD 在 Linux 服务器和运行 Windows Server 的服务器上都受支持。collectd 仅在 Linux 服务器上受支持
  • 从运行 Linux 或 Windows Server 的 Amazon EC2 实例和本地服务器收集日志
  • 您可以在 CloudWatch 中存储和查看使用 CloudWatch 代理收集的指标,就像任何其他 CloudWatch 指标一样。CloudWatch 代理收集的指标的默认命名空间为 CWAgent,但您可以在配置该代理时指定不同的命名空间。

2.支持的操作系统

在以下操作系统的 AMD64 架构上支持 CloudWatch 代理:

  • Amazon Linux版本 2014.03.02 或更高版本
  • Amazon Linux 2
  • Ubuntu Server 版本 18.04、16.04 和 14.04
  • CentOS 版本 7.6、7.2、7.0、6.8 和 6.5
  • Red Hat Enterprise Linux (RHEL) 版本 8、7.6、7.5、7.4、7.2、7.0 和 6.5
  • Debian 8.0
  • SUSE Linux Enterprise Server (SLES) 版本 12 和版本 15
  • 64 位版本的 Windows Server 2019、Windows Server 2016、Windows Server 2012 和 Windows Server 2008 R2

在以下操作系统的 ARM64 架构上支持该代理:

  • Amazon Linux 2
  • Ubuntu Server 版本 18.04
  • Red Hat Enterprise Linux (RHEL) 版本 7.6
  • SUSE Linux Enterprise Server 15

3.安装CloudWatch代理

3.1下载CloudWatch代理

使用 S3 下载链接下载 CloudWatch 代理软件包

Centos:

https://s3.amazonaws.com/amazoncloudwatch-agent/centos/amd64/latest/amazon-cloudwatch-agent.rpm

Windows:

https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi

其他系统的安装包参见AWS CloudWatch用户指南中的对应链接下载。

3.2 创建IAM角色和用户以用于CloudWatch代理

要访问AWS资源,需要具有相应的权限。创建IAM角色或IAM用户,以授予CloudWatch代理将指标写入CloudWatch所需的权限。如果打算在AmazonEC2实例上使用代理,则必须创建IAM角色。如果打算在本地服务器上使用代理,则必须创建IAM用户

具体步骤如下:

(1)登录AWS管理控制台并通过以下网址打开IAM控制 https://console.aws.amazon.com/iam/

(2) 在左侧的导航窗格中,选择Roles(角色),然后选择Create role(创建角色)

AWS CloudWatch监控配置

(3) 对于Choose the service that will use this role(选择将使用此角色的服务),选择EC2 Allows EC2 instances to call AWS services on your behalf(EC2允许EC2实例代表您调用AWS服务)。选择Next: Permissions(下一步:权限)。

AWS CloudWatch监控配置

(4) 在策略列表中,选中CloudWatchAgentServerPolicy旁边的复选框。如有必要,请使用搜索框查找该策略。选择完成后下一步

AWS CloudWatch监控配置

(5) 确认Policies(策略)旁边显示CloudWatchAgentServerPolicy。在Role name(角色名称)中,输入角色的名称,例如CloudWatchAgentServerRole。(可选)为其指定说明。然后选择Create role(创建角色),将立即创建该角色。

AWS CloudWatch监控配置

(6)查看IAM角色

AWS CloudWatch监控配置

3.3 创建CloudWatch代理配置文件

在任何服务器上运行 CloudWatch 代理之前,您都必须创建 CloudWatch 代理配置文件。

代理配置文件是一个 JSON 文件,它指定了该代理要收集的指标和日志,包括自定义指标。您可以使用向导创建该文件,或者您自行从头开始创建该文件。您还可以最初使用向导创建配置文件,然后手动对其进行修改。

每次更改代理配置文件时,您必须重新启动该代理以使更改生效。

3.3.1.使用向导创建CloudWatch代理配置文件

(1)首先配置AWS Credentials,然后运行如下命令启动CloudWatch代理配置向导

Linux

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

Windows

cd “C:Program FilesAmazonAmazonCloudWatchAgent”

amazon-cloudwatch-agent-config-wizard.exe

(2)回答对应的问题以自定义服务器的配置文件

(3)如果您要在本地存储配置文件,则配置文件config.json将存储在Linux服务器上的/opt/aws/amazon-cloudwatch-agent/bin/中以及Windows服务器上的C:Program FilesAmazonAmazonCloudWatchAgent中。然后,您可以将该文件复制到要安装代理的其他服务器上。

3.3.2 手动创建或编辑CloudWatch代理配置文件

CloudWatch代理配置文件是一个JSON文件,其中包含三个部分:agent、metrics和logs。

  • agent部分包含总体代理配置的字段。如果您使用向导,则不会创建agent部分。
  • metrics部分指定要收集的自定义指标并将其发布到CloudWatch。如果只将代理用于收集日志,则可以忽略文件中的metrics部分。
  • logs部分指定要将哪些日志文件发布到CloudWatch Logs。如果服务器运行Windows Server,这可能包括Windows事件日志中的事件。

如果手动创建或编辑代理配置文件,则可以给它指定任何名称。

为了简化故障排除,建议在Linux服务器上将其命名为/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json,

在运行WindowsServer的服务器上将其命名为$Env:ProgramDataAmazonAmazonCloudWatchAgentamazon-cloudwatch-agent.json,

创建该文件后,可以将其复制到要安装代理的其他服务器上。

此次参照AWS官方提供的模板,修改及自定义了相应指标,如下:

{  "agent": {    "metrics_collection_interval": 60,    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"  },  "metrics": {    "metrics_collected": {      "cpu": {        "resources": [          "*"        ],        "measurement": [          {"name": "cpu_usage_idle", "unit": "Percent"},          {"name": "cpu_usage_iowait", "unit": "Percent"}        ],        "totalcpu": false,        "metrics_collection_interval": 60      },      "disk": {        "resources": [          "/",          "/data"        ],        "measurement": [          {"name": "free", "rename": "disk_free", "unit": "Gigabytes"},          "total",          "used"        ],         "ignore_file_system_types": [          "sysfs", "devtmpfs"        ],        "metrics_collection_interval": 60      },      "diskio": {        "resources": [          "*"        ],        "measurement": [          "reads",          "writes",          "read_time",          "write_time",          "io_time"        ],        "metrics_collection_interval": 60      },      "swap": {        "measurement": [          "swap_used",          "swap_free",          "swap_used_percent"        ]      },      "mem": {        "measurement": [          "mem_used",          "mem_cached",          "mem_free",          "mem_total",          "mem_available"        ],        "metrics_collection_interval": 60      },      "net": {        "resources": [          "eth0"        ],        "measurement": [          "bytes_sent",          "bytes_recv",          "drop_in",          "drop_out"        ]      },      "netstat": {        "measurement": [          "tcp_established",          "tcp_syn_sent",          "tcp_close"        ],        "metrics_collection_interval": 60      },      "processes": {        "measurement": [          "running",          "sleeping",          "dead"        ]      }    }  },  "logs": {    "logs_collected": {      "files": {        "collect_list": [          {            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",            "log_group_name": "amazon-cloudwatch-agent.log",            "log_stream_name": "amazon-cloudwatch-agent.log",            "timezone": "UTC"          }        ]      }    },    "log_stream_name": "mazon-cloudwatch-agent-log",    "force_flush_interval" : 60  }}

3.4 在服务器上安装和运行CloudWatch代理

此次以在1台Centos系统的EC2实例上安装CloudWatch代理为例,说明下整个步骤及配置过程

(1) 在EC2实例附加IAM角色

在需要安装CloudWatch代理的EC2主机上附加之前创建的IAM角色“CloudWatchAgentServerRole”

“实例”->“附加/替换IAM角色”

AWS CloudWatch监控配置

(2) 安装amazon-cloudwatch-agent

进入之前下载好amazon-cloudwatch-agent.rpm安装包所在目录,进行安装,命令如下:

rpm -U ./amazon-cloudwatch-agent.rpm

(3)配置agent配置文件

将之前创建的agent配置文件上传至EC2,运行如下命令:

复制配置文件至相应目录

cp ./amazon-cloudwatch-agent.json /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/

(4)加载agent配置文件并启动

/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.d/amazon-cloudwatch-agent.json -s

AWS CloudWatch监控配置

3.5 CloudWatch代理收集的指标说明

启动agent后,进入cloudwatch控制台,在指标页面可以看到收集到的自定义指标,默认名称为“CWAgent”

AWS CloudWatch监控配置

如下为CloudWatch代理收集的指标说明

Windows

通过在运行Windows Server的服务器上安装CloudWatch代理,可以收集与Windows性能监视器中的计数器关联的指标。在创建这些计数器的 CloudWatch指标名称时,将在对象名称和计数器名称之间添加空格。例如,在CloudWatch中为Processor对象的 % Interrupt Time计数器指定 Processor % Interrupt Time指标名称。有关 Windows 性能监视器计数器的更多信息,请参阅 Microsoft Windows Server 文档。

Linux

Linux实例上的CloudWatch代理收集的指标详见AWS官方文档:

https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html