EC2安装CloudWatch Agent自定义监控指标

Amazon CloudWatch是一项针对AWS上运行的应用程序的监控服务。使用Amazon CloudWatch可以收集和跟中指标、收集和监控日志文件以及设置警报。Amazon CloudWatch可以监控各种AWS资源,例如Amazon EC2实例、Amazon DynamoDB表、Amazon RDS数据库实例、应用程序和服务生成的自定义指标以及应用程序生成的所有日志文件。

随着业务需求越来越大,客户需要进步详细的监控某些资源的使用情况,比如需要监控EC2内存的总量和使用情况进行监控,默认情况下,CloudWatch是没有对这些指标进行监控的,因为内存属于用户操作系统内的信息,在AWS的产品设计中,所有系统内的信息都属于用户的私有财产和信息。所以默认情况下,AWS的CloudWatch不收集相关信息。但在实际使用的项目中,以内存监控为代表的系统、应用层面的监控是系统监控中非常重要的一环,所以AWS CloudWatch Agent来帮助用户监控EC2实例中的更多的系统层面的信息,如:内存、CPU、Disk、Network等信息。同时通过CloudWatch Agent还可以对系统中的各种日志进行统一的收集并存放至CloudWatch Log中,方便用户后续的分析等操作。

本文档主要指引如何为EC2实例安装cloudwatch agent自定义监控指标,监控内存使用率、磁盘使用率等

前期准备

  • 创建好自己的VPC;
  • 启动一台EC2;

实验步骤

EC2附加具有相应策略的角色

登录到AWS 控制台 创建IAM角色

登入亚马逊控制台,点击上方Services,搜索IAM

如下图 红圈处1

1.左边导航栏选中”角色” - 如下图 红圈1

2.点击上方“创建角色” - 如下图 红圈2

3.在”可信实体类型”选择”亚马逊服务” 如下图 红圈处1

4.选择”EC2”点击 - 如下图 红圈2

5.点击右下角”下一步” - 如下图 红圈3

6.在红框内搜索策略Cloudwatchagent

7.选择添加CloudWatchAgentServerPolicyCloudWatchAgentAdminPolicy策略,点击”下一步”

8.给角色起一个名称,这里是”Ec2-Cloudwatchagent” - 如下图 红圈1

9.点击”创建角色” - 如下图 红圈2

角色创建完成

将该角色附加到EC2

1.在控制台打开EC2服务,选择右边”实例”

如下图 红圈1

2.选择需要监控的EC2实例 - 如下图 红圈2

3.点击操作按钮 - 如下图 红圈3

4.点击”安全” - 如下图 红圈1

5.点击”修改IAM角色”选择 - 如下图 红圈2

6.选择刚才创建的IAM角色,点击保存,这样就把有相关权限的角色附加到EC2实例,前期准备工作完成。

安装CloudWatchAgent代理

登录到EC2实例,安装和配置CloudWatchAgent

输入命令sudo yum update,更新实例

如下图 红圈处1

2.输入以下命令,下载cloudwatch代理软件包

如下图 红圈处2

1
wegt - https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm

3.输入命令 sudo rpm -U ./amazon-cloudwatch-agent.rpm安装软件包。

4.输入以下命令进入到目录

1
cd /opt/aws/amazon-cloudwatch-agent/etc/

5.手动创建或编辑cloudwatch代理配置文件

1
sudo vim amazon-cloudwatch-agent.json

6.编辑Cloudwatch代理配置文件(配置文件链接已附上,需要请在最下面提取),其中“metrics”模块为监控指标

7.保存并推出。

8.依次输入红圈处的命令,将刚创建的json文件复制移动到doc目录下,并将原先doc目录下”amazon-cloudwatch-agent-schema.json”文件删除,重命名amazon-cloudwatch-agent.json为amazon-cloudwatch-agent-schema.json

9.输入以下命令,启动CloudWatchAgent

如下图 红圈处

1
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -s -c file:/opt/aws/amazon-cloudwatch-agent/doc/amazon-cloudwatch-agent-schema.json

ps:如果显示缺少什么文件,如下图所示

image-20220523140754170

10.输入以下命令,检查是否启动成功

1
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status

11.看到”status”:”running”,表示启动成功

如下图 红圈处

查看监控情况

登录cloudwatch控制台,查看监控指标

1.先打开EC2服务,复制EC2的实例ID

2.搜索服务cloudwatch 如图红圈1处

3.在打开的页面点击“全部指标” 如图红圈2处

4.在“指标”信息栏搜索框处,输入刚才的EC2实例ID 如图红圈处3

5.到这里,我们就可以根据需要,选择查看各指标监控情况。

可以看到服务了。

在本地服务器收集指标

流程:在创建所需的代理配置文件并创建 IAM 角色或 IAM 用户后,使用该配置执行以下步骤在服务器上安装和运行代理。首先,将 IAM 角色或 IAM 用户附加到将要运行代理的服务器上。然后,在该服务器上,下载代理软件包并使用您创建的代理配置文件启动它。这里以x86-64架构的centos7为例,进行说明

指定 IAM 凭证和 AWS 区域

要使 CloudWatch 代理能够从本地部署服务器发送数据,您必须指定先前创建的 IAM 用户的访问密钥和私有密钥。有关创建此用户的更多信息,请参阅创建 IAM 角色和用户以用于 CloudWatch 代理

创建 CloudWatch 代理在本地部署服务器上运行所需的 IAM 用户

  1. 登录 AWS Management Console,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/。

    image-20220523132738388

  2. 在左侧的导航窗格中,选择 Users(用户),然后选择 Add user(添加用户)。

    image-20220523132826243

  3. 为新用户输入用户名。这里设定为LocalCloudwatcher,选择 Access key - Programmatic access(访问密钥 - 编程访问),然后选择 Next: Permissions(下一步: 权限)。

    image-20220523140920947

  4. 选择 Attach existing policies directly(直接附上现有策略)。

    image-20220523132957909

  5. 在策略列表中,选中 CloudWatchAgentServerPolicy 旁边的复选框。如有必要,请使用搜索框查找该策略。

    image-20220523133015728

  6. (可选)请选择下一步:标签。可以选择为新 IAM 用户创建标签,然后选择 Next: Review(下一步: 审核)。

  7. 确认列出了正确的策略,然后选择 Create user(创建用户)。

  8. 选择下载csv文件,这里的csv文件就是我们的新建用户的aksk。

    image-20220523133112133

服务器安装AWS CLI

1
2
3
4
5
6
rm -rf /bin/aws
rm -rf /bin/aws*
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
ln -s /usr/local/bin/aws /bin/aws

安装完毕之后,测试是否安装成功

image-20220523133520999

指定IAM凭证与AWS区域

您还必须使用 AWS 配置文件的 [AmazonCloudWatchAgent] 部分中的 region 字段指定要将指标发送到的 AWS 区域,如以下示例中所示。

1
2
3
[profile AmazonCloudWatchAgent]

region = us-west-1

下面是使用 aws configure 命令为 CloudWatch 代理创建命名配置文件的示例。该示例假设您使用默认配置文件名称 AmazonCloudWatchAgent

为 CloudWatch 代理创建 AmazonCloudWatchAgent 配置文件

在 Linux 服务器上,输入以下命令并按照提示进行操作:

1
sudo aws configure --profile AmazonCloudWatchAgent

按照显示的顺序依次将之前下载的csv文件中的内容填入

1
2
3
4
AWS Access Key ID [None]: <access key>
AWS Secret Access Key [None]: <secret key>
Default region name [None]: <region>
Default output format [None]: json

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

您需要在将要运行代理的每个服务器上安装代理。

不同系统的软件包链接如下表所示:
对于每个软件包下载链接,有一个常规链接以及每个区域的链接。

架构 平台 下载链接 区域下载链接
x86-64 Amazon Linux 和 Amazon Linux 2 https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
x86-64 Centos https://s3.amazonaws.com/amazoncloudwatch-agent/centos/amd64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/centos/amd64/latest/amazon-cloudwatch-agent.rpm
x86-64 Redhat https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/amd64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/redhat/amd64/latest/amazon-cloudwatch-agent.rpm
x86-64 SUSE https://s3.amazonaws.com/amazoncloudwatch-agent/suse/amd64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/suse/amd64/latest/amazon-cloudwatch-agent.rpm
x86-64 Debian https://s3.amazonaws.com/amazoncloudwatch-agent/debian/amd64/latest/amazon-cloudwatch-agent.deb https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/debian/amd64/latest/amazon-cloudwatch-agent.deb
x86-64 Ubuntu https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
x86-64 Oracle https://s3.amazonaws.com/amazoncloudwatch-agent/oracle_linux/amd64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/oracle_linux/amd64/latest/amazon-cloudwatch-agent.rpm
x86-64 macOS https://s3.amazonaws.com/amazoncloudwatch-agent/darwin/amd64/latest/amazon-cloudwatch-agent.pkg https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/darwin/amd64/latest/amazon-cloudwatch-agent.pkg
x86-64 Windows https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/windows/amd64/latest/amazon-cloudwatch-agent.msi
ARM64 Amazon Linux 2 https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/arm64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/amazon_linux/arm64/latest/amazon-cloudwatch-agent.rpm
ARM64 Redhat https://s3.amazonaws.com/amazoncloudwatch-agent/redhat/arm64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/redhat/arm64/latest/amazon-cloudwatch-agent.rpm
ARM64 Ubuntu https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/ubuntu/arm64/latest/amazon-cloudwatch-agent.deb
ARM64 SUSE https://s3.amazonaws.com/amazoncloudwatch-agent/suse/arm64/latest/amazon-cloudwatch-agent.rpm https://s3.`region`.amazonaws.com/amazoncloudwatch-agent-`region`/suse/arm64/latest/amazon-cloudwatch-agent.rpm

使用命令行在 Amazon EC2 实例上安装 CloudWatch 代理

下载 CloudWatch 代理。对于 Linux 服务器,请输入以下命令。对于 download-link,请使用上表中的相应下载链接。

1
2
[root@localhost ~]# cd /home/
[root@localhost home]# wget https://s3.amazonaws.com/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm

安装 软件包。如果已在 Linux 服务器上下载 RPM 程序包,请更改为包含程序包的目录,并输入以下内容:

1
[root@localhost home]# sudo rpm -U ./amazon-cloudwatch-agent.rpm

使用命令行启动 CloudWatch 代理

可以执行以下步骤以使用命令行在服务器上启动 CloudWatch 代理。

首先设置Cloudwatch配置文件,这个配置文件的内容指定获取以下指标:disk、diskio、mem。

1
vi /opt/aws/amazon-cloudwatch-agent/doc/config.json

内容如附件

启动代理软件

1
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m onPremise -s -c file:/opt/aws/amazon-cloudwatch-agent/doc/cnfig.json

如果显示 由于缺少文件导致启动失败,则手动创建缺少的文件

image-20220523135509293

1
2
[root@localhost ~]# mkdir /usr/share/collectd
[root@localhost ~]# touch /usr/share/collectd/types.db

重新启动 ,启动成功。

image-20220523135645628

查看指标

等待一两分钟之后,查看cloudwatch的所有指标。

image-20220523135803874

可以看到Local/Centos已经有了。等待几分钟之后,查看指标,发现数据已经发送上来了。

image-20220523140237889

Windows 安装cloudwatch Agent

Windows 安装代理

前面介绍了如何在Linux上面安装代理,这里介绍如何在windows上安装代理

PS:以下操作全在具备管理员权限的Powershell脚本中运行

image-20220614212824200

操作Aws 上的主机

创建Role

如Linux Ec2 所示操作

将该角色附加到EC2

如Linux Ec2所示操作

操作本地Windows 服务器

参考服务器安装AWS CLI

在windows主机上下载Cloudwatch Agent

下载链接

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

安装运行,可以直接通过命令行下载并安装

1
2
Invoke-WebRequest -Uri https://s3.amazonaws.com/amazoncloudwatch-agent/windows/amd64/latest/amazon-cloudwatch-agent.msi -OutFile $env:USERPROFILEDownloadsamazon-cloudwatch-agent.msi -UseBasicParsing
Invoke-Item $env:USERPROFILEDownloadsamazon-cloudwatch-agent.msi

image-20220614212802527

将配置文件复制进去,执行命令,需要注意的是

1
& $env:ProgramFiles\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:/path/to/config.json -s

config.json内容,如附录Windows Config配置文件所示,需要修改的地方为namespace_name,修改为Lianbio/DC,或者其他命名空间。

image-20220614213209334

附页

Cloudwatch agent 可以采集的指标 https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html

为EC2安装CloudWatch Agent自定义监控指标 https://www.ecloudrover.com/h-nd-180.html#_np=21_2595

Windows Config配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
{
"metrics": {
"namespace": "<namespace_name>",
"aggregation_dimensions": [
[
"InstanceId"
]
],
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"% Disk Time",
"Disk Write Bytes/sec",
"Disk Read Bytes/sec",
"Disk Writes/sec",
"Disk Reads/sec"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% User Time",
"% Idle Time",
"% Interrupt Time"
],
"metrics_collection_interval": 60,
"resources": [
"_Total"
]
},
"TCPv4": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
},
"TCPv6": {
"measurement": [
"Connections Established"
],
"metrics_collection_interval": 60
},
"statsd": {
"metrics_aggregation_interval": 60,
"metrics_collection_interval": 10,
"service_address": ":8125"
}
}
}
}

Linux Config 配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"namespace": "Local/Centos",
"metrics_collected": {
"collectd": {
"metrics_aggregation_interval": 60
},
"disk": {
"drop_device": true,
"ignore_file_system_types": [
"sysfs",
"tmpfs",
"devtmpfs"
],
"measurement": [
"free",
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"read_bytes",
"write_bytes"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
}
}
}
}