本文档介绍了 Archivist 的 fuchsia.diagnostics/ArchiveAccessor#StreamDiagnostics
返回的响应的架构。
简介
规范诊断数据架构描述了所有诊断数据源(无论其通过流式传输访问还是通过快照访问)共享的结构。此规范架构为我们现在称为诊断数据的内容提供了一些要求;诊断数据必须:
- 与对应于系统中的执行单元的特定名称相关联。
- 带有时间戳。
- 包含任意结构化数据载荷,包括分层数据。
您可以将诊断架构视为包含三个不同的部分:命名空间部分、元数据部分和载荷部分。
架构
顶级
顶级架构包含以下字段:
这将在 JSON 中如下所示:
{
"data_source": "INSPECT",
"moniker": "core/foo",
"metadata": { ... },
"payload": { ... },
"version": 1,
}
命名空间
命名空间部分包含可应用于整个架构(涵盖所有数据类型)的信息;此信息用于描述生成此诊断数据的来源的命名空间。命名空间部分由两个字段组成:
- 一个组件
moniker
,用于描述架构中包含的诊断数据适用的组件。 data source
,用于说明是哪项诊断服务生成了数据。
元数据
元数据部分由具有静态已知和记录架构的属性组成,这些属性的单个值无法在所有嵌套架构之间共享。每个数据源都会添加自己的元数据属性。元数据部分是统一架构中表示诊断中唯一和不可统一变体的位置。
检查
检查响应的元数据包含以下字段:
错误:提取组件时出现的错误。检查数据(可选)。 此错误是只包含一个
message
字符串字段的对象。组件网址:启动组件的网址。
Timestamp:为检查数据截取快照时的单调时间。
文件名:检查数据位于组件的
out/diagnostics
目录内的文件的名称(如果存在)。
这将在 JSON 中如下所示:
{
...,
"metadata": {
"errors": [
{
"message": "...",
}
],
"component_url": "fuchsia-pkg://...",
"timestamp": 12345,
"filename": "fuchsia.inpsect.Tree"
},
}
日志
日志响应的元数据包含以下字段:
错误:提取组件时出现的错误。检查数据(可选)。每个错误可能为以下状态之一:
- 丢弃的日志数量:组件在写入时由于套接字写入错误而丢弃的日志数量。
- 已发布日志:由于内部日志缓冲区已满,归档人员从组件发布的日志数量。
- 未能解析记录:无法解析组件写入套接字的日志记录。
- Other:说明所发生的其他错误的字符串。
组件网址:启动组件的网址。
时间戳:框架中发生事件的单调时间。
严重级别:日志的严重级别。以下各项中的一项:
Trace
、Debug
、Info
、Warn
、Error
、Fatal
。标记:与日志关联的字符串标记列表(可选)。
Pid:发出日志的进程 koid(可选)。
Tid:发出日志的线程 koid(可选)。
File:发出日志的文件的名称(可选)。
行:生成日志的文件中的行号(可选)。
这将在 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,
...
}
},
}
日志
日志载荷是一个包含以下字段的对象:
- 消息:包含日志消息。这是一个包含一个字段的对象:
- 值:表示日志消息的字符串。
- Keys:包含一个对象,该对象具有结构化日志消息的键和相关值。
对于常规文本日志(或不含键的结构化日志),采用 JSON 格式如下:
{
...
"payload": {
"message": {
"value": "my log",
}
}
}
对于包含键的结构化日志,采用 JSON 格式时应如下所示:
{
...
"payload": {
"message": {
"value": "my log",
},
"keys": {
"foo": 3,
"bar": "baz",
...
}
}
}