检测快照归档

检测设备端运行,定期收集和评估诊断数据,以决定是否生成崩溃报告 / 快照。

工作原理

每隔几分钟,检测功能会读取检查状态,评估触发条件, 并将崩溃报告提交给 FuchsiaDetect 产品。调用 诊断扫描由 中的命令行参数设置 //src/diagnostics/detect/meta/triage-detect.cml

目前无法读取除“检查”以外的诊断状态。SyslogHas(), KlogHas() 和 BootlogHas() 将始终返回 false。

启用崩溃报告

默认情况下,检测在所有产品和 build 中运行,但仅创建或文件 某些 build 中的崩溃报告。否则,它会记录警告: Detect would have filed {},其中 {} 替换为快照签名。

仅当出现以下情况时,检测功能才会生成崩溃报告: "//src/diagnostics/detect:enable-report-filing"包含在 --with-base

只有在某些 build 配置中,或在以下情况下,崩溃报告才会发送到服务器: 如崩溃报告中所述,已明确启用。

快照触发器

快照触发器位于 //src/diagnostics/config/triage/detect 目录中。添加到该文件夹的文件 目录添加到 detect_unconditional_files //src/diagnostics/config/triage/BUILD.gn

.triage 文件是标准的 Triage 格式。Detect 会添加新的 act 类型:

    snapshot_action: {
        type: "Snapshot",
        trigger: "something > something_else",
        repeat: "Hours(6)",
        signature: "a-string-with-restrictions",
    }
  • Triage-lib 对 trigger 进行评估,就像在 Warning 类型的操作中一样。
  • 如果条件持续存在,则 repeat 会提供重新提交前的最短延迟时间 或重复。它可以使用 Days()Hours()Minutes()。如果 “repeat”值小于 MINIMUM_SIGNATURE_INTERVAL_NANOS 且系统会记录一次警告。
  • signature 会在崩溃报告中报告。
    • fuchsia-detect- 会附加到签名前面。
    • 签名只能包含小写字母和连字符 (不得包含空格或下划线)。任意字符 将转换为小写形式或转换为连字符,并且会显示错误 将会被记录下来。
    • 多项快照操作可能具有相同的签名。提交的崩溃报告 完全相同将应用 repeat 节流 每个签名,而不是每个操作,使用 触发。

包含条件文件

检测配置文件只能包含在一部分 build 中,或 产品。此操作可通过执行以下操作在 //src/diagnostics/config/triage/BUILD.gn 中完成:

  1. 改为将文件添加到 detect_conditional_files 高于 detect_unconditional_files
  2. 创建新的 config_data() 条目;按照惯例,其目标名称应为 与文件名相同
  3. 将该目标添加到相应的组中,以便将文件随同 以及它应该分析的任何元素

相关示例请参见此处

细则

如果您在桌面设备上使用检测功能进行调试,请阅读本部分。

repeat 实际上是类似 trigger 的分类评估表达式,可以是 根据检查数据动态计算得出。表达式的计算结果必须是 整数,以纳秒为单位。

“检测”功能检查诊断数据的频率由 --check-every 命令行参数(在 //src/diagnostics/detect/meta/triage-detect.cml。(此表达式必须 仅包含常量。)

Detect 对时间延迟有内置限制;如果出现以下情况,则系统会退出并显示错误 --check-every 小于 MINIMUM_CHECK_TIME_NANOS,将会 将重新归档快照延迟至少 MINIMUM_SIGNATURE_INTERVAL_NANOS。 可以通过添加 --test-only 命令行参数来替换这些限制。