# 客户问题快速诊断工具集分享文档

# 1. 工具集与示例文件

工具分享地址:

工具资产清单 (opens new window)

# 2. 分享目标

依据 10个问题诊断、功能辅助工具,重点说明这些工具在什么场景下使用、解决什么问题、如何组合形成排障证据链,以及现场分享和演示时应该如何组织内容。

本文不是简单的命令清单,而是面向客户现场快速处理问题的工具使用指南。目标是帮助现场支持、交付、运维和研发同学在面对客户问题时快速完成三件事:

  • 快速判断问题方向:慢在哪里、错在哪里、资源瓶颈在哪里。

  • 快速沉淀证据:从日志、数据库、Redis、K8s、JVM、火焰图中生成可解释报告。

  • 快速形成结论:明确影响范围、风险等级、下一步动作和是否需要研发深入介入。

# 3. 适用人群

  • 现场交付和运维:需要快速采集客户现场证据、生成报告、判断影响范围。

  • 一线支持:需要根据客户反馈快速选择工具、缩小问题范围。

  • 研发同学:需要拿到结构化证据后继续分析代码、SQL、Redis、JVM 或 K8s 问题。

  • 技术负责人:需要了解这套工具如何支撑客户现场稳定性治理和故障复盘。

# 4. 10 个工具总览

编号 工具 工具定位 现场价值
00_db_stress 数据库压测工具 对 MySQL/达梦执行多场景 SQL 压测 验证 SQL 或数据库变更前后的吞吐、P90/P99、成功率
01_diag_flow 全景诊断编排入口 按场景串联 K8s 扫描和火焰图采样 降低现场执行复杂度,一条命令完成复合诊断
02_dm_log_analyzer 达梦慢查询日志分析
解析达梦慢日志并按 SQL 指纹聚合 找出高频慢 SQL、累计耗时 SQL、爆发时间窗口
03_error_log_statistics 错误日志统计 聚合 ERROR 日志、异常类型和趋势 把大量错误日志压缩成 TopN 错误清单和爆发趋势
04_form_load_statistics 表单/审批加载耗时分析 解析审批应用动态加载耗时分布 判断表单/审批慢在哪个加载阶段
05_k8s_scan K8s Java 全景诊断 采集 K8s、Pod、JVM、GC、线程、事件、指标 形成集群 + Pod + JVM 三层运行态证据
06_log_search 日志关键字检索 在大量日志和 ZIP 中检索关键字、正则、表达式 客户只给关键字、traceId、错误片段时快速定位上下文
07_log_statistics 日志量统计 按应用、类名、日志级别统计日志量和字节量 找出日志刷屏来源,支撑日志降噪和容量治理
08_redis_scan Redis 低风险诊断 采集 Redis 慢日志、连接、内存、持久化、复制、Key 样本 高峰期低风险判断 Redis 风险点
09_sy_profiler Java 容器火焰图采样 在 K8s 容器内执行 async-profiler 采样 定位 CPU 热点、分配热点、锁竞争、wall time 卡顿

# 5. 客户现场快速选型矩阵

现场问题 首选工具 辅助工具 处理目标
页面慢 log_search error_log_statisticsk8s_scandm_log_analyzerredis_scan 先定位慢在入口、应用、数据库、Redis 还是资源
接口慢 log_search k8s_scansy_profilerdm_log_analyzerredis_scan 还原接口上下文,判断链路瓶颈和运行态压力
审批/表单慢 form_load_statistics log_searchdm_log_analyzerk8s_scan 找出慢表单、慢应用 ID 和加载阶段耗时
错误爆发 error_log_statistics log_searchk8s_scanredis_scandm_log_analyzer 聚合异常类型、爆发时间和影响应用
只知道 traceId log_search k8s_scandm_log_analyzerredis_scan 快速找到请求上下文和涉及服务
只知道关键字 log_search error_log_statisticslog_statistics 用关键字、正则或逻辑表达式缩小范围
达梦慢 SQL dm_log_analyzer log_searchdb_stress 找 SQL 指纹、慢查询时间窗口和优化验证证据
Redis 慢/内存高 redis_scan log_search 低风险分析慢日志、连接、内存、持久化、复制和 Key 样本
K8s Pod 异常 k8s_scan log_searcherror_log_statisticssy_profiler 采集 Pod、JVM、GC、线程、事件和节点证据
CPU 高 k8s_scan sy_profilerlog_search 先确认目标 Pod,再采火焰图定位热点
日志刷屏/磁盘增长快 log_statistics log_searcherror_log_statistics 找出哪个应用、类名、日志级别贡献最大

# 6. 工具详细说明

# 6.1 00_db_stress 数据库压测工具

# 工具定位

db_stress 是 MySQL/达梦数据库多场景 SQL 压测工具,用于将“数据库性能感觉慢”转化为可量化的吞吐、耗时和错误率数据。

# 解决的问题

它适合验证数据库在指定 SQL、指定并发和指定持续时间下的表现,输出 TPS、成功数、失败数、平均耗时、P90、P99 等指标。它更适合作为变更验证和性能基准工具,而不是客户现场慢问题的第一步诊断工具。

# 适用场景

  • 数据库版本升级、参数调整、SQL 优化前后做性能对比。

  • 验证达梦或 MySQL 在特定查询场景下的并发能力。

  • 在测试环境复现某类 SQL 并发后响应变慢的问题。

  • 对客户现场定位出的慢 SQL 做低峰或非生产验证。

# 不适用或慎用场景

  • 生产高峰期直接压测数据库。

  • 未确认 SQL 安全性时执行写入或批量事务场景。

  • 没有控制并发、时长、数据范围时直接运行。

  • 用它替代慢日志分析或执行计划分析。

# 输入材料

  • db_stress_mysql.yamldb_stress_dm.yaml

  • 数据库连接配置或 DSN。

  • SQL 场景列表。

  • 可选 CSV 参数文件。

  • 并发数和持续时间。

# 输出结果

  • 控制台压测统计。

  • ./logs/<脚本名>_YYYYMMDD_HHMMSS.log

  • ./output/report_YYYYMMDD_HHMMSS.html

# 核心处理流程

读取 YAML 配置
  -> 初始化 MySQL/达梦连接池
  -> 解析多个 SQL 场景
  -> 将总并发平分到各场景
  -> 执行查询或批量事务
  -> 汇总 TPS、成功率、失败率、P90、P99
  -> 输出 HTML 报告

# 常用命令

# MySQL 压测示例
./db_stress-v1.1.4-darwin-arm64 -config db_stress_mysql.yaml -c 10 -t 10

# 达梦压测示例
./db_stress-v1.1.4-darwin-arm64 -config db_stress_dm.yaml -c 10 -t 10

# 报告怎么看

  • TPS:看数据库在该场景下的吞吐能力。

  • 成功数/失败数:失败数高时先看连接、SQL、权限、锁或超时。

  • 平均耗时:看整体稳定性。

  • P90/P99:看尾部延迟,客户现场慢通常更关注 P99。

  • 场景维度:多 SQL 场景时要看哪个场景拖慢整体结果。

# 现场处理建议

页面慢或接口慢时不要第一步就跑压测。建议先用 log_searcherror_log_statisticsdm_log_analyzer 判断是否确实指向数据库,再用 db_stress 在受控环境验证 SQL 优化效果。

# 6.2 01_diag_flow 全景诊断编排入口

# 工具定位

diag_flow 是诊断工具链的统一入口和场景编排器。它通过场景 YAML 把 k8s_scansy_profiler 等子工具组合起来,让现场从“记一堆命令”变成“选择一个场景”。

# 解决的问题

它解决的是现场执行复杂、参数易错、输出分散的问题。对 K8s 和 JVM 类问题,现场通常需要先扫 Pod/JVM 状态,再对目标 Pod 采火焰图。diag_flow 可以把这些动作封装为一个场景命令。

# 适用场景

  • 客户现场需要一键执行 K8s 全景诊断。

  • CPU 高时需要先扫描目标应用,再采集火焰图。

  • 多个工具需要统一输出目录、日志目录和结果编号。

  • 分享或培训时需要降低命令复杂度。

# 不适用或慎用场景

  • 只需要单独跑一个简单日志工具时,不必使用编排入口。

  • 场景配置未校验前,不建议直接在客户生产环境运行。

  • 子工具风险仍然存在,diag_flow 不会消除 sy_profiler 或深度扫描本身的影响。

# 输入材料

  • 主配置 config.yaml

  • 场景配置 config/scenes/*.yaml

  • 子工具目录 tools/

  • 场景参数,如 namespace、应用名、Pod、采样时长、采样事件。

# 输出结果

  • logs/diag-flow_<timestamp>.log

  • 统一 output/ 目录。

  • 子工具生成的 HTML、JSON、CSV、tar.gz 或 raw 数据。

# 核心处理流程

解析 -s 场景名和透传参数
  -> 读取主配置和场景 YAML
  -> 校验脚本、步骤和参数映射
  -> 组装子工具命令
  -> 按步骤执行 k8s_scan / sy_profiler 等工具
  -> 汇总日志和输出目录

# 常用命令

cd /usr/local/src/diag_flow

# K8s 全景扫描
./diag_flow -s k8s_scan_all -app bpm -n seeyon-wcl -id a1002

# K8s 扫描 + CPU 火焰图采样
./diag_flow -s k8s_scan_profiler -app ai -p ai-9b6bbd678-2rp6l -d 10 -e cpu -n seeyon-wcl -id a1004

# 报告怎么看

  • 先看 diag_flow 日志确认每个步骤是否执行成功。

  • 再进入子工具报告目录看 k8s_scansy_profiler 的具体结果。

  • 如果场景失败,优先检查参数映射、子工具权限、目标 namespace 和 Pod 是否正确。

# 现场处理建议

在客户现场,建议把 diag_flow 作为 K8s/JVM 类问题的推荐入口。普通日志分析仍直接使用对应工具即可。

# 6.3 02_dm_log_analyzer 达梦慢查询日志分析工具

# 工具定位

dm_log_analyzer 是达梦慢查询日志分析工具,用于把达梦慢日志转化为 SQL 指纹、耗时、次数、时间窗口和来源维度报告。

# 解决的问题

它解决“达梦慢日志太多、无法快速看出哪些 SQL 真正影响最大”的问题。通过 SQL 指纹归并,它能找出高频慢 SQL、累计耗时最高 SQL、单次最慢 SQL 和慢查询爆发时间段。

# 适用场景

  • 页面慢或接口慢最终怀疑达梦数据库。

  • 客户提供达梦慢日志,需要快速出分析报告。

  • 国产数据库迁移后出现 SQL 性能问题。

  • 需要把应用慢和数据库慢按时间窗口对齐。

# 不适用或慎用场景

  • 非达梦慢日志格式。

  • 需要直接分析执行计划、锁等待或数据库实例内部状态的场景。

  • 慢日志未开启或日志字段缺失时,分析结果有限。

# 输入材料

  • 达梦慢日志文件。

  • 达梦慢日志目录。

  • 包含达梦慢日志的 ZIP。

  • 可选时间范围、慢 SQL 阈值、时间桶粒度。

# 输出结果

  • ./output/report_<时间戳>.html

  • SQL 指纹聚合结果。

  • 慢 SQL TopN。

  • 时间窗口趋势。

  • 用户/IP 来源维度。

# 核心处理流程

扫描日志文件或 ZIP
  -> 识别达梦慢日志块
  -> 解析 SQL、EXECTIME、ROWCOUNT、用户、IP、时间
  -> 按阈值和时间范围过滤
  -> 生成 SQL 指纹并聚合
  -> 统计 TopN、P95、时间窗口趋势
  -> 输出 HTML 报告

# 常用命令

# 基础分析
./dm_log_analyzer-1.5.0-darwin-arm64 -d ../../assist/dm_logs/

# 指定阈值和输出目录
./dm_log_analyzer-1.5.0-darwin-arm64 -d ./logs -t 1000 -o ./output

# 指定时间范围
./dm_log_analyzer-1.5.0-darwin-arm64 -d ./logs -start "2026-05-19 10:00:00" -end "2026-05-19 12:00:00"

# 报告怎么看

  • SQL 指纹 TopN:优先看累计耗时高且执行次数多的 SQL。

  • 单次最慢 SQL:用于定位极端慢请求。

  • 平均耗时/P95:判断该 SQL 是否稳定慢。

  • 时间窗口趋势:用于和客户反馈时间、接口慢时间对齐。

  • 用户/IP:判断慢 SQL 来源应用或节点。

# 现场处理建议

如果 dm_log_analyzer 显示同一 SQL 指纹高频慢,下一步应结合应用入口、SQL 参数、索引、执行计划和数据量分析。它是第一层证据,不应单独作为最终根因。

# 6.4 03_error_log_statistics 错误日志统计工具

# 工具定位

error_log_statistics 是错误日志聚合工具,用于把大量 ERROR 日志和异常堆栈归类成 TopN 错误、趋势和爆发时间。

# 解决的问题

它解决“错误很多,不知道主要错误是什么”的问题。它会提取异常类型、归一化动态参数、按应用和类名聚合,帮助现场快速识别最需要处理的错误模式。

# 适用场景

  • 客户反馈系统大量报错。

  • 故障期间 error 日志很多,需要快速归类。

  • 多个应用同时报错,需要判断是否公共依赖异常。

  • 需要输出错误爆发趋势和 TopN 错误清单。

# 不适用或慎用场景

  • 需要还原完整调用链的场景。

  • 非标准日志格式可能只能部分解析。

  • 日志文件名不包含 error 时,需要调整文件名过滤参数。

# 输入材料

  • error 日志目录。

  • 多个日志目录,逗号分隔。

  • ZIP 日志包。

  • 可选 TopN、文件名过滤、时间桶参数。

# 输出结果

  • HTML 交互式报告。

  • CSV 报告。

  • 过程日志。

  • 错误类型趋势、类名趋势和尖峰分析。

# 核心处理流程

扫描 error 日志和 ZIP
  -> 解析 ERROR 日志头和异常堆栈
  -> 提取异常类型和根因
  -> 归一化 UUID、ID、IP、时间、JSON 等动态内容
  -> 构建错误签名
  -> 聚合 TopN、时间趋势、尖峰
  -> 输出 HTML 和 CSV 报告

# 常用命令

# 基础分析
./error_log_statistics-v1.1.6-darwin-arm64 -d ../../assist/中核

# 指定 TopN 和文件名过滤
./error_log_statistics-v1.1.6-darwin-arm64 -d ./logs -n 100 -pattern error

# 多目录分析
./error_log_statistics-v1.1.6-darwin-arm64 -d /data/app1,/data/app2 -w 8

# 仅做趋势分析
./error_log_statistics-v1.1.6-darwin-arm64 --trend-only -d ./logs

# 报告怎么看

  • TopN 错误:优先看出现次数最多、涉及应用最多的错误。

  • 错误趋势:看错误是否在某个时间点突然爆发。

  • 应用维度:判断是单应用问题还是公共依赖问题。

  • 类名维度:定位错误集中在哪些代码路径。

  • 样本堆栈:用于交给研发继续定位。

# 现场处理建议

如果客户只给一批 error 日志但没有明确关键字,先用 error_log_statistics 聚合。如果已经知道 traceId、异常类型或业务关键字,再用 log_search 查上下文。

# 6.5 04_form_load_statistics 表单/审批加载耗时分析工具

# 工具定位

form_load_statistics 是审批应用和表单加载耗时专项分析工具,用于解析业务日志中的动态加载总耗时和阶段耗时分布。

# 解决的问题

它解决“审批或表单打开慢,但不知道慢在哪个阶段”的问题。它能从日志中提取应用 ID、加载总耗时、class 数量和各阶段耗时占比。

# 适用场景

  • 审批应用打开慢。

  • 表单首次加载慢。

  • 动态应用加载超时。

  • 需要判断慢在 data initscan module classesdownload module 等哪个阶段。

# 不适用或慎用场景

  • 普通接口慢分析。

  • 日志中没有“耗时分布”或“动态加载总耗时”标记。

  • 非审批/表单加载类日志。

# 输入材料

  • 审批应用相关日志目录。

  • app-approval-info.log* 日志。

  • ZIP 日志包。

  • 可选阈值和 TopN。

# 输出结果

  • ./output/report.html

  • ./output/report.csv

  • 超时加载 TopN。

  • 应用 ID、总耗时、阶段耗时分布。

# 核心处理流程

扫描审批/表单日志和 ZIP
  -> 自动识别 UTF-8/GBK
  -> 解析加载 class 数量、应用 ID、耗时分布
  -> 提取动态加载总耗时和阶段耗时
  -> 按阈值筛选超时记录
  -> 汇总 TopN 和统计指标
  -> 输出 HTML 和 CSV 报告

# 常用命令

# 基础分析
./form_load_statistics-1.0.0-darwin-arm64 -d ../../assist/zhai

# 指定多个目录和阈值
./form_load_statistics-1.0.0-darwin-arm64 -d "./log1,./log2" -t 5000

# 指定配置文件
./form_load_statistics-1.0.0-darwin-arm64 -c custom_config.yaml

# 报告怎么看

  • 总记录数:本次分析识别到多少加载事件。

  • 超时记录:超过阈值的加载事件数量。

  • TopN 慢记录:优先看最慢的应用 ID。

  • 阶段耗时占比:判断慢在数据初始化、扫描 class、下载模块还是创建实例。

  • 原始日志块:用于研发复核和二次定位。

# 现场处理建议

如果报告显示大量慢记录集中在 data init,要继续看数据量、权限、表单配置、数据库查询等。如果集中在 scan module classes,要关注动态模块数量、类扫描和部署包结构。

# 6.605_k8s_scan K8s Java 全景诊断工具

# 工具定位

k8s_scan 是 K8s Java 应用全景诊断工具,用于采集集群、Pod、容器、JVM、GC、线程、事件和 Prometheus 指标,形成运行态证据包。

# 解决的问题

它解决“应用运行态到底有没有问题”的问题。客户现场出现 Pod 重启、CPU 高、内存高、GC 异常、线程异常、节点资源紧张时,k8s_scan 可以快速形成全景快照。

# 适用场景

  • K8s Pod 异常、重启、NotReady、CrashLoopBackOff。

  • Java 服务 CPU 高、内存高、GC 频繁。

  • 接口慢但需要确认应用运行态是否异常。

  • 需要采集一份可归档的现场运行态报告。

# 不适用或慎用场景

  • 没有 kubectl 或目标 namespace 权限。

  • 目标容器禁止 exec。

  • 容器镜像裁剪严重,缺少 JDK 工具时 JVM 诊断能力会下降。

  • 未确认目标范围时不要大范围 deep 扫描。

# 输入材料

  • Kubernetes 当前 context。

  • namespace。

  • Pod 名称关键字。

  • 可选 Prometheus 地址。

  • 输出 ID。

# 输出结果

  • HTML 报告。

  • CSV/JSON 指标。

  • raw 原始快照。

  • response.json

  • tar.gz 归档包。

  • 运行日志。

# 核心处理流程

解析 namespace、Pod 过滤和模式
  -> 前置检查 kubectl、exec、JDK 工具、Prometheus
  -> 发现 Node、Pod、资源 request/limit
  -> 采集 K8s 事件和节点信息
  -> 采集 JVM、GC、线程、内存、CPU 等运行态数据
  -> 拉取 Prometheus 指标
  -> 生成诊断报告和归档包

# 常用命令

# 通过 diag_flow 执行 K8s 全景扫描
./diag_flow -s k8s_scan_all -app bpm -n seeyon-wcl -id a1002

# 直接执行前置检查
./k8s_scan -check -n <namespace> -p <pod-keyword>

# 直接执行快速诊断
./k8s_scan -n <namespace> -p <pod-keyword> -m quick -id <case-id>

# 报告怎么看

  • Pod 状态:看是否重启、NotReady、OOMKilled。

  • 资源配置:看 request/limit 是否过低或资源争抢。

  • JVM 指标:看 GC、线程、堆内存、死锁风险。

  • K8s 事件:看调度、探针、镜像、节点事件。

  • Prometheus 指标:看问题时间窗口内的 CPU、内存、网络、IO 趋势。

# 现场处理建议

CPU 高或接口慢时,不要直接采火焰图。建议先用 k8s_scan 确认目标 Pod、资源、GC 和线程情况,再决定是否用 sy_profiler 深挖。

# 6.706_log_search 日志关键字检索工具

# 工具定位

log_search 是日志排障的第一把筛子。它支持普通文本和 ZIP 日志,支持字符串、正则、通配符、函数表达式、上下文行和趋势聚合。

# 解决的问题

它解决“客户只给一个关键字、traceId、用户 ID、接口名、错误片段,不知道日志在哪”的问题。它可以快速从大量日志和 ZIP 包里定位命中位置、上下文和时间分布。

# 适用场景

  • 只知道 traceId。

  • 只知道错误关键字。

  • 只知道用户 ID、单据号、应用 ID、接口路径。

  • 需要在 ZIP 日志中直接检索,不想手工解压。

  • 需要查看命中前后上下文。

# 不适用或慎用场景

  • 需要语义理解或完整调用链还原。

  • 关键字过宽导致命中量巨大。

  • 大日志量使用 memory 模式可能占用较多内存。

# 输入材料

  • 日志目录。

  • 日志文件。

  • ZIP 日志包。

  • 关键字、正则、通配符或函数表达式。

  • 可选文件名过滤、后缀过滤、上下文行。

# 输出结果

  • HTML 报告。

  • JSON 报告。

  • CSV 报告。

  • 运行日志。

  • disk 模式临时结果文件,正常结束会自动清理。

# 核心处理流程

解析路径、关键字和匹配模式
  -> 扫描文件和 ZIP
  -> 初始化字符串/正则/通配符/函数表达式匹配器
  -> 多 worker 检索命中行
  -> 提取上下文和时间信息
  -> 聚合文件、目录、时间桶趋势
  -> 输出 HTML/JSON/CSV

# 常用命令

# 基础检索 ERROR
./log_search-v3.6.9-darwin-arm64 -k ERROR -d ../../assist/中核

# 查看上下文
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -C 2

# 大日志量使用 disk 模式
./log_search-v3.6.9-darwin-arm64 -d ../log -pm disk -k "ERROR" -f html,json

# 函数表达式
./log_search-v3.6.9-darwin-arm64 -d ../log -m f -k "and(ERROR, Database)"

# 文件名过滤
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -p "*-error*.log"

# 指定趋势时间范围
./log_search-v3.6.9-darwin-arm64 -d ../log -k "ERROR" -ts 09:00 -te 18:00 -tb 1

# 报告怎么看

  • 命中总数:判断关键字是否大量出现。

  • 命中文件:判断涉及哪些应用或节点。

  • 时间趋势:判断是否在客户反馈时间窗口集中出现。

  • 上下文:判断关键字前后是否有异常、接口、用户、SQL、Redis 等线索。

  • 输出 JSON/CSV:适合交给研发或二次处理。

# 现场处理建议

现场不知道从哪里开始时,优先用 log_search 粗筛。如果命中的是大量 ERROR,再转 error_log_statistics 聚合。如果命中的是慢 SQL、Redis 超时、审批加载耗时,再转专项工具。

# 6.8 07_log_statistics 日志量统计工具

# 工具定位

log_statistics 是日志量统计和日志降噪工具,用于按应用、类名、级别和字节量统计日志贡献度。

# 解决的问题

它解决“日志到底是谁打出来的、为什么磁盘涨得快、哪个类在刷屏”的问题。它关注日志量和容量治理,不直接分析业务错误根因。

# 适用场景

  • 客户现场磁盘增长快。

  • info/error 日志刷屏。

  • 需要找出日志量最大的应用、类名或日志级别。

  • 需要评估忽略某些类或降低日志级别后能节省多少空间。

# 不适用或慎用场景

  • 需要分析异常根因时,应使用 error_log_statistics

  • 需要按关键字找上下文时,应使用 log_search

  • 非标准日志格式可能无法准确识别类名和应用名。

# 输入材料

  • 日志文件。

  • 日志目录。

  • ZIP 日志包。

  • 可选忽略类名配置。

# 输出结果

  • HTML 报告。

  • CSV 数据。

  • 中间数据文件。

  • 控制台摘要。

# 核心处理流程

扫描日志文件和 ZIP
  -> 识别日志文件类型
  -> 多 worker 解析日志行
  -> 提取应用、类名、日志级别、字节量
  -> 写入中间数据
  -> 汇总 class/app/level 维度
  -> 输出日志量统计报告

# 常用命令

# 基础分析
./log_statistics-1.0.0-darwin-arm64 -d ../../assist/中核

# 指定配置和忽略类
./log_statistics-1.0.0-darwin-arm64 -d /var/logs -f config.yaml -i "com.example.IgnoredClass"

# 仅分析已有中间数据
./log_statistics-1.0.0-darwin-arm64 -a -data ./log_stats.dat

# 报告怎么看

  • 应用维度:看哪个应用贡献日志最多。

  • 类名维度:看哪个类刷屏。

  • 级别维度:看 ERROR/WARN/INFO 的占比。

  • 字节量:看真正造成磁盘压力的日志来源。

  • 忽略类模拟:评估降噪收益。

# 现场处理建议

磁盘告警或日志量暴涨时,先用 log_statistics 找刷屏来源,再用 log_search 查看刷屏内容,若是 error 刷屏再用 error_log_statistics 聚合异常类型。

# 6.9 08_redis_scan Redis 低风险诊断工具

# 工具定位

redis_scan 是 Redis 服务端低风险诊断工具,以高峰可用、低风险优先为设计目标,采集慢日志、客户端、内存、持久化、复制、命令统计和 Key 样本。

# 解决的问题

它解决“Redis 慢、连接高、内存高、持久化或复制风险不明确”的问题。通过 peak/routine/night 三种模式控制采集力度,避免在高峰期执行高风险命令。

# 适用场景

  • Redis 响应慢或应用侧 Redis 超时。

  • Redis 连接数高。

  • Redis 内存高或疑似大 Key。

  • 需要检查 Redis 慢日志、持久化、复制状态。

  • 高峰期需要低风险采集基础证据。

# 不适用或慎用场景

  • 高峰期直接使用 night -F

  • 期望通过一次采样证明全量 Key 分布。

  • 网络、认证、权限不明确时直接执行正式采集。

# 输入材料

  • Redis 地址和端口。

  • Redis 密码。

  • 采集模式:peakroutinenight

  • 可选输出格式和 result id。

# 输出结果

  • HTML 报告。

  • JSON 结构化结果。

  • 运行日志。

  • 风险点、证据和建议。

# 核心处理流程

读取配置和 CLI 参数
  -> 校验 Redis 地址、模式和输出格式
  -> dry-run 或建立 Redis 连接
  -> 根据模式执行低风险采集
  -> 采集 INFO、SLOWLOG、CLIENT、持久化、复制、命令统计
  -> routine/night 执行受控 Key 采样
  -> 汇总风险点和建议
  -> 输出 HTML/JSON 报告

# 常用命令

# 使用配置文件中的地址,执行高峰保守采集
./redis_scan-v2.0.1-darwin-arm64 -m peak

# 参数校验,不连接 Redis
./redis_scan-v2.0.1-darwin-arm64 -d <redis-host>:6379 -n

# 常规低风险诊断
./redis_scan-v2.0.1-darwin-arm64 -d <redis-host>:6379 -a "<password>" -m routine -f html,json

# 低峰深度采样
./redis_scan-v2.0.1-darwin-arm64 -host <redis-host> -port 6379 -m night -slowlog 20 -sample-limit 200

# 报告怎么看

  • 慢日志:看是否有高耗时命令、发生时间和 Key。

  • 客户端连接:看是否连接堆积或异常客户端过多。

  • 内存:看 used_memory、maxmemory、碎片率和淘汰风险。

  • 持久化:看 RDB/AOF 是否可能引起抖动。

  • 复制:看主从状态、延迟和角色。

  • Key 样本:看疑似大 Key、无 TTL Key 或 Key 分布异常。

# 现场处理建议

高峰期优先 peakroutine。只有在低峰并确认风险后,才考虑 night-F 强制模式会跳过安全降级,应作为最后手段。

# 6.10 09_sy_profiler Java 容器火焰图采样工具

# 工具定位

sy_profiler 是 K8s Java 容器 async-profiler 采样工具,用于在不改镜像、不重启服务的情况下采集 CPU、alloc、lock、wall 等火焰图。

# 解决的问题

它解决“CPU 高但不知道代码热点在哪里、接口慢但不知道线程在等什么、锁竞争或对象分配热点不清楚”的问题。

# 适用场景

  • Java 服务 CPU 高。

  • 接口慢且怀疑应用内部热点。

  • 需要分析对象分配热点:event=alloc

  • 需要分析锁竞争:event=lock

  • 需要分析线程等待、IO、阻塞:event=wall

# 不适用或慎用场景

  • 未确认目标 Pod 和容器。

  • 容器不允许 attach 或缺少必要权限。

  • 多 Java 进程但未明确目标进程。

  • 在多个 Pod 上长时间同时采样。

# 输入材料

  • namespace。

  • Pod 名称。

  • container 名称。

  • 采样事件:cpualloclockwall

  • 采样时长。

  • 本地 async-profiler 扩展包。

# 输出结果

  • HTML 火焰图。
  • JFR 文件。
  • collapsed 文件。
  • metadata.json。
  • 运行日志。
  • tar.gz 归档。

# 核心处理流程

解析 namespace、pod、container、event、duration
  -> 校验 kubectl、目标 Pod 和容器
  -> 识别容器 CPU 架构
  -> 下发 async-profiler 到容器
  -> 自动识别 Java PID
  -> 执行采样并生成 HTML/JFR/collapsed
  -> 容器内打包结果
  -> 回传本地归档

# 常用命令

# 通过 diag_flow 执行 K8s 扫描 + CPU 火焰图采样
./diag_flow -s k8s_scan_profiler -app ai -p ai-9b6bbd678-2rp6l -d 10 -e cpu -n seeyon-wcl -id a1004

# 直接采集 CPU 火焰图
./sy_profiler -c config.yaml -n <namespace> -pod <pod-name> -container <container-name> -event cpu -duration 30 -id <case-id>

# 采集 wall time
./sy_profiler -c config.yaml -n <namespace> -pod <pod-name> -container <container-name> -event wall -duration 60 -id <case-id>

# 报告怎么看

  • CPU 火焰图:宽度越大的方法占用 CPU 越高。

  • wall 火焰图:反映等待、阻塞、IO、网络等耗时,不等同于 CPU 消耗。

  • lock 火焰图:用于分析锁竞争。

  • alloc 火焰图:用于分析对象分配热点。

  • metadata:确认采样对象、Pod、容器、事件和时间是否正确。

# 现场处理建议

CPU 高时先用 k8s_scan 确认目标 Pod,再用 sy_profiler 短时间采样。采样结果应交给研发结合代码路径分析,不建议只凭火焰图宽度直接做业务结论。

编撰人:liujun

快速跳转