Network Load Balancer 로그 쿼리 - Amazon Athena

Network Load Balancer 로그 쿼리

Athena를 사용하여 Network Load Balancer의 로그를 분석하고 처리합니다. 이러한 로그는 Network Load Balancer로 전송된 TLS(전송 계층 보안) 요청에 대한 세부 정보를 수신합니다. 이러한 액세스 로그를 사용하여 트래픽 패턴을 분석하고 문제를 해결할 수 있습니다.

Network Load Balancer 액세스 로그를 분석하기 전에 대상 Amazon S3 버킷에 저장하기 위한 로그를 활성화하고 구성합니다. 자세한 내용과 각 Network Load Balancer 액세스 로그 항목에 대한 정보는 Network Load Balancer의 액세스 로그를 참조하세요.

Network Load Balancer 로그에 대한 테이블을 생성하려면

  1. 다음 DDL 문을 복사하여 Athena 콘솔에 붙여 넣습니다. Network Load Balancer 로그 레코드의 구문을 검사합니다. 필요에 따라 문을 업데이트하여 로그 레코드에 해당하는 열과 정규식을 포함합니다.

    CREATE EXTERNAL TABLE IF NOT EXISTS nlb_tls_logs ( type string, version string, time string, elb string, listener_id string, client_ip string, client_port int, target_ip string, target_port int, tcp_connection_time_ms double, tls_handshake_time_ms double, received_bytes bigint, sent_bytes bigint, incoming_tls_alert int, cert_arn string, certificate_serial string, tls_cipher_suite string, tls_protocol_version string, tls_named_group string, domain_name string, alpn_fe_protocol string, alpn_be_protocol string, alpn_client_preference_list string, tls_connection_creation_time 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]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ([^ ]*) ?([^ ]*)?( .*)?' ) LOCATION 's3://DOC-EXAMPLE-BUCKET/AWSLogs/AWS_account_ID/elasticloadbalancing/region';
  2. LOCATION Amazon S3 버킷을 수정하여 Network Load Balancer 로그의 대상을 지정합니다.

  3. Athena 콘솔에서 쿼리를 실행합니다. 쿼리가 완료된 후 Athena는 nlb_tls_logs 테이블을 등록하여 쿼리를 위한 데이터를 준비합니다.

Network Load Balancer 쿼리 예제

인증서가 사용되는 횟수를 확인하려면 이 예제와 비슷한 방식으로 쿼리를 사용합니다.

SELECT count(*) AS ct, cert_arn FROM "nlb_tls_logs" GROUP BY cert_arn;

다음 쿼리는 1.3 이전의 TLS 버전을 사용하고 있는 사용자 수를 보여 줍니다.

SELECT tls_protocol_version, COUNT(tls_protocol_version) AS num_connections, client_ip FROM "nlb_tls_logs" WHERE tls_protocol_version < 'tlsv13' GROUP BY tls_protocol_version, client_ip;

다음 쿼리를 사용하여 TLS 핸드셰이크 시간이 오래 걸리는 연결을 식별합니다.

SELECT * FROM "nlb_tls_logs" ORDER BY tls_handshake_time_ms DESC LIMIT 10;

다음 쿼리를 사용하여 지난 30일 동안 협상된 TLS 프로토콜 버전 및 암호 제품군을 식별하고 계산합니다.

SELECT tls_cipher_suite, tls_protocol_version, COUNT(*) AS ct FROM "nlb_tls_logs" WHERE from_iso8601_timestamp(time) > current_timestamp - interval '30' day AND NOT tls_protocol_version = '-' GROUP BY tls_cipher_suite, tls_protocol_version ORDER BY ct DESC;