本文档介绍了 Archivist 的
fuchsia.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"
},
}
日志
日志响应的元数据包含以下字段:
错误:提取组件时发生的错误。检查数据(可选)。每个错误 可以是以下其中一项:
- 丢弃的日志数:组件在写入时由于套接字写入而丢弃的日志数 错误。
- 发布的日志:归档管理员由于 内部日志缓冲区已满。
- 未能解析记录:无法获得组件向套接字写入的日志记录 已解析。
- 其他:用于说明发生的其他某种错误的字符串。
组件网址:启动组件的网址。
时间戳:框架中事件发生的单调时间。
严重性:日志的严重性。以下各项中的一项:
Trace
、Debug
、Info
、Warn
、Error
、Fatal
。标记:与日志关联的字符串标记列表(可选)。
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",
...
}
}
}