CI/CD 과정 중에 낮은 메모리 용량으로 인해 EC2가 터져 재실행을 하였는데 Node가 살아 났는데도 LB에서 502 에러가 발생하였다.
스왑 메모리로 뗌빵을 시도 해보았지만 ㅎㅎ.. 어림 없이 빌드 과정에서 터지네요.
아래 링크는 스왑 메모리 설정을 설명 해줍니다.
기존 ELK를 통한 로그 모니터링의 경우 노드 내부의 로그만 추적하기 때문에 로드밸런서에서의 에러를 추적 할 수 없어 AWS Athena와 S3를 이용하여 LB의 로그를 분석 하도록 합니다.
내 대신 이 위치를 생성
클릭잘 등록이 되었다면 아래와 같이 로그가 쌓이는 것을 확인 가능합니다.
5분 단위로
*.gz
압축파일이 생성되며 다운로드하여
또는 S3 찾아보기 클릭
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>/
테이블 생성까지 완료가 되었다면
S3에 저장되어 있는 ALB 로그들을 Athena의 테이블에서 확인이 가능합니다.
SELECT *
FROM alb_log
ORDER by time DESC
LIMIT 100;
모르는 ip에서 라우터에 접근한 것을 확인 할 수 있네요
SELECT request_url, count(request_url) as count
FROM alb_log
GROUP BY request_url
order by count desc
limit 100;
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)