DuckDBでALBのログを集計するClaude Code Skillを作った
以前書いた S3 にある ALB ログの調査は Athena より DuckDB のほうが簡単 - road288 の日記 の記事の続きで、これを Claude Code の Agent Skill として公開した。
https://github.com/chokkoyamada/duckdb-alb-log-analyzer

README に書いてあるが、Claude Code の Plugin 形式になっているのでプラグインとしてインストールできる。
/plugin marketplace add chokkoyamada/duckdb-alb-log-analyzer
/plugin install duckdb-alb-log-analyzer
DuckDB CLI のインストールや AWS の環境変数のロードを助けてくれるようにしている(環境変数から使うのか profile から使うのか等をガイドしてくれる)。
前回ブログ記事を書いたときから ALB のログのカラムが増えたようで、そのままでは動かなくなってしまったのでテーブルのスキーマを更新した。
最新の ALB ログのフォーマットは公式ドキュメントの以下にあってそれを参考にした。
Access logs for your Application Load Balancer - ELB
DuckDB のテーブル定義としては以下になる。
https://github.com/chokkoyamada/duckdb-alb-log-analyzer/blob/main/scripts/load_template.sql
CREATE OR REPLACE TABLE {{TABLE_NAME}} AS
SELECT *
FROM read_csv(
'{{S3_PATH}}',
columns={
'type': 'VARCHAR',
'timestamp': 'TIMESTAMP',
'elb': 'VARCHAR',
'client_ip_port': 'VARCHAR',
'target_ip_port': 'VARCHAR',
'request_processing_time': 'DOUBLE',
'target_processing_time': 'DOUBLE',
'response_processing_time': 'DOUBLE',
'elb_status_code': 'INTEGER',
'target_status_code': 'VARCHAR',
'received_bytes': 'BIGINT',
'sent_bytes': 'BIGINT',
'request': 'VARCHAR',
'user_agent': 'VARCHAR',
'ssl_cipher': 'VARCHAR',
'ssl_protocol': 'VARCHAR',
'target_group_arn': 'VARCHAR',
'trace_id': 'VARCHAR',
'domain_name': 'VARCHAR',
'chosen_cert_arn': 'VARCHAR',
'matched_rule_priority': 'VARCHAR',
'request_creation_time': 'TIMESTAMP',
'actions_executed': 'VARCHAR',
'redirect_url': 'VARCHAR',
'error_reason': 'VARCHAR',
'target_port_list': 'VARCHAR',
'target_status_code_list': 'VARCHAR',
'classification': 'VARCHAR',
'classification_reason': 'VARCHAR',
'conn_trace_id': 'VARCHAR',
'transformed_host': 'VARCHAR',
'transformed_uri': 'VARCHAR',
'request_transform_status': 'VARCHAR'
},
delim=' ',
quote='"',
escape='"',
header=false,
auto_detect=false,
nullstr='-'
);
この Skill 自体は Claude Code 公式の skill creator を使って作ったのでほぼ vibe coding。
自分では実際にこの Skill を便利に使っている。