反馈已提交

网络繁忙

容器诊断采集

  • 文档创建者:Carly
  • 历史版本:1
  • 1. 概述

    1.1 版本

    运维平台版本功能变更
     2.39.0-

    1.2 功能简介

    FR、BI、FDL 及 BI 引擎组件发生启动异常、反复重启或健康检查失败时,管理员通常需要分别收集应用日志、容器日志、Docker 事件和线程堆栈,依赖人工登录节点、切换多个入口并手动对齐时间,排查慢且容易遗漏关键材料。「诊断采集」把这些材料的采集、时间对齐与打包合并为一次操作。

    推荐在以下场景使用:

    1)容器启动失败或启动后立即退出,需要定位启动阶段的报错。

    2)容器反复重启,需要对齐 Docker 事件与应用日志的时间线。

    3)健康检查持续失败(unhealthy),需要线程堆栈判断应用是否卡死。

    4)向技术支持或帆软研发提交问题时,需要一次性提供完整的现场材料。

    注:本功能只导出材料,不做自动诊断结论;日常性能巡检请使用「健康巡检」「深度巡检」等功能。

    2. 使用前提

    下表列出发起诊断采集前必须满足的条件。

    检查项目要求
    项目部署方式运维平台部署
    平台版本运维平台 2.39.0 及之后版本
    目标组件FR、BI、FDL 应用组件,或 BI 引擎 Master、Worker
    节点状态目标容器所在宿主机的 ops-agent 在线,可与运维平台正常通信
    账号权限具备该运维项目「组件管理」的操作权限

    3. 诊断采集

    本章目标:从「组件管理」发起一次诊断采集,并拿到可提交给研发的诊断包。

    3.1 进入采集入口

    本节用于定位「诊断采集」按钮所在位置。操作如下:

    1)登录运维平台,进入目标运维项目。单击「维护>组件管理」。

    2)在组件的容器列表中找到目标容器。

    3)单击该容器「操作」列最右侧的展开箭头,在下拉菜单中选择「诊断采集」。

    注:下拉菜单仅对支持诊断采集的组件容器展示;容器状态为非 running 时该入口仍可点击。

    3.2 设置时间窗并开始采集

    1)在「诊断采集」弹窗中,通过「开始时间」控件选择故障发生前的时间点,例如 2026-08-26 10:24:01。

    • 选择开始时间后,诊断采集时间为开始时间后最多 1 小时的材料;不足 1 小时则截断至当前时间。

    • 开始时间建议早于故障时刻 5~10 分钟,以覆盖启动阶段的前置日志。

    • 单次任务最多覆盖 60 分钟,跨度更长的问题需分多次采集。

    2)确认弹窗中提示的「最近的容器启动时间」,用于判断所选时间窗是否覆盖了本次启动过程。

    3)单击「开始采集」。

    3.3 下载并校验诊断包

    1)等待采集任务完成,浏览器自动下载单个 ZIP 文件。

    2)文件名格式为「IP_容器名_导出时间.zip」,例如 192.168.101.91_fanruan240727164101_bi7-web_20260826112424.zip。

    3)解压后打开 manifest.json,逐项检查 artifacts 中每个材料的 status 是否为 SUCCESS。

    4)若存在非 SUCCESS 项,按 reason 字段对照本文「6. 常见问题」处理,必要时调整时间窗后重新采集。

    4. 诊断包

    采集任务完成后,浏览器自动下载单个 ZIP 文件。

    4.1 诊断包内容说明

    诊断包为单层扁平结构,内部文件不再嵌套目录,也不做二次压缩。下表说明各文件的来源与用途。

    文件内容与用途
    fanruan.logFR、BI、FDL Web 组件的应用业务日志,已按时间窗裁剪并合并轮转文件;BI 引擎组件不生成该文件
    polars.logBI 引擎 Master、Worker 的应用日志,取自 ${POLARS_HOME}/logs,默认 /data/polars/logs
    catalina.outTomcat 中间件日志,用于查看容器启动阶段与 Web 容器级报错
    server.logTongWeb、BES、InfoRSuite 等非 Tomcat 中间件日志,与 catalina.out 二者只生成其一
    docker.log通过 Docker Engine 日志接口读取的容器 stdout/stderr,用于补充启动脚本输出与未进入应用日志的异常
    events.json时间窗内该容器的 Docker 事件(start、stop、die、restart、health_status、oom、kill 等);无事件时内容为 []
    thread-dump-yyyyMMdd-HHmmss.txt线程堆栈,最多 3 份历史自动堆栈加 1 份即时堆栈,合计最多 4 份
    manifest.json任务元信息与各材料采集状态,包含 taskId、projectId、containerId、startTime、endTime、componentType 与 artifacts 列表

    4.2 常见问题定位

    解压诊断包后,打开 manifest.json,逐项检查 artifacts 中每个材料的 status 是否为 SUCCESS。

    若存在非 SUCCESS 项,按 reason 字段对照本文处理,必要时调整时间窗后重新采集。

    问:manifest.json 中即时堆栈状态为 CONTAINER_NOT_RUNNING,是否代表采集失败?

    答:不是。该状态表示采集时目标容器未运行,无法新打堆栈。此时应重点查看历史自动堆栈、docker.log 与 events.json;若需要即时堆栈,需在容器运行状态下重新采集。

    问:为什么 ZIP 中缺少 fanruan.log 或 catalina.out?

    答:常见原因有三类。一是候选文件在容器内不存在(如日志目录被改动);二是文件存在但无法识别任何时间戳,采集项返回 APP_LOG_TIMESTAMP_UNRECOGNIZED;三是所选时间窗内确实没有日志记录。请先按 manifest.json 的 reason 判断,再核对容器内日志目录与所选时间窗。

    问:events.json 内容为 [],是不是采集出错?

    答:不是。空数组表示所选时间窗内该容器没有已入库的 Docker 事件。若事件刚刚发生,请等待一个 60 秒上报周期后重新采集;若 status 为 PERSISTED_EVENT_UNAVAILABLE,则表示配置库查询失败,需检查 FineOps 与配置库连通性。

    问:docker.log 缺失或状态为 DOCKER_LOG_UNAVAILABLE 怎么办?

    答:该状态表示调用 Docker Engine 日志接口异常。请检查目标节点 Docker 服务状态与 ops-agent 是否在线,恢复后重新采集。

    问:为什么线程堆栈文件比预期少?

    答:历史自动堆栈始终只保留最新 3 份,且需落在所选时间窗内才会导出;此外 jcmd 超时(超过 30s)、非零退出或输出超过 64 MiB 时,系统不会提交截断内容,只在 manifest.json 中记录失败。

    问:容器内有多个 Java 进程,会不会打错堆栈?

    答:不会。即时与自动采集均优先判断 PID 1,PID 1 为 Java 时直接使用,否则回退到「唯一 Java 进程」规则;采集通过 Docker API 在目标容器的 PID namespace 内执行,与宿主机及其他项目容器相互隔离。


    附件列表


    主题: 项目管理
    • 有帮助
    • 没帮助
    • 只是浏览
    中文(简体)

    鼠标选中内容,快速反馈问题

    鼠标选中存在疑惑的内容,即可快速反馈问题,我们将会跟进处理。

    不再提示

    10s后关闭

    联系我们
    在线支持
    获取专业技术支持,快速帮助您解决问题
    工作日9:00-12:00,13:30-17:30在线
    页面反馈
    针对当前网页的建议、问题反馈
    售前咨询
    采购需求/获取报价/预约演示
    或拨打: 400-811-8890 转1
    qr
    热线电话
    咨询/故障救援热线:400-811-8890转2
    总裁办24H投诉:17312781526
    提交页面反馈
    仅适用于当前网页的意见收集,帆软产品问题请在 问答板块提问前往服务平台 获取技术支持