我想使用 Amazon Athena 查询我的应用程序负载均衡器连接日志。
解决方法
要查询应用程序负载均衡器连接日志,请为 Athena 创建数据库和表。完成以下步骤:
-
打开 Athena 控制台。
-
要创建数据库,请在 Query Editor(查询编辑器)中运行以下命令:
CREATE DATABASE alb_db
**注意:**最佳做法是在与 Amazon Simple Storage Service (Amazon S3) 存储桶相同的 AWS 区域中创建数据库。
-
创建数据库后,使用以下查询创建表:
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-NUMBER 和 REGION 替换为您的 S3 存储桶值。
-
要查询应用程序负载均衡器连接日志,请使用 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 超过两秒的情况
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 分析我的应用程序负载均衡器访问日志?
查询应用程序负载均衡器日志