Rust遥测与监控插件库sc-telemetry的使用,sc-telemetry提供高性能分布式系统监控与日志收集功能

Rust遥测与监控插件库sc-telemetry的使用

sc-telemetry是Substrate客户端的一部分,它允许通过Polkadot遥测等工具收集遥测数据。

功能特点

  1. 基于Tokio的tracing库实现
  2. 使用tracing的日志记录功能报告遥测数据
  3. 通过tracing的Layer获取数据并发送到远程遥测服务器
  4. 支持同一进程中运行多个Substrate节点
  5. 使用异步通道与后台任务TelemetryWorker通信

工作原理

  1. 遥测信息使用tracing的日志记录功能
  2. tracing Layer检索数据并通过异步通道发送到TelemetryWorker
  3. TelemetryWorker将信息发送到配置的远程遥测服务器
  4. 使用tracing::Span来识别不同Substrate节点
  5. 通过TelemetryHandle进行节点初始化和注册

安装

在Cargo.toml中添加依赖:

sc-telemetry = "30.0.0"

或者运行命令:

cargo add sc-telemetry

完整示例代码

use sc_telemetry::{TelemetryWorker, TelemetryConfig, TelemetryEndpoints, TelemetryHandle};
use tracing_subscriber::Layer;
use std::sync::Arc;

#[tokio::main]
async fn main() {
    // 1. 创建遥测配置
    let telemetry_config = TelemetryConfig {
        endpoints: TelemetryEndpoints::new(vec![
            "wss://telemetry.polkadot.io/submit/".into()
        ]).unwrap(),
        wasm_tracing: false,
        node_name: "my_node".into(),
        node_version: "1.0.0".into(),
    };

    // 2. 创建TelemetryWorker
    let (telemetry_worker, telemetry_handle) = TelemetryWorker::new(telemetry_config)
        .await
        .unwrap();

    // 3. 启动worker
    tokio::spawn(telemetry_worker.run());

    // 4. 获取tracing Layer
    let telemetry_layer = telemetry_handle.telemetry_layer();

    // 5. 初始化tracing订阅器
    tracing_subscriber::registry()
        .with(telemetry_layer)
        .init();

    // 6. 使用tracing记录日志
    tracing::info!("Node starting up");
    tracing::debug!("Debug information");
    tracing::warn!("Warning message");

    // 7. 模拟节点运行
    for i in 0..10 {
        tracing::info!(block = i, "Processing block");
        tokio::time::sleep(std::time::Duration::from_secs(1)).await;
    }

    // 8. 关闭遥测
    telemetry_handle.close().await;
}

代码说明

  1. 首先创建TelemetryConfig配置遥测端点等信息
  2. 使用配置创建TelemetryWorker和TelemetryHandle
  3. 启动worker后台任务
  4. 获取tracing Layer用于日志记录
  5. 初始化tracing订阅器
  6. 使用tracing宏记录不同级别的日志
  7. 模拟节点运行过程
  8. 最后关闭遥测连接

许可证

GPL-3.0-or-later WITH Classpath-exception-2.0


1 回复

Rust遥测与监控插件库sc-telemetry使用指南

概述

sc-telemetry是Substrate框架中的一个高性能遥测与监控组件,专门为分布式系统设计,提供强大的监控和日志收集功能。它特别适合区块链节点和其他需要高性能遥测的系统。

主要特性

  • 高性能日志收集和处理
  • 分布式系统监控支持
  • 可扩展的遥测后端
  • 与Substrate框架深度集成
  • 支持多种监控指标类型

安装方法

在Cargo.toml中添加依赖:

[dependencies]
sc-telemetry = { version = "4.0.0", git = "https://github.com/paritytech/substrate.git", branch = "master" }

完整示例代码

use sc_telemetry::{TelemetryHandle, TelemetryWorker, TelemetryConfig, Metric};
use log::Level;
use tokio;

#[tokio::main]
async fn main() {
    // 1. 初始化遥测系统
    let telemetry = init_telemetry().await;
    
    // 2. 发送不同类型的日志
    log_example(&telemetry);
    
    // 3. 报告各种监控指标
    report_metrics(&telemetry);
    
    // 保持程序运行以便观察
    tokio::time::sleep(tokio::time::Duration::from_secs(5)).await;
}

async fn init_telemetry() -> TelemetryHandle {
    // 配置遥测参数
    let config = TelemetryConfig {
        endpoint: "wss://telemetry.polkadot.io/submit/".into(),
        node_name: "demo_node".into(),
        node_version: "1.0.0".into(),
        queue_size: 5000,
        batch_size: 50,
        ..Default::default()
    };
    
    // 创建遥测工作器和处理句柄
    let (worker, handle) = TelemetryWorker::new(config).unwrap();
    
    // 启动遥测工作器
    tokio::spawn(worker.run());
    
    handle
}

fn log_example(telemetry: &TelemetryHandle) {
    // 发送不同级别的日志
    telemetry.log(Level::Info, "Application started");
    telemetry.log(Level::Debug, "Initializing components");
    
    // 发送带额外属性的日志
    telemetry.log_with_values(
        Level::Warn,
        "Resource usage alert",
        [("cpu", "90%"), ("memory", "85%")]
    );
}

fn report_metrics(telemetry: &TelemetryHandle) {
    // 报告计数器指标
    telemetry.report_metric(Metric::counter("requests_received", 1));
    
    // 报告测量值指标
    telemetry.report_metric(Metric::gauge("cpu_usage", 72.5));
    
    // 报告带标签的指标
    telemetry.report_metric(
        Metric::counter_with_tags("api_calls", 1)
            .with_tag("endpoint", "/users")
            .with_tag("status", "200")
    );
    
    // 报告直方图数据
    telemetry.report_metric(
        Metric::histogram("request_latency_ms", 150.0)
    );
}

最佳实践

  1. 合理使用日志级别:避免在生产环境使用过多Debug级别日志
  2. 标签使用:利用标签对指标进行分类,便于后续分析
  3. 错误处理:处理遥测失败的情况,避免影响主业务流程
  4. 性能监控:对遥测系统本身进行监控,确保不会成为性能瓶颈

注意事项

  • 遥测数据可能包含敏感信息,确保传输加密和访问控制
  • 在高负载系统中适当调整队列大小和工作线程数量
  • 考虑遥测数据的存储和保留策略

sc-telemetry为Rust分布式系统提供了强大的监控能力,合理使用可以显著提高系统的可观测性和运维效率。

回到顶部