钱桦实Emery头像
关注

SubQuery服务健康检查:自定义区块链索引健康指标

SubQuery服务健康检查:自定义区块链索引健康指标

【免费下载链接】subql SubQuery is an Open, Flexible, Fast and Universal data indexing framework for web3. Our mission is to help developers create the decentralised products of the future. 【免费下载链接】subql 项目地址: https://gitcode.com/gh_mirrors/su/subql

为什么需要健康检查?

区块链索引服务面临两大核心健康挑战:数据同步停滞和处理性能下降。SubQuery通过内置的健康检查机制(HealthService)持续监控索引器状态,确保数据处理流程正常运行。默认配置下,系统会每60秒执行一次健康评估(CHECK_HEALTH_INTERVAL常量定义),并通过Prometheus暴露关键指标。

核心健康指标解析

1. 区块同步状态

健康检查的核心逻辑位于HealthService.getHealth()方法,主要监控两个关键参数:

  • 区块时间阈值:默认6秒(DEFAULT_BLOCK_TIME),可通过blockTime配置项调整
  • 健康超时阈值:默认15分钟(DEFAULT_TIMEOUT),基于timeout配置项计算

当节点超过10倍区块时间未同步新块,或处理单个区块耗时超过健康超时阈值时,系统会标记索引器为不健康状态。

2. 健康状态存储

健康状态通过StoreService持久化到元数据存储:

await this.storeService.modelProvider.metadata.model.upsert({
  key: 'indexerHealthy', 
  value: healthy
});

这种设计确保服务重启后仍能恢复历史健康状态记录,便于长期监控分析。

自定义健康检查配置

配置参数说明

在项目配置文件中,可通过以下参数调整健康检查行为:

参数名说明默认值
timeout单个区块处理超时(秒)15分钟
blockTime预期区块间隔时间(毫秒)6秒

配置示例

# project.yaml
network:
  endpoint: wss://polkadot.api.onfinality.io/public-ws
  timeout: 120  # 超时设为2分钟
  blockTime: 12000  # 适用于12秒出块的网络

监控指标集成

SubQuery通过Prometheus模块(MetaModule)提供标准化指标导出:

import {PrometheusModule} from '@willsoto/nestjs-prometheus';

@Module({
  imports: [PrometheusModule.register(), CoreModule],
  controllers: [HealthController, MetaController],
  providers: [...gaugeProviders, HealthService]
})
export class MetaModule {}

默认集成的指标包括区块处理延迟、索引进度和数据库连接状态等,可通过/metrics端点访问。

关键指标列表

  • subql_indexer_healthy:布尔型指标,表示当前索引器健康状态
  • subql_block_height:当前已处理的区块高度
  • subql_block_processing_time:区块处理耗时分布

可视化与告警配置

Grafana监控面板

结合Prometheus收集的指标,可构建自定义Grafana面板监控索引器健康状态。典型监控面板应包含:

  • 实时区块同步状态
  • 健康状态历史变化曲线
  • 处理延迟分布热力图
  • 不健康状态告警阈值线

告警规则示例

推荐配置以下Prometheus告警规则:

groups:
- name: subql_health
  rules:
  - alert: IndexerUnhealthy
    expr: subql_indexer_healthy == 0
    for: 5m
    labels:
      severity: critical
    annotations:
      summary: "索引器健康状态异常"
      description: "索引器已持续5分钟处于不健康状态"

健康检查扩展点

高级用户可通过以下方式扩展健康检查功能:

  1. 自定义健康指标:通过gaugeProviders添加新的Prometheus指标
  2. 健康事件监听:实现MetricEventListener处理健康状态变化事件
  3. 自定义健康控制器:扩展HealthController添加自定义健康检查端点

最佳实践建议

  1. 网络适配:根据目标区块链特性调整blockTime参数,例如:

    • 类似网络:15秒
    • 波卡网络:6秒
    • Cosmos网络:7秒
  2. 资源监控:结合服务器级监控(CPU/内存/磁盘IO)综合判断健康状态,避免仅依赖链上指标

  3. 告警分级:建立多级告警机制,区分警告(轻微延迟)和严重(完全停滞)状态

  4. 定期审计:通过indexerHealthy元数据键查询历史健康状态:

SELECT * FROM metadata WHERE key = 'indexerHealthy';

通过以上配置和实践,SubQuery索引服务可以保持高可用性,及时发现并响应潜在的健康问题,确保区块链数据处理的连续性和准确性。

【免费下载链接】subql SubQuery is an Open, Flexible, Fast and Universal data indexing framework for web3. Our mission is to help developers create the decentralised products of the future. 【免费下载链接】subql 项目地址: https://gitcode.com/gh_mirrors/su/subql

转载自 CSDN-专业IT技术社区

原文链接:https://blog.csdn.net/gitblog_00605/article/details/152774908

文章来源crawl

评论

赞0

评论列表

微信小程序
QQ小程序

关于作者

点赞数:0
关注数:0
粉丝:0
文章:0
关注标签:0
加入于:--