健康检查
健康检查(health check)是一种标准化的检查指标。向审视节点添加一个 fuchsia.inspect.Health 子节点,会为该子节点提供已被包含的健康信息。该信息能够通过系统范围的健康检查工具进行汇总。
健康检查节点布局
下面的属性和指标被导出至任何健康检查节点中:
| 名称 | 类型 | 描述 |
|---|---|---|
start_timestamp_nanos |
int64 | 该健康节点初始化时的单调时钟系统时间戳(即:首先变为 STARTING UP) |
message |
String | 如果 status==UNHEALTHY,那么它包含可选的故障细节消息。 |
status |
Enum | STARTING_UP:该健康节点已初始化,但尚未标记为运行。 |
OK:向该健康节点报告的子系统报告状况良好。 |
||
UNHEALTHY:向该健康节点报告的子系统报告状况不佳。 |
用户指南
下面的示例说明了使用 iquery 获取组件(component)健康状况信息的方法。
示例:
$ iquery show `iquery list`a.cmx:root:fuchsia.inspect.Health:start_timestamp_nanos = ...status = OKconnections:0:fuchsia.inspect.Health:start_timestamp_nanos = ...status = STARTING_UPoptional_database:fuchsia.inspect.Health:start_timestamp_nanos = ...status = UNHEALTHYmessage = "Cannot open local.file"b.cmx:root:fuchsia.inspect.Health:start_timestamp_nanos = ...status = OKc.cmx:root:fuchsia.inspect.Health:start_timestamp_nanos = ...status = UNHEALTHYmessage = "Failed to connect to fuchsia.example.RequiredService"
$ iquery show 'a.cmx:root/fuchsia.inspect.Health:status' 'b.cmx:root/fuchsia.inspect.Healh:status' 'c.cmx:root/fuchsia.inspect.Health:status'a:root:fuchsia.inspectHealth:status = Okb:root:fuchsia.inspectHealth:status = Okc:root:fuchsia.inspectHealth:status = Ok
在组件中使用健康检查
下面的部分用不同编程语言解释了如何使用 Fuchsia 组件中的库。
- {C++}
#include <lib/async-loop/cpp/loop.h>#include <lib/async-loop/default.h>#include <lib/sys/cpp/component_context.h>#include <lib/sys/inspect/cpp/component.h>int main(int argc, char** argv) {async::Loop loop(&kAsyncLoopConfigAttachToCurrentThread);auto context = sys::ComponentContext::CreateAndServeOutgoingDirectory();sys::ComponentInspector inspector(context.get());inspector.Health().StartingUp();// ...进行启动工作...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() {// 如果您有您自己的检查器,那么也可以导出它的健康状态。/* 检查器需要初始化 */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(); // 组件恢复健康。}
{Dart}
import 'package:fuchsia_inspect/inspect.dart' as inspect;void main(List<String> args) {final inspector = inspect.Inspect();inspector.health.setStartingUp();// ...Do startup work...inspector.health.setOk();inspector.health.setUnhealthy("I'm not feeling well.");inspector.health.setOk();}
