诊断架构

本文档介绍了 Archivistfuchsia.diagnostics/ArchiveAccessor#StreamDiagnostics

简介

规范诊断数据架构描述了在所有诊断之间共享的结构 无论是通过流式处理还是通过快照访问的数据源。这种规范架构提供了 对现在称为诊断数据的一些要求;诊断数据必须:

  • 与与系统上的执行单元对应的特定名称相关联。
  • 带有时间戳。
  • 包含任意结构化数据载荷,包括分层数据。

诊断架构可以视为包含三个不同的部分:命名空间部分、 元数据部分和载荷部分

架构

顶级

顶级架构包含以下字段:

其在 JSON 中如下所示:

{
    "data_source": "INSPECT",
    "moniker": "core/foo",
    "metadata": { ... },
    "payload": { ... },
    "version": 1,
}

命名空间

“命名空间”部分包含可应用于整个 涵盖所有数据类型的架构;此信息用于描述来源的命名空间 生成了此诊断数据。命名空间部分由两个字段组成:

  • 组件 moniker,用于描述诊断数据包含的组件 架构。
  • data source,用于描述是哪项诊断服务生成了数据的。

元数据

“metadata”部分包含一些属性,它们具有静态已知的和已记录的架构, 一个值不能在所有嵌套架构之间共享。每个数据源都会添加自己的 元数据属性。“metadata”部分是唯一且不可统一的变体的位置 都以统一架构表示

检查

检查响应的元数据包含以下字段:

  • 错误:提取组件时发生的错误。检查数据(可选)。 错误是包含单个 message 字符串字段的对象。

  • 组件网址:启动组件的网址。

  • 时间戳:截取检查数据快照的单调时间。

  • 文件名 :检查数据在相应组件的 out/diagnostics 目录(如果存在)。

其在 JSON 中如下所示:

{
    ...,
    "metadata": {
        "errors": [
            {
                "message": "...",
            }
        ],
        "component_url": "fuchsia-pkg://...",
        "timestamp": 12345,
        "filename": "fuchsia.inpsect.Tree"
    },
}

日志

日志响应的元数据包含以下字段:

  • 错误:提取组件时发生的错误。检查数据(可选)。每个错误 可以是以下其中一项:

    • 丢弃的日志数:组件在写入时由于套接字写入而丢弃的日志数 错误。
    • 发布的日志:归档管理员由于 内部日志缓冲区已满。
    • 未能解析记录:无法获得组件向套接字写入的日志记录 已解析。
    • 其他:用于说明发生的其他某种错误的字符串。
  • 组件网址:启动组件的网址。

  • 时间戳:框架中事件发生的单调时间。

  • 严重性:日志的严重性。以下各项中的一项:TraceDebugInfoWarnErrorFatal

  • 标记:与日志关联的字符串标记列表(可选)。

  • Pid:发出日志的进程 Kid(可选)。

  • Tid:发出日志的线程 koid(可选)。

  • 文件:发出日志的文件的名称(可选)。

  • Line:在发出日志的文件中的行号(可选)。

其在 JSON 中如下所示:

{
    ...,
    "metadata": {
        "errors": [
            {
                "dropped_logs": { "count": 3 },
            }
        ],
        "component_url": "fuchsia-pkg://...",
        "timestamp": 12345,
        "severity": "Info",
        "tags": ["foo"],
        "pid": 123,
        "tid": 456,
        "file": "lib.rs",
        "line": 5,
    },
}

载荷

载荷部分包含要报告的实际诊断数据。载荷是结构化的 数据的上下文或主题由其在 层次结构(例如其所在节点的名称)。

检查

Inspect 响应的载荷是一个对象,代表组件 在拍摄快照时公开的图片

其在 JSON 中如下所示:

{
    ...,
    "payload": {
        "root": {
            "foo": { ... },
            "bar": 3,
            ...
        }
    },
}

日志

日志载荷是一个包含以下字段的对象:

  • 消息:包含一条日志消息。这是一个包含一个字段的对象: <ph type="x-smartling-placeholder">
      </ph>
    • 值:表示日志消息的字符串。
  • Keys:包含一个对象,其中包含结构化日志消息的键和关联值。

对于常规文本日志(或不含密钥的结构化日志),该日志以 JSON 格式表示,如下所示:

{
    ...
    "payload": {
        "message": {
            "value": "my log",
        }
    }
}

对于包含键的结构化日志,采用 JSON 格式,将如下所示:

{
    ...
    "payload": {
        "message": {
            "value": "my log",
        },
        "keys": {
            "foo": 3,
            "bar": "baz",
            ...
        }
    }
}