Compass是一个诊断大数据生态系统中计算引擎和调度器的平台,旨在提高故障排除的效率并降低问题调整的复杂性。 它自动收集日志和指标,除了使用启发式规则来识别问题并提供调整建议,对于日志,还使用了ChatGPT还提供诊断建议, 日志将使用drain算法自动聚合为模板,可用于人工干预等,提升诊断自动化和优化方案能力。
其主要功能特性如下:
- 非侵入式,即时诊断,无需修改已有的调度平台,即可体验诊断效果。
- 支持多种主流调度平台,例如DolphinScheduler 2.x和3.x、Airflow或自研等。
- 支持多版本Spark、MapReduce、Flink、Hadoop 2.x和3.x 任务日志诊断和解析。
- 支持工作流层异常诊断,识别各种失败和基线耗时异常问题。
- 支持引擎层异常诊断,包含数据倾斜、大表扫描、内存浪费等14种异常类型。
- 支持各种日志匹配规则编写和异常阈值调整,可自行根据实际场景优化。
- 支持一键诊断全量(包含非调度平台提交任务)Spark/MapReduce任务。
- 支持ChatGPT对异常日志进行诊断,提供解决方案,使用了drain算法聚合模板,节约成本。
- ChatGPT
- Spark
- Flink
- Mapreduce
- Trino
- Spark Tez
- Airflow
- DolphinScheduler
- Azkaban
- Oozie
- Debezium (同步Postgresql到Postgresql的数据同步)
- Other(我们非常欢迎与倾听其他任务建设性意见)...
欢迎加入社区咨询使用或成为 Compass 开发者。以下是获得帮助的方法:
- 提交 issue。
- 提交 pull request, 请阅读 contributing guideline。
- 讨论 Idea & Question。
我们将会尽快回复。
罗盘已支持诊断类型概览:
引擎 | 诊断维度 | 诊断类型 | 类型说明 |
Spark | 失败分析 | 运行失败 | 最终运行失败的任务 |
首次失败 | 重试次数大于1的成功任务 | ||
长期失败 | 最近10天运行失败的任务 | ||
耗时分析 | 基线时间异常 | 相对于历史正常结束时间,提前结束或晚点结束的任务 | |
基线耗时异常 | 相对于历史正常运行时长,运行时间过长或过短的任务 | ||
运行耗时长 | 运行时间超过2小时的任务 | ||
报错分析 | sql失败 | 因sql执行问题而导致失败的任务 | |
shuffle失败 | 因shuffle执行问题而导致失败的任务 | ||
内存溢出 | 因内存溢出问题而导致失败的任务 | ||
资源分析 | 内存浪费 | 内存使用峰值与总内存占比过低的任务 | |
CPU浪费 | driver/executor计算时间与总CPU计算时间占比过低的任务 | ||
效率分析 | 大表扫描 | 没有限制分区导致扫描行数过多的任务 | |
OOM预警 | 广播表的累计内存与driver或executor任意一个内存占比过高的任务 | ||
数据倾斜 | stage中存在task处理的最大数据量远大于中位数的任务 | ||
Job耗时异常 | job空闲时间与job运行时间占比过高的任务 | ||
Stage耗时异常 | stage空闲时间与stage运行时间占比过高的任务 | ||
Task长尾 | stage中存在task最大运行耗时远大于中位数的任务 | ||
HDFS卡顿 | stage中存在task处理速率过慢的任务 | ||
推测执行Task过多 | stage中频繁出现task推测执行的任务 | ||
全局排序异常 | 全局排序导致运行耗时过长的任务 | ||
MapReduce | 资源分析 | 内存浪费 | 内存使用峰值与总内存占比过低的任务 |
效率分析 | 大表扫描 | 扫描行数过多的任务 | |
Task长尾 | map/reduce task最大运行耗时远大于中位数的任务 | ||
数据倾斜 | map/reduce task处理的最大数据量远大于中位数的任务 | ||
推测执行Task过多 | map/reduce task中频繁出现推测执行的任务 | ||
GC异常 | GC时间相对CPU时间占比过高的任务 | ||
Flink | 资源诊断 | 内存利用率高 | 计算内存的使用率,如果使用率高于阈值,则增加内存 |
内存利用率低 | 计算内存的使用率,如果使用率低于阈值,则降低内存 | ||
JM内存优化 | 根据tm个数计算jm内存的建议值 | ||
作业无流量 | 检测作业的kafka source算子是否没有流量 | ||
TM管理内存优化 | 计算作业管理内存的使用率,给出合适的管理内存建议值 | ||
部分TM空跑 | 检测是否有tm没有流量,并且cpu和内存也没有使用 | ||
并行度不够 | 检测作业是否因为并行度不够引起延迟 | ||
CPU利用率高 | 计算作业的CPU均值使用率,如果高于阈值,则增加cpu | ||
CPU利用率低 | 计算作业的CPU均值使用率,如果低于阈值,则降低cpu | ||
CPU峰值利用率高 | 计算作业的CPU峰值使用率,如果高于阈值,则增加cpu | ||
异常诊断 | 存在慢算子 | 检测作业是否存在慢算子 | |
存在反压算子 | 检测作业是否存在反压算子 | ||
作业延迟高 | 检测作业的kafka延迟是否高于阈值 |
罗盘许可证是 Apache License, Version 2.0,详情请参考 LICENSE and NOTICE 。
Drain算法基于Logpai
项目, 详情请查看