Fuchsia 提供多种可观测系统来帮助您进行诊断 例如:
日志
日志是由 Fuchsia 程序发出的按时间排序的诊断数据流。 它们最常采用面向用户的低频文本字符串形式,用于描述子系统状态的变化。
目录
日志包含多个元数据,这些元数据通常由生成特定日志的每个组件自行报告。日志消息至少包含时间戳和字符串内容。
此外,如果使用LogSink
它包括严重级别、PID、TID、之前的
删除的日志和字符串标记列表。并非所有元数据都是必需的
但受支持的库可确保每个字段在写入时
写入通过 LogSink 获取的套接字。
Archivist 会向组件写入套接字的数据中插入其他元数据。如需详细了解 归档管理员提供了 Fuchsia 设备日志,请参阅 日志记录。
存储
目前,所有日志存储都以先进先出 (FIFO) 的原则轮替, 而较新邮件会覆盖旧邮件。任何组件的消息都可以发布来自任何其他组件的消息。
Fuchsia 中的日志可存储在以下类型的内存中:
易失性
Fuchsia 设备上有两个用于日志的内存存储区:
klog
或 debuglog,内核中的 128kb 缓冲区。syslog
,是归档器中的可配置缓冲区。
在使用日志时,请务必 了解 Fuchsia 如何写入日志,以便您更好地查找 可以存储日志的位置,因为日志说明了其中哪个缓冲区是目标缓冲区 。
常驻
反馈数据组件会维护系统上次启动时的消息的 persistent_disk_store。
使用 ffx target snapshot
定位 Fuchsia 设备时,您会看到这些消息。
使用日志
如需开始使用日志记录功能,您可能需要:
检查
借助“检查”功能,组件能够在运行时公开有关其状态的结构化分层信息。组件托管一个映射的虚拟 使用检查格式公开检查层次结构的内存对象 (VMO) 包含此内部状态。注意:如需详细了解 Inspect VMO 文件格式,请参阅 Inspect VMO 文件格式。
使用 Inspect
如需开始使用 Inspect,您可能需要:
档案管理员
Archivist 会从 Inspect 和 Fuchsia 日志提取数据,并通过 fuchsia.diagnostics/ArchiveAccessor
协议提供这些数据。
归档程序通过 fuchsia.component.EventStream
从组件框架提取生命周期事件:
- 请求的功能:归档程序会接收与
fuchsia.logger.LogSink
和fuchsia.inspect.InspectSink
的连接的Capability requested
事件,以便归因 Inspect 和日志。
CapabilityRequested
个事件
CapabilityRequested
事件是提供日志和检查
标记和组件网址等归因元数据。
Archivist-manifest expose
的 fuchsia.logger.LogSink
与任何其他协议功能一样,但它还 use
了框架中的事件,将其绑定到其命名空间中的协议:
为了更好地了解其工作原理,请查看 Archivist 的 CML 文件:
// Copyright 2022 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// This shard is meant to contain stuff that is meant to be shared across all flavors of the
// archivist.
{
include: [ "//src/diagnostics/archivist/meta/config.shard.cml" ],
program: {
runner: "elf",
lifecycle: { stop_event: "notify" },
},
capabilities: [
{
protocol: [
"fuchsia.diagnostics.ArchiveAccessor",
"fuchsia.diagnostics.host.ArchiveAccessor",
"fuchsia.diagnostics.LogSettings",
"fuchsia.inspect.InspectSink",
"fuchsia.logger.Log",
"fuchsia.logger.LogSink",
],
},
],
use: [
{
event_stream: [ "capability_requested" ],
from: "parent",
path: "/events/log_sink_requested_event_stream",
filter: { name: "fuchsia.logger.LogSink" },
},
{
event_stream: [ "capability_requested" ],
from: "parent",
path: "/events/inspect_sink_requested_event_stream",
filter: { name: "fuchsia.inspect.InspectSink" },
},
{
protocol: [ "fuchsia.tracing.provider.Registry" ],
availability: "optional",
},
{
protocol: [ "fuchsia.inspect.InspectSink" ],
from: "self",
},
],
expose: [
{
protocol: [
"fuchsia.diagnostics.ArchiveAccessor",
"fuchsia.diagnostics.host.ArchiveAccessor",
"fuchsia.diagnostics.LogSettings",
"fuchsia.inspect.InspectSink",
"fuchsia.logger.Log",
"fuchsia.logger.LogSink",
],
from: "self",
},
],
}
这会导致组件管理器重定向来自默认
fuchsia.io
命名空间协议
fuchsia.component.EventStream
协议。档案保管员收到
事件,从 EventHeader
中检索归因元数据
由组件管理器与 LogSink
通道句柄一起发送。描述符中包含的标识名是在事件标头中构建的。
为 LogSink
配置 capability_requested
事件不会影响 capability 路由本身,只会影响将渠道作为事件(而非 Open()
)传递给归档管理器。这意味着,对于组件拓扑的其余部分,用于传递带属性的 LogSink
的 CML 保持不变。如需了解详情,请参阅协议打开生命周期和事件文档。
归因 LogSink 连接
当 Fuchsia 组件想要写入日志时,必须获取其传入目录中 fuchsia.logger.LogSink
的连接,该连接通常由归档程序实例提供。
典型的 Fuchsia 服务连接是匿名的,这样,服务器和
客户之间没有任何身份信息。客户端只会看到其命名空间(例如 /svc/fuchsia.logger.LogSink
)中的服务,而服务器会看到对其传入命名空间的匿名 Open()
请求。
归因日志记录可提供可靠的归因元数据,
更好地监控、存储、查询和呈现日志。此归因元数据用于标识传入 LogSink
连接的来源,这通过 CapabilityRequested
事件完成。