最新发布《数智时代的AI人才粮仓模型解读白皮书(2024版)》,立即领取! 了解详情
写点什么

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

  • 2019-10-09
  • 本文字数:3377 字

    阅读完需:约 11 分钟

使用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 Admin Policy


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



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



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



2.安装、配置 Cloudwatch Agent 及其策略


启动一台主机,本例中使用 Amazon Linux,启动时关联角色 CloudWatchAgentAdminPolicy。


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


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


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



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



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



接下来我们安装 Cloudwatch Agent。


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



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



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



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


配置 Cloudwatch Agent 作为样例:

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


运行如下命令:


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


第一部分选择默认即可:



第二部分,根据实际情况收集:


请注意 Do you want to monitor any host metrics? E.g CPU, Memory,请选择 Yes。


本例中,metric config 选择的 Standard



所有这些配置后续都保存在本地,并可以进行编辑,所以建议选择 Yes。


在 Cloudwatch Agent 之前,AWS 通过 Cloudwatch Logs Agent 来收集相关信息,如果系统中有使用过 Cloudwatch Logs Agent 可以导入相关配置。


#Cloudwatch Logs Agent 已经被 Cloudwatch Agent 替代。



接下来就是对日志的收集,本例中我就收集了/var/log/messages,如果需要可以增加更多日志,并指定到对应的 Cloudwatch Logs Group 中。


#所有系统、应用日志都可以使用相同方式进行配置。



至此配置就完成了,配置文件以 json 格式存放在本地,并可以进行编辑。


/opt/aws/amazon-cloudwatch-agent/bin/config.json



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



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



运行命令,来启动 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 的 Metric 中,我们就可以看到此 EC2 实例的相关监控信息。比如:内存


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



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


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

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


本例中,通过部署一个 AutoScaling Group 来让所有的机器都使用前序配置的的 Cloudwatch Agent 的配置。


选择的 AMI 是标准的 Amazon Linux,IAM 角色选择前序创建的 CloudWatchAgentServerPolicy。



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


#!/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 的 Metric 的 CWAgent 分类中,会拥有更多的子分类。



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



3.变更、修改 Cloudwatch Agent 的配置信息


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


1) 对于单台机器,可以直接修改本地的 json 文件


修改方式可以直接再运行一次 wizard,或者直接修改对应的 json 文件。


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



!


2)第二种方式是修改之前生成的 参数存储 中的函数


这样所有读取此函数的实例只要再运行重新读取一次此函数就会获得最新的配置信息。这种也是我们推荐的方式,因为所有调用这个函数 EC2 主机都会更新相应的配置。



同时在对于每次修改都会记录有版本记录,



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


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


来作为样例。



可以看到在 Cloudwatch 日志组中输出了对应日志。



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/


2019-10-09 13:151375
用户头像

发布了 1835 篇内容, 共 91.9 次阅读, 收获喜欢 73 次。

关注

评论

发布
暂无评论
发现更多内容

java多线程总结

Studying_swz

Java 10月月更

Git 操作命令笔记

宇宙之一粟

git 10月月更

RxJava的操作符

急需上岸的小谢

10月月更

过去几个月,他们把数字化融进了中国经济的毛细血管

脑极体

Vue组件入门(十一)$attrs

Augus

Vue 3 10月月更

“程”风破浪的开发者|代码规范

over℡

学习方法 “程”风破浪的开发者

长安链源码分析之网络模块 net-liquid(9)

【愚公系列】2022年10月 Go教学课程 034-接口和多态

愚公搬代码

10月月更

“程”风破浪的开发者|国产数据库---达梦应用技巧及使用案例

二哈侠

数据库 学习方法 “程”风破浪的开发者

“程”风破浪的开发者|Web3.0

六月的雨在InfoQ

Web3.0 10月月更 “程”风破浪的开发者 Web1.0 Web2.0

“程”风破浪的开发者|Web3.0是什么?带你解析Web3.0

二哈侠

Web3.0 “程”风破浪的开发者 Web2.0

面试官竟然问我订单ID是怎么生成的?难道不是MySQL自增主键?

一灯架构

Java 10月月更

Web3.0 杂谈 -#007(54/100)

hackstoic

Web3.0

【Java深入学习】一个关于“锁”的程序-中

Geek_65222d

10月月更

Feign的两个调用处理器

急需上岸的小谢

10月月更

Glibc-scratch_buffer的源码分析

桑榆

源码刨析 10月月更 C++

2022-10-20:以下go语言代码输出什么?A:7;B:7.0;C:0;D:编译错误。 package main import ( “fmt“ ) func main() { const

福大大架构师每日一题

golang 福大大 选择题

群晖(Synology)NAS 安装 MongoDB

HoneyMoose

一篇文章讲清楚MySQL的聚簇/联合/覆盖索引、回表、索引下推

一灯架构

Java 10月月更

长安链源码分析之网络模块 net-liquid(10)

docker学习笔记(三)

Studying_swz

10月月更

docker学习笔记(四)

Studying_swz

Docker 10月月更

长安链源码分析之网络模块 net-liquid(8)

详解CAN总线:CAN总线故障界定与管理

不脱发的程序猿

汽车电子 CAN总线 CAN总线故障界定 CAN错误故障诊断

Spring Batch 中的 chunk

HoneyMoose

长安链源码分析之网络模块 net-liquid(11)

Excel 的基本概念以及 Excel 文件的创建

二哈侠

Python Excel 10月月更

“程”风破浪的开发者|Web 1.0、Web 2.0 和 Web 3.0 之间的比较

海拥(haiyong.site)

Web3.0 “程”风破浪的开发者

MySQL索引底层为什么用B+树?看完这篇文章,轻松应对面试

一灯架构

Java 10月月更

feign client客户端的自动装配

急需上岸的小谢

10月月更

YARN基本架构

穿过生命散发芬芳

YARN 10月月更

使用Cloudwatch Agent在Cloudwatch中收集、展现EC2的内存及系统、应用日志_语言 & 开发_亚马逊云科技 (Amazon Web Services)_InfoQ精选文章