使用 Cloudwatch Agent 在 Cloudwatch 中收集、展现 EC2 的内存及系统、应用日志

阅读数:72 2019 年 10 月 9 日 13:15

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

背景介绍:

默认情况下,AWS 的监控服务 Cloudwatch 并没有对 EC2 内的内存总量和使用情况进行监控,因为内存属于用户操作系统内的信息,在 AWS 的产品设计中,所有系统内的信息都属于用户的私有财产和信息。所以默认情况下,AWS 的 Cloudwatch 不收集相关信息。

但在实际使用的项目中,以内存监控为代表的系统、应用层面的监控是系统监控中的非常重要的一环,所以 AWS 提供了 Cloudwatch Agent 来帮助用户将 EC2 实例中的系统层面的信息,如:内存及其他相关信息通过 Cloudwatch 展现出来,这些信息的访问权仍然属于用户自己。

事实上,Cloudwatch Agent 不仅仅能够收集内存信息,还能在更多系统层面收集信息,比如: CPU Active/Idle time,Disk IO Time,Network 的包转发数等等,相比 EC2 的默认 Cloudwatch,它可以提供更为详细和多样性的监控。

同时通过 Cloudwatch Agent 还可以对系统中的各种日志进行统一的收集并存放至 Cloudwatch Logs 中,方便用户后续的分析等操作,这些收集的信息的访问权仍然属于用户自己。

https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/metrics-collected-by-CloudWatch-agent.html

目前 Cloudwatch Agent 支持以下操作系统:

  • Amazon Linux 版本 03.02 或更高版本
  • Amazon Linux 2
  • Ubuntu Server 版本 04 和 14.04
  • CentOS 版本 0 和 6.5
  • Red Hat Enterprise Linux (RHEL) 版本 5、7.4、7.0 和 6.5
  • Debian 8.0
  • SUSE Linux Enterprise Server (SLES) 12 或更高版本
  • 64 位版本的 Windows Server 2016、Windows Server 2012 和 Windows Server 2008

本文档将介绍如何在 EC2 上安装、配置、分发 Cloudwatch Agent 并通过 Cloudwatch 和 Cloudwatch Logs 展现相关的信息和日志。

本文档将主要使用到 AWS Cloudwatch 和 System Manager 服务(简称 SSM)。

准备工作:

1. 在 IAM 中创建 2 个 Role,分别用户创建 Cloudwatch Agent 策略和使用 Cloudwatch Agent 策略

  • CloudWatch Agent Admin Policy:用于创建 Cloudwatch Agent 模版并保存至 System Manager 中。

对于 Choose the service that will use this role,选择 EC2 Allows EC2 instances to call AWS services on your behalf。选择 Next: Permissions (下一步: 权限)。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

配置角色名称:CloudWatch Agent Admin Policy

创建完成之后,再添加策略 CloudWatch Agent Admin Policy 到角色中。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

复制代码
#请注意创建的 SSM 的 参数存储名将会以 AmazonCloudwatch- 开头,如果需要用自定义前缀名称,请修改对应策略。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

参考上述步骤,创建另外一个 Role 专门用于使用此策略的 Role。差别仅为 Cloudwatch 策略改为:CloudWatchAgentServerPolicy

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

2. 安装、配置 Cloudwatch Agent 及其策略
启动一台主机,本例中使用 Amazon Linux,启动时关联角色 CloudWatchAgentAdminPolicy。

并在用户数据中对 amazon-ssm-agent 进行更新。

复制代码
#!/bin/bash
yum update -y amazon-ssm-agent
yum -y install collectd

###Collectd 如果不安装可能会遇到 Cloudwatch agent 启动失败的问题。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

为了方便管理,配置了标签。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在 EC2 启动后,我们可以在服务 AWS System Manager 的托管实例中,可以看到此 EC2 实例已经被关联。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

接下来我们安装 Cloudwatch Agent。

选择 运行命令,选择 AWS-ConfigureAWSPackage,

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在名称 中输入 AmazonCloudWatchAgent,然后点击运行

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

系统会很快完成运行,并给予输出结果。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

可以看到当前的 Cloudwatch Agent 版本为 1.2.0.6336。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

配置 Cloudwatch Agent 作为样例:

登陆对应的 EC2,开始配置需要通过 Cloudwatch 进行监控的指标。

运行如下命令:

复制代码
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

第一部分选择默认即可:

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志
第二部分,根据实际情况收集:
请注意 Do you want to monitor any host metrics? E.g CPU, Memory, 请选择 Yes。
本例中,metric config 选择的 Standard

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

所有这些配置后续都保存在本地,并可以进行编辑,所以建议选择 Yes。
在 Cloudwatch Agent 之前,AWS 通过 Cloudwatch Logs Agent 来收集相关信息,如果系统中有使用过 Cloudwatch Logs Agent 可以导入相关配置。
#Cloudwatch Logs Agent 已经被 Cloudwatch Agent 替代。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

接下来就是对日志的收集,本例中我就收集了 /var/log/messages,如果需要可以增加更多日志,并指定到对应的 Cloudwatch Logs Group 中。
#所有系统、应用日志都可以使用相同方式进行配置。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

至此配置就完成了,配置文件以 json 格式存放在本地,并可以进行编辑。
/opt/aws/amazon-cloudwatch-agent/bin/config.json

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

同时可以把所有的配置文件保存到 SSM 的 参数存储 中,这样其他 EC2 只要拥有权限就可以进行获取,而无需再进行配置。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

回到 SSM 的控制台,可以看到刚才创建的 参数存储 已经存在。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

运行命令,来启动 Cloudwatch Agent 服务。

复制代码
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-linuxsample -s
#请记住这个名字 AmazonCloudWatch-linuxsample,后续需要使用

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

可以看到 Cloudwatch Agent 已经正常工作。
同时使用此命令后,主机重启此服务会自动启动保持工作状态。

等待几分钟,在 Cloudwatch 的 Metric 中,我们就可以看到此 EC2 实例的相关监控信息。比如:内存

复制代码
#Cloudwatch 会增加一个新的分类:CWAgent

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在 Cloudwatch Logs Group 中就可以看到此 EC2 实例的 /var/logs/messages 的信息

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在其他 EC2 上配置 Cloudwatch Agent 来收集信息:

后续如果要使用 Cloudwatch Agent 及相同配置,则只需要在对应的 EC2 实例中安装 Cloudwatch Agent 并对应 参数存储 中的函数进行调用即可。

本例中,通过部署一个 AutoScaling Group 来让所有的机器都使用前序配置的的 Cloudwatch Agent 的配置。
选择的 AMI 是标准的 Amazon Linux,IAM 角色选择前序创建的 CloudWatchAgentServerPolicy。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在用户数据中,配置如下信息:

复制代码
#!/bin/bash
yum update -y amazon-ssm-agent
yum -y install collectd
wget https://s3.cn-north-1.amazonaws.com.cn/amazoncloudwatch-agent/amazon_linux/amd64/latest/amazon-cloudwatch-agent.rpm
rpm -U ./amazon-cloudwatch-agent.rpm
/opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-linuxsample -s
#本例中使用了前序配置的 SSM 参数存储 中的配置信息,本例为:AmazonCloudWatch-linuxsample。

当启动完成之后,

在 Cloudwatch Logs Group 中,新创建的 EC2 实例的相关信息自动更新到其中。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

在 Cloudwatch 的 Metric 的 CWAgent 分类中,会拥有更多的子分类。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

对于 AutoScaling Group 则会把相关信息归类到其子分类中。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

3. 变更、修改 Cloudwatch Agent 的配置信息
对于 Cloudwatch 的配置文件因为存放在 2 个地方本地 json 和 SSM 参数存储中,同样有 2 种修改方式:

1) 对于单台机器,可以直接修改本地的 json 文件
修改方式可以直接再运行一次 wizard,或者直接修改对应的 json 文件。

复制代码
#修改了的文件就和前序的 参数存储 将无关。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志!

2) 第二种方式是修改之前生成的 参数存储 中的函数
这样所有读取此函数的实例只要再运行重新读取一次此函数就会获得最新的配置信息。这种也是我们推荐的方式,因为所有调用这个函数 EC2 主机都会更新相应的配置。

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

同时在对于每次修改都会记录有版本记录,
使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

本例中,我增加了下面两个配置:

复制代码
/var/log/secure 和 metric 中的 mem_used

来作为样例。
使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志
可以看到在 Cloudwatch 日志组中输出了对应日志。
使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志

CWAgent 的在 Cloudwatch 中也输出了对应的 mem_used 指标。

根据需要可以把所有这些监控的指标保存到 Cloudwatch 控制面板中, 这样方便后续的持续跟踪。

相关文章:
https://docs.amazonaws.cn/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html

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

https://docs.amazonaws.cn/systems-manager/latest/userguide/sysman-install-ssm-agent.html

作者介绍:

钱凯
AWS 解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计. 在加入 AWS 之前曾在 HP、Citrix 服务多年,熟悉传统虚拟化、虚拟桌面、微软 Windows 等产品。

本文转载自 AWS 技术博客。

原文链接:
https://amazonaws-china.com/cn/blogs/china/cloudwatch-agent-in-cloudwatch-ec2-rom/

欲了解 AWS 的更多信息,请访问【AWS 技术专区】

评论

发布