使用 Terrafom 安装 Cloudwatch Agent

Nid*_*o94 2 amazon-web-services amazon-cloudwatch terraform

有谁知道如何在 EC2 实例上自动安装 Cloudwatch 代理,同时通过 terraform 上的启动模板/配置启动它们?

MD1*_*357 9

我自己刚刚经历了这个过程,并且会从清晰的指南中受益。因此,我尝试提供一个(针对 Amazon Linux 2 AMI):

  1. 创建 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
                    }
            }
    }
}
Run Code Online (Sandbox Code Playgroud)
  1. 创建一个 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==--
Run Code Online (Sandbox Code Playgroud)
  1. 在 terraform 模块目录中创建一个名为templates的目录,并将userdata.sh.tpl文件存储在其中。
  2. 在适当的 .tf 文件中创建数据块,如下所示:
data "template_file" "user_data" {
  template = file("${path.module}/templates/userdata.sh.tpl")

  vars = {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)
  1. 在 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
}
Run Code Online (Sandbox Code Playgroud)
  1. CloudWatchAgentServerPolicy策略添加到 EC2 服务器使用的 IAM 角色。这将为您的角色提供所有必需的服务级别权限,例如"cloudwatch:PutMetricData"

  2. 重新启动您的 EC2 服务器,并使用 SSH 检查 CloudWatch 代理是否已安装并正在运行systemctl status amazon-cloudwatch-agent.service

  3. 导航到 CloudWatch UI 并从左侧菜单中选择指标。您应该在命名空间列表中看到CWAgent 。