4个版本
0.1.3 | 2024年3月20日 |
---|---|
0.1.2 | 2024年3月19日 |
0.1.1 | 2024年3月19日 |
0.1.0 | 2024年3月16日 |
#519 在 解析实现
每月 30次下载
8KB
111 行
ucloud-cdn-log-parser
将ucloud cdn日志解析为csv/tsv格式,带有/不带标题,然后您可以使用duckdb / clickhouse本地/等来分析日志。
安装
从发布页面下载,该页面由github action构建。
或者通过cargo安装或从源码构建。
cargo install ucloud-cdn-log-parser --locked
用法
# download logs
# parse & convert to csv / parquet
zcat *.gz | \
ucloud-cdn-log-parser > log.csv
## use duckdb
zcat *.gz | \
ucloud-cdn-log-parser | \
pv | \
duckdb -c "
copy
(select * from read_csv('/dev/stdin'))
to 'log.parquet.zst'
(format parquet, compression 'zstd');"
# now you can use duckdb / clickhouse local / etc to query the log
例如,使用duckdb分析日志
-- get top 100 client_ip by sent_bytes_incl_header in last 6 hours
select
client_ip,
format_bytes(sum(sent_bytes_incl_header)::bigint) sent_bytes,
count(*) as n
from 'log.parquet.zst'
where date_time > (now() - interval 6 hours)::timestamp
group by client_ip
order by sum(sent_bytes_incl_header) desc
limit 100;
-- get top 100 request_method_url_protocol by sent_bytes_incl_header in last 6 hours
select
request_method_url_protocol,
format_bytes(sum(sent_bytes_incl_header)::bigint) sent_bytes,
count(*) as n
from 'log.parquet.zst'
where date_time > (now() - interval 6 hours)::timestamp
group by request_method_url_protocol
order by sum(sent_bytes_incl_header) desc, n desc
limit 100;
参考
- ucloud日志格式 https://docs.ucloud.cn/ucdn/guide/LOG
依赖关系
~4.5–6.5MB
~104K SLoC