본문 바로가기
Web/AWS

[ AWS ] System manager, CloudWatch를 통한 웹서버 로그 수집 설정

by 기저귀찬개발자 2020. 3. 2.

웹서비스를 운영할때 필요한 로그들을 수집하여 AWS로 모니터링하는 설정을 추가할 것이다.

사용하는 AWS 서비스는 CloudWatch, AWS config를 사용하여 모니터링한다.

 

단계

1. 생성된 EC2에 SSM 권한 주기

2. AWS Systems Manager를 사용해 인스턴스에 CloudWatch Agent를 설치

3. 수집할 Parameter 설정

4. CloudWatch 를 사용하여 애플리케이션 로그, 메트릭 모니터링 설정

 

용어 설명

CloudWatch Agent : 온프레미스 서버에 설치하여 로그(CPU할당, 디스크 공간, 메모리 사용률 등)를 수집하여 CloudWatch로 전송

 

1. 생성된 EC2에 System manager 권한 주기

 - IAM 서비스에 접속한다.

 

 - 권한을 주는 방법은 여러가지가 있지만 해당 게시글에서는 역할을 활용하여 권한을 줄 것이다.

    나중에 다른 EC2 서비스를 운영한다고 했을때 같은 역할을 주면 똑같이 작동될 것이다.

 - 역할 탭을 누르고 역할 만들기 버튼을 누른다.

 

 -  EC2를 선택하고 다음 버튼을 누른다.

 

 

 

 - 정책 필터에 SSM을 입력하면 하단에 SSM 관련 정책들이 나타난다. 그 중에서 AmazonEC2RoleforSSM과 AmazonSSMReadOnlyAcceess 2개를 체크하고 다음을 누른다.

 - AmazonSSMReadOnlyAcceess를 추가한 이유는 이따가 EC2에 실행될 명령줄에서 GetParameter에 대한 권한이 필요한데 AmazonEC2RoleforSSM에는 GetParameters권한만 있어서 AmazonEC2RoleforSSM만 있을 경우 오류가 생겼었다.

 

 - 다음을 누를 경우 태그 추가가 나타나는데 필요한 경우 사용하자.

 - 다음을 또 누른 후 역할 이름을 입력한 후 역할을 만들자

 

 - 역할을 생성하였으니 System Manager를 적용할 EC2 인스턴스에게 부여해 주어야한다.

 - EC2 대쉬보드에 들어간뒤 사용할 EC2 인스턴스를 우클릭하고 IAM 역할 연결/바꾸기를 누른다.

 

 - 생성된 역할을 클릭한 후 적용을 누른다.

 

 - 이제 EC2에게 필요한 권한을 주었다. System Manager로 넘어가서 로그 수집단계를 설정하자

 

 

2. AWS Systems Manager를 사용해 인스턴스에 CloudWatch Agent를 설치

 - System Manager 항목으로 이동한다.

 

 

 - Run Command를 클릭한다( 메뉴 하단에 위치 ).

 

 - 명령 실행 버튼 클릭

 - AWS-ConfigureAWSPackage 선택

 

 

 

 

- 명령 파라미터의 Action(Install), Name(AmazonCloudWatchAgent) 로 선택

 

 - 대상에 이미 생성된 인스턴스를 지정한다.

 

 - 실행을 누르면 결과창이 나타난다.

 

 

3. 수집할 Parameter 설정

 - 해당 단계에서는 로그 수집할 항목에 대해서 정의한다.

 - 왼쪽 탐색 창에서 Parameter Store를 클릭하고 파라미터 생성을 클릭한다.

 

 - 이름과 설명은 임의로 설정한다.

 - 유형은 문자열로 설정한뒤 값에다가 아래의 소스를 필요시 수정하여 입력 후에 파라미터 생성을 누른다.

{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "log_group_name": "HttpAccessLog",
            "file_path": "/var/log/httpd/access_log",  //버전과 설정에 따라 바꿔서 사용 ex) /var/log/apache2/access.log
            "log_stream_name": "{instance_id}",		//미리 정의된 instance id로 수정하지 않아도 된다.
            "timestamp_format": "%b %d %H:%M:%S"
          },
          {
            "log_group_name": "HttpErrorLog",
            "file_path": "/var/log/httpd/error_log", //버전과 설정에 따라 바꿔서 사용 ex) /var/log/apache2/error.log
            "log_stream_name": "{instance_id}",
            "timestamp_format": "%b %d %H:%M:%S"
          }
        ]
      }
    }
  },
  "metrics": {
    "metrics_collected": {
      "cpu": {
        "measurement": [
          "cpu_usage_idle",
          "cpu_usage_iowait",
          "cpu_usage_user",
          "cpu_usage_system"
        ],
        "metrics_collection_interval": 10,
        "totalcpu": false
      },
      "disk": {
        "measurement": [
          "used_percent",
          "inodes_free"
        ],
        "metrics_collection_interval": 10,
        "resources": [
          "*"
        ]
      },
      "diskio": {
        "measurement": [
          "io_time"
        ],
        "metrics_collection_interval": 10,
        "resources": [
          "*"
        ]
      },
      "mem": {
        "measurement": [
          "mem_used_percent"
        ],
        "metrics_collection_interval": 10
      },
      "swap": {
        "measurement": [
          "swap_used_percent"
        ],
        "metrics_collection_interval": 10
      }
    }
  }
}

 

 

 

 

 

 

4. CloudWatch 를 사용하여 애플리케이션 로그, 메트릭 모니터링 설정

 - 로그 수집 Config를 인스턴스에 실행시키는 단계이다.

 - 좌측 탭의 Run Command를 클릭하고 명령 실행을 누른다.

 - 탐색창을 누르고 > 문서 이름 접두사 > Equals > AmazonCloudWatch-ManageAgent 를 입력 후 클릭한 후 나타난 문서를 선택한다.

 ( * 탐색창의 나타난 문서를 클릭하고 탭 화면을 확인하면 실행되는 AWS Cli 명령 줄을 확인할 수 있다.)

 

 - 명령 파라미터에 Optional Configuration Location 을 클릭하면 위 단계에서 정의한 Parameter이 나타나고 선택한다.

 

 - 대상에는 적용할 인스턴스를 선택한 후 실행을 누른다.

 

 - 상태에 성공이 나타나면 다음 단계로 넘어가면 된다. 실패가 나타날 경우 대상 및 출력에서 실패한 목록을 선택한 후 

 우측 상단의 출력 보기를 클릭하면 에러 로그를 살펴볼 수 있다.

 

- CloudWatch 화면을 들어가면 Parameter Store에서 설정한 항목과 System Manager를 통한 인스턴스 상태를 확인할 수 있다.

 

댓글