#log-parser #cdn #log-format #duck-db #u-cloud #csv #analyze

app ucloud-cdn-log-parser

解析UCloud CDN日志文件到CSV格式

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次下载

MIT 许可证

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;

参考

依赖关系

~4.5–6.5MB
~104K SLoC