Athena LB 로그 분석하기

00_8_3·2022년 8월 14일
0

SEEME 이슈

목록 보기
9/10

도입

CI/CD 과정 중에 낮은 메모리 용량으로 인해 EC2가 터져 재실행을 하였는데 Node가 살아 났는데도 LB에서 502 에러가 발생하였다.

스왑 메모리로 뗌빵을 시도 해보았지만 ㅎㅎ.. 어림 없이 빌드 과정에서 터지네요.
아래 링크는 스왑 메모리 설정을 설명 해줍니다.

https://kth990303.tistory.com/361

기존 ELK를 통한 로그 모니터링의 경우 노드 내부의 로그만 추적하기 때문에 로드밸런서에서의 에러를 추적 할 수 없어 AWS Athena와 S3를 이용하여 LB의 로그를 분석 하도록 합니다.

순서

  • ALB 생성 (있다고 가정)
  • EC2 생성 (있다고 가정)
  • S3 생성
  • Athena 생성

ALB의 log를 S3에 저장하기

  • 액세스 로그 활성화 클릭
  • S3 위치에 기존에 생성한 S3있다면 입력
    아니면 생성 할 S3 이름 입력 후 아래의 내 대신 이 위치를 생성 클릭

잘 등록이 되었다면 아래와 같이 로그가 쌓이는 것을 확인 가능합니다.

5분 단위로 *.gz 압축파일이 생성되며 다운로드하여

Athena 등록

Athena - 설정 창 - 관리 클릭

생성한 S3 Bucket 주소 입력

또는 S3 찾아보기 클릭

S3 Access log를 저장할 DB 생성

CREATE DATABASE test;

테이블 생성

CREATE EXTERNAL TABLE IF NOT EXISTS alb_log (
            type string,
            time string,
            elb string,
            client_ip string,
            client_port int,
            target_ip string,
            target_port int,
            request_processing_time double,
            target_processing_time double,
            response_processing_time double,
            elb_status_code string,
            target_status_code string,
            received_bytes bigint,
            sent_bytes bigint,
            request_verb string,
            request_url string,
            request_proto string,
            user_agent string,
            ssl_cipher string,
            ssl_protocol string,
            target_group_arn string,
            trace_id string,
            domain_name string,
            chosen_cert_arn string,
            matched_rule_priority string,
            request_creation_time string,
            actions_executed string,
            redirect_url string,
            lambda_error_reason string,
            target_port_list string,
            target_status_code_list string,
            classification string,
            classification_reason string
            )
            ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'
            WITH SERDEPROPERTIES (
            'serialization.format' = '1',
            'input.regex' = 
        '([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*):([0-9]*) ([^ ]*)[:-]([0-9]*) ([-.0-9]*) ([-.0-9]*) ([-.0-9]*) (|[-0-9]*) (-|[-0-9]*) ([-0-9]*) ([-0-9]*) \"([^ ]*) ([^ ]*) (- |[^ ]*)\" \"([^\"]*)\" ([A-Z0-9-]+) ([A-Za-z0-9.-]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^\"]*)\" ([-.0-9]*) ([^ ]*) \"([^\"]*)\" \"([^\"]*)\" \"([^ ]*)\" \"([^\s]+?)\" \"([^\s]+)\" \"([^ ]*)\" \"([^ ]*)\"')
            LOCATION 's3://<aws로그위치>/AWSLogs/<aws계정번호>/elasticloadbalancing/<region>/';
  • 테이블 명 입력

  • S3 주소 입력

s3://<aws로그위치>/AWSLogs/<aws계정번호>/elasticloadbalancing/<region>/

ALB 로그 확인하기

테이블 생성까지 완료가 되었다면
S3에 저장되어 있는 ALB 로그들을 Athena의 테이블에서 확인이 가능합니다.

SELECT *
FROM alb_log
ORDER by time DESC
LIMIT 100;

모르는 ip에서 라우터에 접근한 것을 확인 할 수 있네요

응용

URL 요청 수 세기

SELECT request_url, count(request_url) as count
FROM alb_log
GROUP BY request_url
order by count desc
limit 100;

특정 기간 동안 요청이 5초이상 수행한 URL 찾기

SELECT target_processing_time, request_url
from alb_log
WHERE parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') >= parse_datetime('2022-08-14-00:00:00','yyyy-MM-dd-HH:mm:ss')
AND parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z') < parse_datetime('2022-08-15-00:00:00','yyyy-MM-dd-HH:mm:ss')
AND (target_processing_time >= 5.0)

추가

  • 1 TB당 5.00 USD의 저렴한 가격!
  • ALB 뿐만 아니라 다양한 데이터를 분석 할 수도 있다고 합니다

출처

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-access-logs.html#log-processing-tools

https://docs.aws.amazon.com/ko_kr/elasticloadbalancing/latest/application/load-balancer-access-logs.html#access-logging-bucket-permissions

0개의 댓글