# obs_osc_accesslog_analyzer **Repository Path**: mosquitoding/obs_osc_accesslog_analyzer ## Basic Information - **Project Name**: obs_osc_accesslog_analyzer - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-29 - **Last Updated**: 2026-01-29 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 访问日志分析工具 一个功能强大的访问日志分析工具,支持OSC和Kongka两种日志格式,提供全面的数据分析和报告生成功能。 ## 功能特点 ### 1. 日志格式支持 - 支持OSC日志格式 - 支持Kongka日志格式 - 支持自动识别和解析多种压缩格式:.zip, .gz, .tar.gz, .tgz, .tar.bz2, .tar.xz ### 2. 数据分析功能 - **基本统计**:平均时延、p99/p95时延、最大/最小时延 - **吞吐量分析**:TPS(每秒事务数)、BPS(每秒字节数)、请求成功率 - **分布分析**:时延分布、IO大小分布、请求到达TPS分布 - **并发分析**:每秒并发请求数统计 - **特性分析**:HTTPS、加密、压缩等特性的使用情况 - **慢速传输检测**:识别慢速上传和下载请求 - **日志联动分析**:OSC和Kongka日志的关联分析 - **热点对象分析**:统计频繁访问的对象,支持按访问次数排序 - **热点对象范围分析**:分析对象中访问频率较高的区域 - **负载均衡度分析**:统计不同节点的负载分布,提供多维度负载均衡指标 ### 3. 灵活的过滤和维度分析 - 支持按时间范围过滤 - 支持按维度过滤:桶名、账号、集群 - 支持多维度组合分析 - 支持交互式维度切换(CD命令) ### 4. 多种运行模式 - 命令行模式:适合脚本和自动化 - 交互式模式:适合实时分析和探索 ### 5. 可配置的日志格式 - 支持JSON/YAML格式的配置文件 - 可自定义日志字段映射 - 支持动态加载配置 ## 安装和依赖 ### 系统要求 - Python 2.7.5+ 或 Python 3.6+ ### 依赖包 ``` pyyaml # 用于解析YAML配置文件 ``` ### 安装方法 ```bash # 安装依赖 pip install pyyaml # 克隆或下载项目 git clone <项目地址> cd obs_osc_accesslog_analyzer ``` ## 命令行使用 ### 基本语法 ```bash python main.py [选项]... ``` ### 命令行参数 | 参数 | 长参数 | 类型 | 说明 | |------|--------|------|------| | `-f` | `--file` | `str` | 日志文件路径或模式,支持通配符(如 `*.log`)、目录和压缩文件 | | `-t` | `--type` | `str` | 日志类型,可选:`osc`, `kongka`, `all`,默认:`all` | | `-o` | `--output` | `str` | 输出报告文件路径,默认为标准输出 | | `-a` | `--action` | `str` | 执行的操作,详见操作类型表 | | `-s` | `--scope` | `str` | 分析维度,可选:`bucket`, `account`, `cluster` | | `-v` | `--value` | `str` | 维度值,与 `--scope` 配合使用 | | `-b` | `--begin` | `str` | 开始时间,格式:`YYYY-MM-DD HH:MM:SS` 或时间戳 | | `-e` | `--end` | `str` | 结束时间,格式:`YYYY-MM-DD HH:MM:SS` 或时间戳 | | `-c` | `--config` | `str` | 配置文件路径,支持JSON/YAML格式 | | `--threshold` | `--threshold` | `float` | 慢速传输阈值(毫秒),默认:1000.0 | | `--field` | `--field` | `str` | 分析的字段名,默认:`total_time` | ### 操作类型 | 操作 | 说明 | |------|------| | `avg` | 计算并显示各指标平均时延(排序展示) | | `avgdetail` | 计算并显示各指标的详细平均时延 | | `p99` | 计算并显示各指标的p99统计值 | | `p95` | 计算并显示各指标的p95统计值 | | `max` | 计算并显示各指标的最大值 | | `min` | 计算并显示各指标的最小值 | | `apisummary` | 显示所有API的汇总统计 | | `latencydist` | 统计并显示请求的时延分布 | | `iolatencydist` | 按IO大小统计指定API的时延分布 | | `iosizedist` | 统计API的IO大小分布 | | `arrivaltps` | 统计请求到达的TPS分布(按秒级) | | `concurrent` | 统计每1秒的并发请求数 | | `featurestats` | 分析使用了哪些特性及其统计信息 | | `slowtransfer` | 分析慢速传输,包括慢速上传和下载 | | `linkage` | OSC和Kongka日志联动分析 | | `hotobjects` | 分析热点对象,显示访问频率最高的对象 | | `hotranges` | 分析热点对象范围,显示对象中访问频率最高的区域 | | `loadbalance` | 分析负载均衡度,统计不同节点的负载分布 | | `top` | 统计top N的bucket或account的workload | | `fileinfo` | 显示指定文件的详细属性 | ## 交互式模式 如果不提供任何命令行参数,工具将进入交互式模式: ```bash python main.py ``` ### 交互式命令详解 #### 1. load **功能**:加载包含时延数据的文件,支持目录和压缩包 **语法**: ``` load ``` **参数**: - ``:要加载的文件模式,可以是单个文件、多个文件(用空格分隔)或通配符(如 `*.log`) **示例**: ``` load *.log # 加载当前目录下所有.log文件 load access*.log /path/to/logs/ # 加载多个文件和目录 ``` **结果详解**: - 显示正在加载的文件名 - 显示加载的文件数量和解析到的有效日志记录数 - 成功加载后,创建分析器并进入可分析状态 #### 2. avg **功能**:计算并显示各指标平均时延(排序展示) **语法**: ``` avg ``` **示例**: ``` avg ``` **结果详解**: - 按平均时延从大到小排序显示所有指标 - 输出格式:`指标名 : 平均值 ms` - 包含total_time、first_byte_latency等所有可统计的时延指标 **样例输出**: ``` 平均时延统计: -------------------------------------------------- total_time : 150.50 ms first_byte_latency : 75.25 ms send_data_time : 45.10 ms get_object_data_time : 35.05 ms https_tls_handshake_time : 12.50 ms ``` #### 3. avgdetail **功能**:计算并显示各指标的详细平均时延 **语法**: ``` avgdetail ``` **示例**: ``` avgdetail ``` **结果详解**: - 显示各指标的平均时延、p99时延、p95时延、最大时延和最小时延 - 按平均时延从大到小排序 - 包含所有可统计的时延指标 **样例输出**: ``` 详细平均时延统计: -------------------------------------------------- 字段名 平均时延(ms) p99时延(ms) p95时延(ms) 最大时延(ms) 最小时延(ms) ----------------------------------------------------------------------------------------------------------------------- total_time 150.50 200.00 180.00 200.00 100.00 first_byte_latency 75.25 100.00 90.00 100.00 50.00 send_data_time 45.10 60.00 55.00 60.00 30.00 ``` #### 4. p99 / p95 / max / min **功能**:计算并显示各指标相应统计值 **语法**: ``` p99 p95 max min ``` **示例**: ``` p99 ``` **结果详解**: - 按统计值大小排序显示所有指标 - 输出格式:`指标名 : 统计值 ms` - 包含所有可统计的时延指标 **样例输出**: ``` p99时延统计: -------------------------------------------------- total_time : 200.00 ms first_byte_latency : 100.00 ms send_data_time : 60.00 ms get_object_data_time : 100.00 ms https_tls_handshake_time : 15.00 ms ``` #### 5. apisummary **功能**:显示所有API的汇总统计 **语法**: ``` apisummary ``` **示例**: ``` apisummary ``` **结果详解**: - 显示所有API的请求数、平均时延、TPS、BPS、请求成功率等统计信息 - 按请求数从大到小排序 - 包含API级别的详细统计 **样例输出**: ``` API请求汇总统计 =================================================== API名称:GET.OBJECT --------------------------------------------------- 总请求数:1000 平均时延:150.50 ms p99时延:200.00 ms p95时延:180.00 ms 最大时延:200.00 ms 最小时延:100.00 ms 平均TPS:16.67 平均BPS:209.72 KB/s 请求成功率:100.00% API名称:PUT.OBJECT --------------------------------------------------- 总请求数:500 平均时延:250.20 ms p99时延:400.00 ms p95时延:350.00 ms 最大时延:500.00 ms 最小时延:150.00 ms 平均TPS:8.33 平均BPS:419.43 KB/s 请求成功率:99.80% ``` #### 6. latencydist **功能**:统计并显示请求的时延分布 **语法**: ``` latencydist [字段名] ``` **参数**: - `[字段名]`:可选,指定要分析的时延字段,默认为 `total_time` **示例**: ``` latencydist # 分析total_time字段的时延分布 latencydist send_data_time # 分析send_data_time字段的时延分布 ``` **结果详解**: - 显示总请求数 - 显示不同时延范围的请求数量、占比和分布图示 - 分布图示使用ASCII字符可视化显示 **样例输出**: ``` total_time 时延分布统计: -------------------------------------------------- 总请求数: 1000 时延范围 数量 占比 分布图示 ------------------------------------------------------------ 0-100ms 650 65.00% |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| 101-200ms 200 20.00% |||||||||||||||||||||| 201-500ms 100 10.00% |||||||||||| 501-1000ms 40 4.00% |||| 1001ms+ 10 1.00% | ``` #### 7. iolatencydist **功能**:按IO大小统计指定API的时延分布(开发中) **语法**: ``` iolatencydist [API名称] ``` **参数**: - `[API名称]`:可选,指定要分析的API名称 **示例**: ``` iolatencydist GET.OBJECT ``` **结果详解**: - 按IO大小分组统计不同API的时延分布 - 显示各IO大小区间的平均时延和分布情况 #### 8. iosizedist **功能**:统计API的IO大小分布 **语法**: ``` iosizedist [API名称] ``` **参数**: - `[API名称]`:可选,指定要分析的API名称,不指定则分析所有API **示例**: ``` iosizedist iosizedist PUT.OBJECT ``` **结果详解**: - 显示总请求数和平均IO大小 - 显示不同IO大小范围的请求数量、占比和分布图示 - 分布图示使用ASCII字符可视化显示 **样例输出**: ``` IO大小分布统计: -------------------------------------------------- 总请求数: 1000 平均IO大小: 2.00 KB IO大小范围 数量 占比 分布图示 ------------------------------------------------------------ 0-1KB 300 30.00% ||||||||||||||||||||||||| 1-4KB 400 40.00% |||||||||||||||||||||||||||||||||| 4-16KB 200 20.00% |||||||||||||||||||| 16-64KB 70 7.00% ||||||| 64KB+ 30 3.00% ||| ``` #### 9. arrivaltps **功能**:统计请求到达的TPS分布(按秒级) **语法**: ``` arrivaltps ``` **示例**: ``` arrivaltps ``` **结果详解**: - 显示每秒的请求到达数(TPS) - 显示平均TPS、最大TPS、最小TPS - 包含时间序列的TPS分布 **样例输出**: ``` 请求到达TPS分布 =================================================== 总请求数:1000 总时间跨度:60秒 平均TPS:16.67 最大TPS:30 最小TPS:5 时间范围 TPS --------------------------------------------------- 2023-01-01 00:00:00 10 2023-01-01 00:00:01 15 2023-01-01 00:00:02 20 2023-01-01 00:00:03 25 2023-01-01 00:00:04 30 2023-01-01 00:00:05 28 ... ``` #### 10. concurrent **功能**:统计每1秒的并发请求数 **语法**: ``` concurrent ``` **示例**: ``` concurrent ``` **结果详解**: - 显示每秒的并发请求数 - 显示平均并发数、最大并发数 - 包含时间序列的并发请求分布 **样例输出**: ``` 并发请求数统计 =================================================== 总时间跨度:60秒 平均并发数:8.33 最大并发数:15 时间范围 并发请求数 --------------------------------------------------- 2023-01-01 00:00:00 5 2023-01-01 00:00:01 8 2023-01-01 00:00:02 12 2023-01-01 00:00:03 15 2023-01-01 00:00:04 14 2023-01-01 00:00:05 10 ... ``` #### 11. featurestats **功能**:分析使用了哪些特性及其统计信息 **语法**: ``` featurestats ``` **示例**: ``` featurestats ``` **结果详解**: - 显示总请求数 - 显示各特性的请求数、占比、平均时延、p99时延、TPS等统计信息 - 按占比从大到小排序 - 包含特性说明 **样例输出**: ``` 特性使用统计: -------------------------------------------------- 总请求数: 1000 特性名称 数量 占比 平均时延(ms) p99时延(ms) TPS -------------------------------------------------------------------------------- https 800 80.00% 155.25 205.00 13.33 default 150 15.00% 130.50 180.00 2.50 compression 30 3.00% 180.75 250.00 0.50 encryption 20 2.00% 200.30 300.00 0.33 特性说明: - https: 使用了HTTPS协议 - encryption: 使用了数据加密功能 - compression: 使用了数据压缩功能 - posix: 使用了POSIX接口 - qos: 触发了QoS限流 - multipart: 使用了多段上传/下载 - default: 未使用特殊特性 ``` #### 12. slowtransfer **功能**:分析慢速传输,包括慢速上传和下载 **语法**: ``` slowtransfer [阈值] ``` **参数**: - `[阈值]`:可选,指定慢速传输的时延阈值(毫秒),默认为 1000ms **示例**: ``` slowtransfer # 使用默认阈值1000ms slowtransfer 500 # 使用自定义阈值500ms ``` **结果详解**: - 显示总上传请求数和总下载请求数 - 显示慢速上传和下载的详细统计:数量、占比、平均时延、最大时延 - 提供优化建议 **样例输出**: ``` 慢速传输分析 (阈值: 1000ms): -------------------------------------------------- 总上传请求数: 500 总下载请求数: 1000 上传慢速分析: 慢速上传数量: 25 占比: 5.00% 平均时延: 1250.50ms 最大时延: 2000.00ms 下载慢速分析: 慢速下载数量: 80 占比: 8.00% 平均时延: 1320.75ms 最大时延: 2500.00ms 建议: - 下载慢速请求占比较高,建议检查存储系统读取性能或网络带宽 ``` #### 13. linkage **功能**:OSC和Kongka日志联动分析 **语法**: ``` linkage ``` **示例**: ``` linkage ``` **结果详解**: - 显示OSC请求数和Kongka请求数 - 按API名称显示联动分析结果,包括OSC和Kongka的请求数、平均时延、时延比例 - 提供分析说明 **样例输出**: ``` OSC和Kongka日志联动分析: -------------------------------------------------- OSC请求数: 1000 Kongka请求数: 1000 按API名称的联动分析: -------------------------------------------------------------------------------- API名称 OSC请求数 OSC平均时延(ms) Kongka请求数 Kongka平均时延(ms) 时延比例 ------------------------------------------------------------------------------------------------- GET.OBJECT 800 150.50 800 140.25 1.07x PUT.OBJECT 200 250.20 200 230.15 1.09x 说明: - 时延比例 = OSC平均时延 / Kongka平均时延 - 该比例反映了后端处理与前端请求的时延关系 - 理想情况下,该比例应接近1.0 ``` #### 14. hotobjects **功能**:分析热点对象,显示访问频率最高的对象 **语法**: ``` hotobjects [top_n] ``` **参数**: - `[top_n]`:可选,指定返回前N个热点对象,默认为10 **示例**: ``` hotobjects # 显示前10个热点对象 hotobjects 20 # 显示前20个热点对象 ``` **结果详解**: - 显示总对象数和热点对象数 - 按访问次数排序显示热点对象排名 - 显示对象名称、访问次数、平均时延、平均IO大小、总IO大小 **样例输出**: ``` 热点对象访问分析: -------------------------------------------------- 总对象数: 500 热点对象数: 20 热点对象排名 (按访问次数): ---------------------------------------------------------------------------------------------------- 排名 对象名称 访问次数 平均时延(ms) 平均IO大小 总IO大小 ---------------------------------------------------------------------------------------------------- 1 object1.txt 100 150.25 1.5 KB 150 KB 2 object2.jpg 80 200.50 2.0 MB 160 MB 3 object3.pdf 60 180.75 500 KB 30 MB ``` #### 15. hotranges **功能**:分析热点对象范围,显示对象中访问频率较高的区域 **语法**: ``` hotranges [top_n] [range_size] ``` **参数**: - `[top_n]`:可选,指定返回前N个热点对象范围,默认为10 - `[range_size]`:可选,指定范围大小(字节),支持k/m/g后缀,默认为1MB **示例**: ``` hotranges # 显示前10个热点对象范围,使用默认1MB范围大小 hotranges 15 5m # 显示前15个热点对象范围,使用5MB范围大小 ``` **结果详解**: - 显示总范围数和热点范围数 - 按访问次数排序显示热点对象范围排名 - 显示对象名称、范围区间、访问次数、平均时延 **样例输出**: ``` 热点对象范围分析: -------------------------------------------------- 总范围数: 1000 热点范围数: 15 分析范围大小: 1048576 bytes 热点对象范围排名 (按访问次数): ---------------------------------------------------------------------------------------------------- 排名 对象名称 范围区间 访问次数 平均时延(ms) ---------------------------------------------------------------------------------------------------- 1 large_file.bin [0 - 1048576] 50 120.50 2 video.mp4 [1048576 - 2097152] 40 150.75 3 data.csv [0 - 1048576] 35 100.25 ``` #### 16. loadbalance **功能**:分析负载均衡度,统计不同节点的负载分布 **语法**: ``` loadbalance ``` **示例**: ``` loadbalance ``` **结果详解**: - 显示总节点数 - 显示各节点的请求数、平均时延、平均IO大小、总IO大小 - 显示负载均衡指标,包括请求数量均衡度、时延均衡度、IO大小均衡度等 - 提供负载均衡等级和优化建议 **样例输出**: ``` 负载均衡度分析: -------------------------------------------------- 总节点数: 5 节点负载统计: ---------------------------------------------------------------------------------------------------- 节点名称 请求数 平均时延(ms) 平均IO大小 总IO大小 ---------------------------------------------------------------------------------------------------- node1 200 150.25 1.0 MB 200 MB node2 180 145.50 1.1 MB 198 MB node3 220 155.75 0.9 MB 198 MB node4 210 148.25 1.0 MB 210 MB node5 190 147.50 1.0 MB 190 MB 负载均衡指标: -------------------------------------------------- 指标名称 数值 等级 -------------------------------------------------- 请求数量均衡度 0.9540 优秀 时延均衡度 0.9720 - IO大小均衡度 0.9800 - 变异系数 0.0650 - 最大最小比值 1.2222 - 基尼系数 0.0250 - 负载均衡度说明: - 优秀: 负载分布非常均匀,各节点负载差异很小 - 良好: 负载分布比较均匀,各节点负载差异较小 - 一般: 负载分布基本均匀,各节点负载差异可接受 - 较差: 负载分布不均匀,部分节点负载较重 - 极差: 负载分布严重不均匀,部分节点过载 优化建议: - 负载分布良好,无需特殊调整 ``` #### 17. cd **功能**:切换分析维度 **语法**: ``` cd # 切换到指定维度和值 cd .. # 退出当前维度 ``` **参数**: - ``:维度名称,可选:`bucket`, `account`, `cluster` - ``:维度值,指定要分析的具体维度值 **示例**: ``` cd bucket my-bucket # 切换到my-bucket维度分析 cd account test-account # 切换到test-account维度分析 cd .. # 退出当前维度,返回全局分析 ``` **结果详解**: - 显示切换后的维度信息 - 显示该维度下的请求数据数量 - 后续分析将仅针对该维度的数据 **样例输出**: ``` 已切换到 bucket = my-bucket 维度分析 该维度下共有 500 条请求数据 ``` #### 18. config **功能**:配置管理 **语法**: ``` config show # 显示当前配置摘要 config load # 加载配置文件 config save # 保存配置到文件 config reset [type] # 重置配置为默认值,type可选:osc, kongka, all config detail # 显示配置详细信息 ``` **参数**: - ``:配置文件路径,支持JSON/YAML格式 - `[type]`:可选,指定要重置的配置类型,默认为所有 **示例**: ``` config show # 显示配置摘要 config load config.json # 加载JSON配置文件 config save config.yaml # 保存配置为YAML文件 config reset osc # 重置OSC日志配置为默认值 config detail # 显示详细配置 ``` **结果详解**: - 根据子命令执行不同的配置操作 - 显示配置操作的结果信息 - `config detail` 显示完整的日志字段映射配置 **样例输出**: ``` # config show OSC日志配置摘要: - 字段数量: 50 - 主要字段: total_time(0), api_name(7), request_start_time(2) Kongka日志配置摘要: - 字段数量: 45 - 主要字段: total_time(0), api_name(6), request_start_time(1) # config detail OSC日志格式映射: total_time : 0 api_name : 7 request_start_time : 2 bucket : 8 account : 9 cluster : 10 first_byte_latency : 11 get_object_data_time : 12 send_data_time : 13 https_tls_handshake_time : 14 ... Kongka日志格式映射: total_time : 0 api_name : 6 request_start_time : 1 bucket : 7 account : 8 cluster : 9 request_time : 10 upstream_response_time : 11 ... ``` #### 19. ls **功能**:列出当前工作目录或指定目录下的文件 **语法**: ``` ls [目录路径] ``` **参数**: - `[目录路径]`:可选,指定要列出的目录路径,默认为当前目录 **示例**: ``` ls # 列出当前目录的内容 ls /path/to/logs/ # 列出指定目录的内容 ``` **结果详解**: - 显示目录路径和内容 - 区分文件和目录类型 - 目录名后带有斜杠标识 **样例输出**: 目录 '.' 的内容: 名称 类型 ---------------------------------------- main.py 文件 src/ 目录 README.md 文件 README_CLI.md 文件 README_TESTS.md 文件 run_tests.py 文件 ``` #### 20. fileinfo **功能**:显示指定文件的详细属性 **语法**: ``` fileinfo ``` **参数**: - ``:要查看的文件路径 **示例**: ``` fileinfo access.log # 显示access.log文件的详细信息 fileinfo /path/to/logs/error.log # 显示指定路径文件的详细信息 ``` **结果详解**: - 显示文件的基本信息:名称、路径、类型 - 显示文件的大小信息 - 显示文件的时间信息:创建时间、修改时间、访问时间 - 显示文件的其他信息:是否为日志文件、是否为压缩文件 **样例输出**: ``` 文件 'access.log' 的详细信息: ------------------------------------------------------------ 名称 : access.log 路径 : d:\develop\obs\obs_osc_accesslog_analyzer\access.log 类型 : 文件 大小 : 1.2 MB 创建时间 : 2023-01-01 10:00:00 修改时间 : 2023-01-01 12:00:00 访问时间 : 2023-01-01 12:30:00 是否为日志文件 : 是 是否为压缩文件 : 否 文件扩展名 : .log 可以分析 : 是 ``` #### 21. top **功能**:统计top N的bucket或account的workload **语法**: ``` top [bucket|account] [top_n] ``` **参数**: - `[bucket|account]`:可选,指定统计维度,默认为bucket - `[top_n]`:可选,指定返回前N个结果,默认为10 **示例**: ``` top # 统计前10个bucket的workload top account # 统计前10个account的workload top bucket 15 # 统计前15个bucket的workload ``` **结果详解**: - 按workload排序显示top N的bucket或account - 显示总请求数、平均TPS、平均BPS、最大并发、avgTime、p99、maxTime等指标 **样例输出**: ``` Top 10 Bucket Workload统计: --------------------------------------------------------------------------------- Bucket 总请求数 平均TPS 平均BPS 最大并发 avgTime p99 maxTime --------------------------------------------------------------------------------- bucket1 1000 16.67 209720 5 150.25 200.50 250.75 bucket2 800 13.33 167776 4 130.50 180.25 220.50 bucket3 600 10.00 125829 3 140.75 190.50 230.25 ``` #### 22. help **功能**:显示帮助信息 **语法**: ``` help ``` **示例**: ``` help ``` **结果详解**: - 显示所有可用命令的列表和简短说明 - 包含命令的基本用法 **样例输出**: ``` 可用命令: load - 加载包含时延数据的文件,支持目录和压缩包 avg - 计算并显示各指标平均时延(排序展示) avgdetail - 计算并显示各指标的详细平均时延 p99/p95/max/min - 计算并显示各指标相应统计值 apisummary - 显示所有API的汇总统计 latencydist - 统计并显示请求的时延分布 iolatencydist - 按IO大小统计指定API的时延分布 iosizedist - 统计API的IO大小分布 arrivaltps - 统计请求到达的TPS分布(按秒级) concurrent - 统计每1秒的并发请求数 featurestats - 分析使用了哪些特性及其统计信息 slowtransfer [threshold] - 分析慢速传输,包括慢速上传和下载,默认阈值1000ms linkage - OSC和Kongka日志联动分析 hotobjects [top_n] - 分析热点对象,显示访问频率最高的对象 hotranges [top_n [range_size]] - 分析热点对象范围,显示对象中访问频率最高的区域 loadbalance - 分析负载均衡度,统计不同节点的负载分布 cd - 切换分析维度或退出当前维度: cd - 切换到指定维度和值,支持的维度: bucket, account, cluster cd .. - 退出当前维度 config - 配置管理: config show - 显示当前配置摘要 config load - 加载配置文件 config save - 保存配置到文件 config reset [type] - 重置配置为默认值,type可选:osc, kongka, all config detail - 显示配置详细信息 ls - 列出当前工作目录或指定目录下的文件 fileinfo - 显示指定文件的详细属性 top [bucket|account] [top_n] - 统计top N的bucket或account的workload help - 显示此帮助信息 exit/quit - 退出程序 ``` #### 23. exit / quit **功能**:退出程序 **语法**: ``` exit quit ``` **示例**: ``` exit ``` **结果详解**: - 显示退出消息 - 程序终止运行 **样例输出**: ``` 退出程序,再见! ``` ## 配置文件 ### 配置文件格式 支持JSON和YAML格式,用于定义日志字段的映射关系。 **JSON格式示例**: ```json { "osc": { "total_time": 0, "api_name": 7, "request_start_time": 2, "bucket": 8, "account": 9, "cluster": 10 }, "kongka": { "total_time": 0, "api_name": 6, "request_start_time": 1, "bucket": 7, "account": 8, "cluster": 9 } } ``` **YAML格式示例**: ```yaml osc: total_time: 0 api_name: 7 request_start_time: 2 bucket: 8 account: 9 cluster: 10 kongka: total_time: 0 api_name: 6 request_start_time: 1 bucket: 7 account: 8 cluster: 9 ``` ### 配置文件使用 1. 加载配置文件: ```bash python main.py -c config.json ``` 2. 在交互式模式下加载配置: ``` config load config.yaml ``` 3. 保存当前配置: ``` config save new_config.json ``` ## 输出详解 ### 报告结构 所有报告输出遵循统一的结构: - 标题:使用等号分隔线 - 章节标题:使用横线分隔线 - 数据表格:使用对齐的列和分隔线 - 分布图示:使用ASCII字符可视化 ### 指标说明 | 指标名称 | 说明 | |----------|------| | total_time | 总时延(毫秒) | | first_byte_latency | 首字节时延(毫秒) | | send_data_time | 发送数据时间(毫秒) | | get_object_data_time | 获取对象数据时间(毫秒) | | https_tls_handshake_time | HTTPS TLS握手时间(毫秒) | | request_time | 请求处理时间(毫秒) | | upstream_response_time | 上游响应时间(毫秒) | | TPS | 每秒事务数 | | BPS | 每秒字节数 | | CRN | 请求成功率 | ## 示例 ### 1. 命令行模式示例 ```bash # 基本分析 python main.py -f "*.log" -o report.txt # 分析特定桶的p99时延 python main.py -f "*.log" -s bucket my-bucket -a p99 # 分析慢速传输,使用500ms阈值 python main.py -f "*.log" -a slowtransfer --threshold 500 # 按时间范围分析 python main.py -f "*.log" -b "2023-01-01 00:00:00" -e "2023-01-02 00:00:00" -a apisummary ``` ### 2. 交互式模式示例 ``` analyzer> load *.log 正在加载文件: access.log 正在加载文件: error.log 成功加载 2 个文件,解析到 1500 条有效日志记录 analyzer[2个文件]> avg 平均时延统计: -------------------------------------------------- total_time : 150.50 ms first_byte_latency : 75.25 ms send_data_time : 45.10 ms analyzer[2个文件]> cd bucket my-bucket 已切换到 bucket = my-bucket 维度分析 该维度下共有 800 条请求数据 analyzer[2个文件]> apisummary API请求汇总统计 =================================================== API名称:GET.OBJECT --------------------------------------------------- 总请求数:600 平均时延:140.25 ms ... analyzer[2个文件]> exit 退出程序,再见! ``` ## 常见问题 ### 1. 为什么没有找到匹配的文件? - 检查文件路径或模式是否正确 - 检查文件是否存在 - 检查是否有读取文件的权限 ### 2. 为什么没有解析到有效日志数据? - 检查日志文件格式是否正确 - 检查日志类型是否设置正确(-t 参数) - 检查日志配置是否正确 ### 3. 为什么分析结果为空? - 检查过滤条件是否过于严格 - 检查时间范围是否正确 - 检查维度值是否正确 ### 4. 如何提高分析速度? - 缩小分析的时间范围 - 按维度过滤,减少数据量 - 使用更快的存储设备 - 增加系统内存 ### 5. 支持哪些压缩格式? - .zip - .gz - .tar.gz - .tgz - .tar.bz2 - .tar.xz ## 贡献和开发 ### 项目结构 ``` src/ ├── config/ # 配置管理 ├── log_parser/ # 日志解析器 ├── data_analyzer/ # 数据分析器 ├── report_generator/ # 报告生成器 ├── utils/ # 工具函数 └── tests/ # 测试用例 ``` ### 运行测试 ```bash python run_tests.py ``` ### 测试文件结构 ``` src/tests/ ├── test_log_parsers.py # 日志解析器测试 ├── test_latency_analyzer_basic.py # 基本功能测试 ├── test_latency_analyzer_throughput.py # 吞吐量测试 ├── test_latency_analyzer_advanced.py # 高级功能测试 ├── test_latency_analyzer_filtering.py # 过滤功能测试 ├── test_latency_analyzer_distribution.py # 分布和并发测试 └── test_file_utils.py # 文件工具测试 ``` ## 许可证 [MIT License](LICENSE) ## 联系方式 如有问题或建议,请联系项目维护人员。