[Shell Script] CloudWatch Agent 설치부터 시작까지 스크립트로 자동화

HYEOB KIM·2022년 6월 15일
1

aws

목록 보기
36/62

개요

  • CloudWatch Agent를 사용하기까지 각 단계를 스크립트로 자동화 해보겠습니다. 콘솔에서 다뤄본 내용은 아래와 같습니다.
  1. cloudwatch agent 설치
  2. cloudwatch agent 구성 파일 생성 및 편집
  3. cloudwatch agent 시작

스크립트

핵심 부분

  • 여기서 스크립트의 핵심은 구성 파일 생성 부분입니다. 그냥 cat << EOF 명령 시 Permission denied 에러가 발생했고, 해결 방법은 bash -c를 이용하는 것입니다.
  • 그리고 구성 파일에 JSON을 입력하는 과정에서 ${} 형식을 입력 시 bash 스크립트가 변수로 인식하기 때문에 JSON 파일에 ${}를 그대로 입력하고 싶다면, $${} 형식으로 $를 두 번 입력해야 정상적으로 인식됩니다.
  • 구성 파일은 agent, metrics, logs 섹션으로 나뉘어져 있습니다. 각 항목의 속성에 대한 자세한 설명은 AWS 공식 문서를 참고하세요.
#!/bin/bash

echo "
#### install cloudwatch-agent ####
...
"
sudo yum install amazon-cloudwatch-agent -y
echo "
Success!
"

echo "
#### Create amazon-cloudwatch-agent.json ####
...
"
sudo touch /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
sudo bash -c 'cat << EOF > /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json
{
  "agent": {
    "metrics_collection_interval": 10,
    "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
  },
  "metrics": {
    "namespace": "MyCustomNamespace",
    "metrics_collected": {
      "cpu": {
        "resources": [
          "*"
        ],
        "measurement": [
          {
            "name": "cpu_usage_idle",
            "rename": "CPU_USAGE_IDLE",
            "unit": "Percent"
          },
          {
            "name": "cpu_usage_nice",
            "unit": "Percent"
          },
          "cpu_usage_guest"
        ],
        "totalcpu": false,
        "metrics_collection_interval": 10,
        "append_dimensions": {
          "customized_dimension_key_1": "customized_dimension_value_1",
          "customized_dimension_key_2": "customized_dimension_value_2"
        }
      },
      "disk": {
        "resources": [
          "/",
          "/tmp"
        ],
        "measurement": [
          {
            "name": "free",
            "rename": "DISK_FREE",
            "unit": "Gigabytes"
          },
          "total",
          "used"
        ],
        "ignore_file_system_types": [
          "sysfs",
          "devtmpfs"
        ],
        "metrics_collection_interval": 60,
        "append_dimensions": {
          "customized_dimension_key_3": "customized_dimension_value_3",
          "customized_dimension_key_4": "customized_dimension_value_4"
        }
      },
      "diskio": {
        "resources": [
          "*"
        ],
        "measurement": [
          "reads",
          "writes",
          "read_time",
          "write_time",
          "io_time"
        ],
        "metrics_collection_interval": 60
      },
      "swap": {
        "measurement": [
          "swap_used",
          "swap_free",
          "swap_used_percent"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used",
          "mem_cached",
          "mem_total"
        ],
        "metrics_collection_interval": 1
      },
      "net": {
        "resources": [
          "eth0"
        ],
        "measurement": [
          "bytes_sent",
          "bytes_recv",
          "drop_in",
          "drop_out"
        ]
      },
      "netstat": {
        "measurement": [
          "tcp_established",
          "tcp_syn_sent",
          "tcp_close"
        ],
        "metrics_collection_interval": 60
      },
      "processes": {
        "measurement": [
          "running",
          "sleeping",
          "dead"
        ]
      }
    },
    "append_dimensions": {
      "ImageId": "$${aws:ImageId}",
      "InstanceId": "$${aws:InstanceId}",
      "InstanceType": "$${aws:InstanceType}",
      "AutoScalingGroupName": "$${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions": [
      [
        "ImageId"
      ],
      [
        "InstanceId",
        "InstanceType"
      ],
      [
        "d1"
      ],
      []
    ],
    "force_flush_interval": 30
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
            "log_group_name": "amazon-cloudwatch-agent.log",
            "log_stream_name": "amazon-cloudwatch-agent.log",
            "timezone": "UTC"
          },
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log",
            "log_group_name": "test.log",
            "log_stream_name": "test.log",
            "timezone": "Local"
          }
        ]
      }
    },
    "log_stream_name": "my_log_stream_name",
    "force_flush_interval": 15
  }
}
EOF'


echo "
Success!
"

echo "
#### 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/etc/amazon-cloudwatch-agent.json
sudo systemctl status amazon-cloudwatch-agent
echo "
Success!
"
profile
Devops Engineer

0개의 댓글