使用 Terraform 安装 Cloudwatch Agent
installing Cloudwatch Agent with Terrafom
有谁知道在通过 terraform template/configuration 启动 EC2 实例时自动在 EC2 实例上安装 Cloudwatch 代理的方法?
是的,这可以通过 Bash 脚本实现(假设 Linux)
要考虑的步骤
- 创建UserData.sh文件
- 使用模板文件 link userdata.sh 启动模板
- 写入用户数据以安装 AWS Cloudwatch 代理 (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)
- Terminate/create 实例
- 检查cloudwatch代理是否已安装,启动并运行
systemctl status amazon-cloudwatch-agent
我自己刚刚经历了这个过程,如果有清晰的指导,我会受益匪浅。所以这是我尝试提供一个(对于 Amazon Linux 2 AMI):
- 创建您的 Cloudwatch 代理配置 json 文件,它定义了您要收集的指标。最简单的方法是通过 SSH 连接到您的 EC2 实例,然后 运行 此命令使用向导生成文件:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
。这是我的文件的样子,它是最基本的配置,每 60 秒仅收集一次磁盘和内存使用情况指标:
{
"agent": {
"metrics_collection_interval": 60,
"region": "eu-west-1",
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"run_as_user": "root"
},
"metrics": {
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
- 创建一个 shell 脚本模板文件,该文件将在创建 EC2 实例时 运行。这是我的样子,叫做userdata.sh.tpl:
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0
--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
# Install Cloudwatch agent
sudo yum install -y amazon-cloudwatch-agent
# Write Cloudwatch agent configuration file
sudo cat >> /opt/aws/amazon-cloudwatch-agent/bin/config_temp.json <<EOF
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
EOF
# Start Cloudwatch agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
--==BOUNDARY==--
- 在您的 terraform 模块目录中创建一个名为 templates 的目录,并将 userdata.sh.tpl 文件存储在其中。
- 在适当的 .tf 文件中创建一个数据块,如下所示:
data "template_file" "user_data" {
template = file("${path.module}/templates/userdata.sh.tpl")
vars = {
...
}
}
- 在您的 aws_launch_configuration 块中,为 user_data 变量传入以下值:
resource "aws_launch_configuration" "example" {
name = "example_server_name"
image_id = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
user_data = data.template_file.user_data.rendered
}
将 CloudWatchAgentServerPolicy 策略添加到您的 EC2 服务器使用的 IAM 角色。这将为您的角色提供所有必需的服务级别权限,例如"cloudwatch:PutMetricData"
.
重新启动您的 EC2 服务器,并打开 SSH 以检查是否安装了 CloudWatch 代理并使用 systemctl status amazon-cloudwatch-agent.service
运行ning
从左侧菜单导航到 CloudWatch UI 和 select 指标。您应该在命名空间列表中看到 CWAgent。
有谁知道在通过 terraform template/configuration 启动 EC2 实例时自动在 EC2 实例上安装 Cloudwatch 代理的方法?
是的,这可以通过 Bash 脚本实现(假设 Linux)
要考虑的步骤
- 创建UserData.sh文件
- 使用模板文件 link userdata.sh 启动模板
- 写入用户数据以安装 AWS Cloudwatch 代理 (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)
- Terminate/create 实例
- 检查cloudwatch代理是否已安装,启动并运行
systemctl status amazon-cloudwatch-agent
我自己刚刚经历了这个过程,如果有清晰的指导,我会受益匪浅。所以这是我尝试提供一个(对于 Amazon Linux 2 AMI):
- 创建您的 Cloudwatch 代理配置 json 文件,它定义了您要收集的指标。最简单的方法是通过 SSH 连接到您的 EC2 实例,然后 运行 此命令使用向导生成文件:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
。这是我的文件的样子,它是最基本的配置,每 60 秒仅收集一次磁盘和内存使用情况指标:
{
"agent": {
"metrics_collection_interval": 60,
"region": "eu-west-1",
"logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
"run_as_user": "root"
},
"metrics": {
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
- 创建一个 shell 脚本模板文件,该文件将在创建 EC2 实例时 运行。这是我的样子,叫做userdata.sh.tpl:
Content-Type: multipart/mixed; boundary="==BOUNDARY=="
MIME-Version: 1.0
--==BOUNDARY==
Content-Type: text/x-shellscript; charset="us-ascii"
#!/bin/bash
# Install Cloudwatch agent
sudo yum install -y amazon-cloudwatch-agent
# Write Cloudwatch agent configuration file
sudo cat >> /opt/aws/amazon-cloudwatch-agent/bin/config_temp.json <<EOF
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
EOF
# Start Cloudwatch agent
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json
--==BOUNDARY==--
- 在您的 terraform 模块目录中创建一个名为 templates 的目录,并将 userdata.sh.tpl 文件存储在其中。
- 在适当的 .tf 文件中创建一个数据块,如下所示:
data "template_file" "user_data" {
template = file("${path.module}/templates/userdata.sh.tpl")
vars = {
...
}
}
- 在您的 aws_launch_configuration 块中,为 user_data 变量传入以下值:
resource "aws_launch_configuration" "example" {
name = "example_server_name"
image_id = data.aws_ami.ubuntu.id
instance_type = "t2.micro"
user_data = data.template_file.user_data.rendered
}
将 CloudWatchAgentServerPolicy 策略添加到您的 EC2 服务器使用的 IAM 角色。这将为您的角色提供所有必需的服务级别权限,例如
"cloudwatch:PutMetricData"
.重新启动您的 EC2 服务器,并打开 SSH 以检查是否安装了 CloudWatch 代理并使用
运行ningsystemctl status amazon-cloudwatch-agent.service
从左侧菜单导航到 CloudWatch UI 和 select 指标。您应该在命名空间列表中看到 CWAgent。