You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Rust用OpenTelemetry OTLP对接Honeycomb遇TLS证书错误求可行代码

解决Rust OpenTelemetry对接Honeycomb的TLS证书问题及示例代码

依赖配置(Cargo.toml)

确保引入正确依赖并启用TLS相关特性,这是解决证书信任问题的核心:

[dependencies]
opentelemetry = { version = "0.21", features = ["rt-tokio", "trace"] }
opentelemetry-otlp = { version = "0.19", features = ["tokio", "tls-native"] }
opentelemetry-sdk = { version = "0.21", features = ["trace"] }
tokio = { version = "1.0", features = ["full"] }

完整对接代码(src/main.rs)

这段代码会初始化OpenTelemetry Tracer,发送测试Span到Honeycomb,同时解决TLS证书信任问题:

use opentelemetry::trace::Tracer;
use opentelemetry_otlp::WithExportConfig;
use opentelemetry_sdk::{trace as sdktrace, Resource};
use std::collections::HashMap;

#[tokio::main]
async fn main() {
    // 从环境变量读取敏感信息,避免硬编码
    let api_key = std::env::var("HONEYCOMB_API_KEY").expect("HONEYCOMB_API_KEY must be set");
    let dataset = std::env::var("HONEYCOMB_DATASET").unwrap_or_else(|_| "rust-poc".to_string());
    let endpoint = "https://api.honeycomb.io/v1/traces";

    // 配置OTLP导出器头部信息
    let mut headers = HashMap::new();
    headers.insert("x-honeycomb-team".to_string(), api_key);
    headers.insert("x-honeycomb-dataset".to_string(), dataset);

    // 初始化Tracer
    let tracer = opentelemetry_otlp::new_pipeline()
        .tracing()
        .with_exporter(
            opentelemetry_otlp::new_exporter()
                .tonic()
                .with_endpoint(endpoint)
                .with_headers(headers)
                // 依赖tls-native特性,自动使用系统根证书库验证服务端证书
                .with_tls_config(Default::default()),
        )
        .with_trace_config(
            sdktrace::config()
                .with_resource(Resource::new(vec![opentelemetry::KeyValue::new(
                    "service.name",
                    "rust-honeycomb-demo",
                )])),
        )
        .install_batch(opentelemetry_sdk::runtime::Tokio)
        .expect("Failed to initialize tracer");

    // 创建并结束测试Span
    let mut span = tracer.start("test-operation");
    span.add_event(
        "processing-started",
        vec![opentelemetry::KeyValue::new("key", "value")],
    );
    // 模拟业务逻辑
    tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
    span.end();

    // 等待Span完成导出
    opentelemetry::global::shutdown_tracer_provider();
}

关键说明

  • TLS问题解决:启用opentelemetry-otlp的tls-native特性,该特性会调用系统默认根证书库验证Honeycomb服务端证书,直接解决"UnknownIssuer"错误。
  • 配置要点:
    • x-honeycomb-team:填写你的Honeycomb API密钥
    • x-honeycomb-dataset:指定数据要发送到的Honeycomb数据集名称
    • 端点https://api.honeycomb.io/v1/traces为Honeycomb官方OTLP Trace接收地址
  • 运行方式:设置环境变量HONEYCOMB_API_KEY为你的API密钥,执行cargo run即可。

内容的提问来源于stack exchange,提问作者outside2344

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 04:10:30