【问题标题】:installing Cloudwatch Agent with Terrafom使用 Terraform 安装 Cloudwatch 代理
【发布时间】:2021-06-08 07:56:37
【问题描述】:

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

【问题讨论】:

    标签: amazon-web-services terraform amazon-cloudwatch


    【解决方案1】:

    是的,这可以通过 Bash 脚本来实现(假设是 Linux)

    考虑的步骤

    1. 创建 UserData.sh 文件
    2. 使用模板文件将 userdata.sh 链接到启动模板
    3. 写入用户数据以安装 AWS Cloudwatch 代理 (https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/install-CloudWatch-Agent-on-EC2-Instance.html)
    4. 终止/创建实例
    5. 检查 cloudwatch 代理是否已安装、启动并运行systemctl status amazon-cloudwatch-agent

    【讨论】:

    【解决方案2】:

    我自己刚刚经历了这个过程,如果有一个清晰的指南,我会从中受益的。所以这是我尝试提供一个(用于 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
                        }
                }
        }
    }
    
    1. 创建一个将在创建 EC2 实例时运行的 shell 脚本模板文件。这就是我的样子,它被称为 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==--
    
    1. 在您的 terraform 模块目录中创建一个名为 templates 的目录,并将 userdata.sh.tpl 文件存储在其中。
    2. 在适当的 .tf 文件中创建一个数据块,如下所示:
    data "template_file" "user_data" {
      template = file("${path.module}/templates/userdata.sh.tpl")
    
      vars = {
        ...
      }
    }
    
    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
    }
    
    1. CloudWatchAgentServerPolicy 策略添加到您的 EC2 服务器使用的 IAM 角色。这将为您的角色提供所有必需的服务级别权限,例如"cloudwatch:PutMetricData".

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

    3. 导航到 CloudWatch UI,然后从左侧菜单中选择 Metrics。您应该会在命名空间列表中看到 CWAgent

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2021-11-25
      • 2020-09-07
      • 1970-01-01
      • 1970-01-01
      • 2019-12-26
      • 2017-10-19
      • 2017-07-07
      • 1970-01-01
      相关资源
      最近更新 更多