내용으로 건너뛰기

Athena를 사용하여 Application Load Balancer 연결 로그를 쿼리하려면 어떻게 해야 합니까?

2분 분량
0

Amazon Athena를 사용하여 Application Load Balancer 연결 로그를 쿼리하려고 합니다.

해결 방법

Application Load Balancer 연결 로그를 쿼리하려면 Athena용 데이터베이스 및 테이블을 생성하십시오. 다음 단계를 완료하십시오.

  1. Athena 콘솔을 엽니다.

  2. 데이터베이스를 생성하려면 쿼리 편집기에서 다음 명령을 실행합니다.

    CREATE DATABASE alb_db

    참고: Amazon Simple Storage Service(Amazon S3) 버킷과 동일한 AWS 리전에 데이터베이스를 생성하는 것이 가장 좋습니다.

  3. 데이터베이스를 생성한 후 다음 쿼리를 사용하여 테이블을 생성합니다.

    CREATE EXTERNAL TABLE IF NOT EXISTS alb_connection_logs (  
             time string,  
             client_ip string,  
             client_port int,  
             listener_port int,  
             tls_protocol string,  
             tls_cipher string,  
             tls_handshake_latency double,  
             leaf_client_cert_subject string,  
             leaf_client_cert_validity string,  
             leaf_client_cert_serial_number string,  
             tls_verify_status string,  
             conn_trace_id string  
             )  
                PARTITIONED BY  
                (  
                 day STRING  
                )  
                ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.RegexSerDe'  
                WITH SERDEPROPERTIES (  
                'serialization.format' = '1',  
                'input.regex' =  
                 '([^ ]*) ([^ ]*) ([0-9]*) ([0-9]*) ([A-Za-z0-9.-]*) ([^ ]*) ([-.0-9]*) \"([^\"]*)\" ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?'  
                )  
                LOCATION 's3://S3-LOCATION/AWSLogs/ACCOUNT-NUMBER/elasticloadbalancing/REGION/'  
                TBLPROPERTIES  
                (  
                 "projection.enabled" = "true",  
                 "projection.day.type" = "date",  
                 "projection.day.range" = "2023/01/01,NOW",  
                 "projection.day.format" = "yyyy/MM/dd",  
                 "projection.day.interval" = "1",  
                 "projection.day.interval.unit" = "DAYS",  
                 "storage.location.template" = "s3://S3-LOCATION/AWSLogs/ACCOUNT-NUMBER/elasticloadbalancing/REGION/${day}"  
                )

    참고: S3-LOCATION, ACCOUNT-NUMBERREGION을 S3 버킷 값으로 바꾸십시오.

  4. Application Load Balancer 연결 로그를 쿼리하려면 SQL 문을 사용하십시오.

쿼리 예시

최근 100개의 로그 보기

SELECT *FROM alb_conn_logs  
ORDER by time desc  
LIMIT 100

tls_verify_status가 'Success'가 아닌 경우 발생 항목 수를 계산하고 client_IP별로 그룹화

SELECT distinct client_ip, count() as count from alb_conn_logs WHERE tls_verify_status != 'Success'  
GROUP by client_ip  
ORDER by count() DESC;

특정 시간 범위에서 tls_handshake_latency가 2초 이상인 경우 모든 발생 항목 보기

SELECT * FROM alb_conn_logs WHERE (parse_datetime(time,'yyyy-MM-dd''T''HH:mm:ss.SSSSSS''Z')  
BETWEEN parse_datetime('2024-01-01-00:00:00','yyyy-MM-dd-HH:mm:ss')  
AND parse_datetime('2024-03-20-00:00:00','yyyy-MM-dd-HH:mm:ss'))  
AND (tls_handshake_latency >= 2.0);

인증 유효 날짜가 정확한 연결을 확인하고 leaf_client_cert_serial_number별로 그룹화

SELECT DISTINCT leaf_client_cert_serial_number, count() AS count FROM alb_conn_logs  
WHERE tls_verify_status = 'Success' AND leaf_client_cert_validity like '%NotAfter=2025-01-01%'  
GROUP BY leaf_client_cert_serial_number  
ORDER BY count() DESC;

관련 정보

Athena를 사용하여 Application Load Balancer 액세스 로그를 분석하려면 어떻게 해야 합니까?

Application Load Balancer 로그 쿼리

AWS 공식업데이트됨 6달 전