1 个不稳定版本

0.1.0 2024 年 7 月 12 日

#184魔法豆

Download history 132/week @ 2024-07-09 47/week @ 2024-07-16 18/week @ 2024-07-23

197 每月下载
用于 40 个 crates (11 个直接)

MIT/Apache

28KB
540

健康监控

为节点组件提供健康检查基础设施,允许组件报告其当前健康状态。节点运行的所有组件的健康状态将被汇总,并以 HTTP GET /health 端点形式公开,绑定到专门的健康检查端口,适用于主节点和外部节点。此端点可以用作 Kubernetes 的就绪探测,或用于其他自动化。

主要概念

组件 是节点的一个逻辑上隔离的部分,它影响节点处理请求的能力(即节点健康)。组件应该无限期运行,直到节点收到停止信号。

  • 内部组件对应一个或多个 Tokio 任务。内部组件的例子包括:JSON-RPC API 服务器、默克尔树、一致性检查器、重组检测器。
  • 外部组件对应与节点通信的另一个进程。外部组件的例子包括:Postgres 连接池、主节点 JSON-RPC(对于外部节点)。

每个组件都可以报告其健康状态,它由两部分组成

  • 状态,例如,“未就绪”、“就绪”、“关闭”、“恐慌”;请参见 crate 代码以获取完整列表。
  • 详细信息,一个具有特定组件模式的 JSON 值。例如,默克尔树将其 L1 批次“游标”作为此信息的一部分报告。

所有组件的健康状态汇总为 应用程序健康,它具有自己的状态,该状态是组件状态的最低值。应用程序健康由 /health 端点返回。

/health 端点格式

/health 将返回当前应用的编码为 JSON 对象的健康状态。如果应用健康,则响应的 HTTP 状态为 20x;如果不健康,则为 50x。

警告。目前 /health 端点返回的数据模式不稳定,可能会在没有通知的情况下更改。请自行承担风险。

外部节点端点输出示例
{
  "status": "ready",
  "components": {
    "sync_state": {
      "status": "ready",
      "details": {
        "is_synced": true,
        "local_block": 91,
        "main_node_block": 91
      }
    },
    "connection_pool": {
      "status": "ready",
      "details": {
        "max_size": 50,
        "pool_size": 10
      }
    },
    "tree": {
      "status": "ready",
      "details": {
        "leaf_count": 12624,
        "mode": "full",
        "next_l1_batch_number": 26,
        "root_hash": "0x54d537798f9ebd1b6463e3773c3549a389709987d559fdcd8d402a652a33fb68",
        "stage": "main_loop"
      }
    },
    "snapshot_recovery": {
      "status": "ready",
      "details": {
        "factory_deps_recovered": true,
        "snapshot_l1_batch": 24,
        "snapshot_miniblock": 89,
        "storage_logs_chunk_count": 10,
        "storage_logs_chunks_left_to_process": 0,
        "tokens_recovered": true
      }
    },
    "consistency_checker": {
      "status": "ready",
      "details": {
        "first_checked_batch": 25,
        "last_checked_batch": 25
      }
    },
    "ws_api": {
      "status": "ready"
    },
    "prometheus_exporter": {
      "status": "ready"
    },
    "reorg_detector": {
      "status": "ready",
      "details": {
        "last_correct_l1_batch": 25,
        "last_correct_miniblock": 91
      }
    },
    "main_node_http_rpc": {
      "status": "ready"
    },
    "batch_status_updater": {
      "status": "ready",
      "details": {
        "last_committed_l1_batch": 25,
        "last_executed_l1_batch": 25,
        "last_proven_l1_batch": 25
      }
    },
    "commitment_generator": {
      "status": "ready",
      "details": {
        "l1_batch_number": 25
      }
    },
    "http_api": {
      "status": "ready"
    }
  }
}

依赖项

~5–12MB
~122K SLoC