Application Load Balancer 액세스 로그를 분석해야 합니다. Amazon Athena에서 어떻게 하면 됩니까?

기본적으로 Elastic Load Balancing은 액세스 로깅을 활성화하지 않습니다. 액세스 로깅을 활성화할 때 Amazon Simple Storage Service(Amazon S3) 버킷을 지정합니다. 모든 Application Load Balancer 및 Classic Load Balancer 액세스 로그는 해당 S3 버킷에 저장됩니다. 그런 다음 로드 밸런서의 문제를 해결하거나 성능을 분석하려는 경우 Athena를 사용하여 S3의 액세스 로그를 분석하면 됩니다.

참고: Athena를 사용하여 Application Load Balancer와 Classic Load Balancer에 대한 액세스 로그를 모두 분석할 수 있지만 여기에서는 Application Load Balancer만 다룹니다.  

Athena에서 액세스 로그를 분석하려면 데이터베이스와 테이블을 생성합니다.

1.    Athena 콘솔을 엽니다.

2.    쿼리 편집기에서 다음과 같은 명령을 실행하여 데이터베이스를 생성합니다.
참고: S3 버킷과 동일한 AWS 리전에 데이터베이스를 생성하는 것이 가장 좋습니다.

create database alb_db

3.    2단계에 생성한 데이터베이스에서 ALB 로그 테이블을 만듭니다.

4.    왼쪽 창의 테이블에서 테이블 이름 옆에 있는 메뉴 버튼의 Preview table(테이블 미리 보기)을 선택합니다. 결과 창에 ALB 액세스 로그의 데이터가 표시되어야 합니다. 그러면 Athena 테이블을 성공적으로 만든 것이며 이제 ALB 액세스 로그를 쿼리할 수 있습니다.

5.    쿼리 편집기를 사용하여 3단계에 생성한 테이블에서 SQL 문을 실행합니다. 쿼리를 저장하고, 이전 쿼리를 보거나 쿼리 결과를 CSV 형식으로 다운로드할 수 있습니다.

쿼리의 예

아래 예에서 테이블 이름은 alb_log입니다. 쿼리에 맞게 테이블 이름, 열 값 및 기타 변수를 수정하십시오.

작업 쿼리

처음 100개의 액세스 로그 항목을 시간순으로 봅니다.

사용 사례: 분석 및 문제 해결

SELECT *
FROM alb_log
ORDER by time ASC
LIMIT 100;

ALB에 액세스한 모든 클라이언트 IP 주소와 ALB에 액세스한 횟수를 나열합니다.

사용 사례: 분석 및 문제 해결

SELECT distinct client_ip, count() as count from alb_log
GROUP by client_ip
ORDER by count() DESC;

요청/응답 쌍에서 ALB를 통과하는 평균 데이터 용량(킬로바이트 단위)을 나열합니다.

사용 사례: 분석 및 문제 해결

SELECT (avg(sent_bytes)/1000.0 + avg(received_bytes)/1000.0)
as prewarm_kilobytes from alb_log;

ALB가 트래픽을 라우팅하는 모든 대상과 ALB가 각 대상에 요청을 라우팅한 횟수를 배포율로 나열합니다.

사용 사례: 잠재적인 대상 트래픽 불균형을 식별합니다.

SELECT target_ip, (Count(target_ip)* 100.0 / (Select Count(*) From alb_log))
as backend_traffic_percentage
FROM alb_log
GROUP by target_ip
ORDER By count() DESC;

클라이언트가 ALB에 요청을 보낸 후 ALB 유휴 제한 시간이 경과하기 전에 ALB에 대한 연결을 종료한 횟수를 나열합니다(HTTP 460 오류).

사용 사례: HTTP 460 오류 문제 해결

SELECT * from alb_log where elb_status_code = '460'

리스너 규칙이 빈 대상 그룹에 요청을 전달했으므로 클라이언트 요청이 라우팅되지 않은 횟수를 나열합니다(HTTP 503 error).

사용 사례: HTTP 503 오류 문제 해결

SELECT * from alb_log where elb_status_code = '503'

각 클라이언트가 지정된 URL을 방문한 횟수에 따라 클라이언트를 내림차순으로 나열합니다.

사용 사례: 트래픽 패턴 분석

SELECT client_ip, elb, request_url, count(*) as count from alb_log
GROUP by client_ip, elb, request_url
ORDER by count DESC;

Firefox 사용자가 가장 자주 액세스하는 10개 URL을 내림차순으로 나열합니다.

사용 사례: 트래픽 배포 및 패턴 분석

SELECT request_url, user_agent, count(*) as count
FROM alb_log
WHERE user_agent LIKE '%Firefox%'
GROUP by request_url, user_agent
ORDER by count(*) DESC
LIMIT 10;

각 클라이언트가 ALB에 대한 요청으로 보낸 데이터 용량(메가바이트 단위)에 따라 클라이언트를 내림차순으로 나열합니다.

사용 사례: 트래픽 배포 및 패턴 분석

SELECT client_ip, sum(received_bytes/1000000.0) as client_datareceived_megabytes
FROM alb_log
GROUP by client_ip
ORDER by client_datareceived_megabytes DESC;

지정된 날짜에 대상 처리 시간이 5초를 넘은 모든 경우를 나열합니다.

사용 사례: 지정된 기간 동안 지연 시간 문제 해결

SELECT * from alb_log
WHERE (parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')
     BETWEEN parse_datetime('2018-08-08-00:00:00','yyyy-MM-dd-HH:mm:ss')
     AND parse_datetime('2018-08-08-02:00:00','yyyy-MM-dd-HH:mm:ss'))
AND (target_processing_time >= 5.0)


페이지 내용이 도움이 되었습니까? | 아니요

AWS 지원 지식 센터로 돌아가기

도움이 필요하십니까? AWS 지원 센터를 방문하십시오.

게시 날짜: 2018-12-20