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
相关产品推荐
相关产品推荐

