健康检查是一项标准化检查指标。 向检查节点添加 fuchsia.inspect.Health 子项可为该节点提供所包含的健康信息。系统级健康检查工具可以汇总此信息。
健康检查节点的布局
任何健康检查节点中都会导出以下属性和指标:
| 名称 | 类型 | 说明 |
|---|---|---|
start_timestamp_nanos |
int64 | 此健康节点初始化(即首次变为 STARTING UP)时的单调时钟系统时间戳 |
message |
字符串 | 如果 status==UNHEALTHY,则包含可选的失败详情消息。 |
status |
枚举 | STARTING_UP:健康节点已初始化,但尚未标记为正在运行。 |
OK:向此健康节点报告的子系统报告健康。 |
||
UNHEALTHY:向此健康节点报告的子系统报告不健康。 |
用户指南
以下示例说明了如何使用 ffx inspect 获取有关
组件健康状态的信息。
示例:
$ ffx inspect show
core/a:
root:
fuchsia.inspect.Health:
start_timestamp_nanos = ...
status = OK
connections:
0:
fuchsia.inspect.Health:
start_timestamp_nanos = ...
status = STARTING_UP
optional_database:
fuchsia.inspect.Health:
start_timestamp_nanos = ...
status = UNHEALTHY
message = "Cannot open local.file"
core/a:
root:
fuchsia.inspect.Health:
start_timestamp_nanos = ...
status = OK
core/a:
root:
fuchsia.inspect.Health:
start_timestamp_nanos = ...
status = UNHEALTHY
message = "Failed to connect to fuchsia.example.RequiredService"
$ ffx inspect show a.cm:root/fuchsia.inspect.Health:status b.cm:root/fuchsia.inspect.Healh:status c.cm:root/fuchsia.inspect.Health:status
a:
root:
fuchsia.inspectHealth:
status = OK
b:
root:
fuchsia.inspectHealth:
status = OK
c:
root:
fuchsia.inspectHealth:
status = UNHEALTHY
在组件中使用健康检查
以下部分介绍了如何在以各种编程语言编写的 Fuchsia 组件中使用该库。
C++
#include <lib/async-loop/cpp/loop.h>
#include <lib/async-loop/default.h>
#include <lib/sys/cpp/component_context.h>
#include <lib/inspect/component/cpp/component.h>
int main(int argc, char** argv) {
async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);
auto context = sys::ComponentContext::CreateAndServeOutgoingDirectory();
inspect::ComponentInspector inspector(loop.dispatcher(), inspect::PublishOptions{});
inspector.Health().StartingUp();
// ...Do startup work...
inspector.Health().Ok();
inspector.Health().Unhealthy("I'm not feeling well.");
inspector.Health().Ok();
loop.Run();
return 0;
}
Rust
use fuchsia_inspect as inspect;
use fuchsia_inspect::health;
fn main() {
// If you have your own inspector, it's also possible to export its health.
/* inspector needs to be initialized */
let inspector = /* ... */
let mut node = inspector::root();
let mut health = fuchsia_inspect::health::Node(node);
// ...
health.set_ok();
health.set_unhealthy("I'm not feeling well.");
health.set_ok(); // The component is healthy again.
}