查詢 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://amzn-s3-demo-bucket/AWSLogs/AWS_account_ID/elasticloadbalancing/region';
  2. 修改 LOCATION Amazon S3 儲存貯體,以指定您的 Network Load Balancer 日誌的目的地。

  3. 在 Athena 主控台中執行查詢。查詢完成之後,Athena 會註冊 nlb_tls_logs 資料表,讓其中的資料可供您查詢。

查詢範例

若要查看憑證使用的次數,請使用類似此範例的查詢:

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;