세상에서 제일 쉬운 CloudWatch Logs 도입기 - 연결

sojukang·2022년 8월 9일
0
post-custom-banner

CloudWatch Logs

그게 뭔디유?

EC2 등 AWS 인스턴스의 사용자 지정 로그 파일을 모니터링, 저장 엑세스 하는 기능입니다.

왜 쓰는디유?

AWS를 사용하는 여러 시스템, 어플리케이션의 로그를 중앙 집중화하여 관리할 수 있습니다. 모은 로그를 바탕으로 패턴 기반 검색, 필터링, 시각화, 백업할 수 있습니다.

무엇을 할 수 있을까?

로그 데이터 쿼리

로그 데이터에 쿼리를 수행하여 원하는 조건을 만족하는 정보를 조회할 수 있습니다.

로그 모니터링

로그 데이터를 통해 어플리케이션과 시스템을 모니터링 할 수 있습니다. 이를 바탕으로 특정한 상황에 알림을 보낼 수도 있겠죠.

로그 보존

로그를 보존하는 기능을 제공합니다.

설치하기

전체 흐름

  1. 지표(metrics)를 수집할 권한을 유저에게 부여합니다.
  2. agent를 설치합니다.
  3. 설정 파일을 통해 수집을 원하는 지표를 설정해줍니다.
  4. 서버에서 agent를 실행합니다.

IAM 권한 부여

IAM 권한 설정 페이지로 들어가서 새로운 역할을 생성합니다.

AWS 서비스, EC2를 선택 후 다음을 누릅시다.

여러 권한 정책 중 CloudWatchAgentServerPolicy를 클릭하고 다음으로 넘어가봅시다.

적절한 이름과 설명을 추가 후 역할을 생성해봅시다.

이후 원하는 EC2에 역할을 부여해줍시다.

CloudWatch agent 설치

CloudWatch Logs를 시작하려면 먼저 CloudWatch agent를 설치해야 합니다.

wget {주소}

주소는 AWS 링크에서 본인 환경에 맞게 찾으면 됩니다.
다운로드가 끝났나면 다음 명령어를 통해 해당 디렉토리로 패키지를 풀어봅시다.

sudo dpkg -i -E ./amazon-cloudwatch-agent.deb

이제 설정 파일을 만들러 가봅시다.

Configuration file 생성

Configuration 구성

  • agent: agent에 대한 일반적인 설정 내용입니다.
  • metrics: CloudWatch로 수집할 지표들입니다. 오직 로그 수집만 한다면 파일로 내보낼 수 있습니다.
  • logs: 어떤 로그 파일을 CloudWatch Logs로 내보낼지 설정합니다.

Configuration Example

{
  "agent": {
   "metrics_collection_interval": 60,
   "region": "ap-northeast-2",
   "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
   "debug": false
  }
  ,
  "metrics": {
    "metrics_collected": {
      "collectd": {},
      "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": {
          "test": "test1",
          "date": "2017-10-01"
        }
      },
      "netstat": {
        "measurement": [
          "tcp_established",
          "tcp_syn_sent",
          "tcp_close"
        ],
        "metrics_collection_interval": 60
      },
      "disk": {
        "measurement": [
          "used_percent"
        ],
        "resources": [
          "*"
        ],
        "drop_device": true
      },
      "processes": {
        "measurement": [
          "running",
          "sleeping",
          "dead"
        ]
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions": [
      [
        "AutoScalingGroupName"
      ],
      [
        "InstanceId",
        "InstanceType"
      ],
      []
    ]
  },
  "logs":
   {
       "logs_collected": {
           "files": {
               "collect_list": [
                   {
                       "file_path": "{보낼 로그 파일 위치}",
                       "log_group_name": "amazon-cloudwatch-agent.log",
                       "log_stream_name": "my_log_stream_name_1",
                       "timestamp_format": "%H: %M: %S%y%b%-d"
                   }
               ]
           },
           "windows_events": {
               "collect_list": [
                   {
                       "event_name": "System",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "log_group_name": "System",
                       "log_stream_name": "System"
                   },
                   {
                       "event_name": "CustomizedName",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "log_group_name": "CustomizedLogGroup",
                       "log_stream_name": "CustomizedLogStream"
                   }
               ]
           }
       },
       "log_stream_name": "my_log_stream_name"
}
}

공식 홈페이지의 예시를 바탕으로 구성해본 Config입니다. 여기서 필요한 메트릭을 추가/제거 하거나 수정하면 됩니다.

실행하기

EC2 환경인 경우 다음 명령어를 실행해봅시다.

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s -c file:{configuration-file-path}

{configuration-file-path}에 config 파일 경로를 넣어주시면 됩니다. 절대경로로 넣어주시는 걸 추천합니다👍.


이런 에러가 뜬다면, 에러에 명시된 파일을 빈 파일로 만들어 주면 해결됩니다.

sudo mkdir /usr/share/collectd
sudo touch /usr/share/collectd/types.db

CloudWatch Logs 확인하기

AWS에서 CloudWatch 서비스에 접속해봅시다.

모든 지표에 가보면 수집중인 지표들을 확인할 수 있습니다.

로그 그룹을 확인하면

뭔가 로그 그룹이 하나 생겼네요!

정상적으로 내보낸 로그를 확인할 수 있습니다. 다음 글에서는 수집한 로그를 바탕으로 이상 동작 알람 기능을 도입해봅시다.

참고

AWS Docs - Amazon CloudWatch Logs란 무엇인가요?
AWS Docs - Manually create or edit the CloudWatch agent configuration file
AWS Docs - Installing and running the CloudWatch agent on your servers
EC2에 CloudWatch Agent 구성하여 모니터링하는 방법

profile
기계공학과 개발어린이
post-custom-banner

0개의 댓글