我正在尝试使用OTLPopentelemetry并向open telemetry-otlpHoneycomb 提供可观测数据。
我使用这样的东西作为概念证明(如果您想运行它,则将其提取到此存储库中: https: //github.com/timfpark/honeycomb-rust-poc)
fn init_tracer(metadata: &MetadataMap) -> Result<sdktrace::Tracer, TraceError> {
let opentelemetry_endpoint =
env::var("OTEL_ENDPOINT").unwrap_or_else(|_| "https://api.honeycomb.io".to_owned());
let opentelemetry_endpoint =
Url::parse(&opentelemetry_endpoint).expect("OTEL_ENDPOINT is not a valid url");
opentelemetry_otlp::new_pipeline()
.tracing()
.with_exporter(
opentelemetry_otlp::new_exporter()
.tonic()
.with_endpoint(opentelemetry_endpoint.as_str())
.with_metadata(metadata.clone())
.with_tls_config(
ClientTlsConfig::new().domain_name(
opentelemetry_endpoint
.host_str()
.expect("OTEL_ENDPOINTshould have a valid host"),
),
),
)
.install_batch(opentelemetry::runtime::Tokio)
}
#[tokio::main]
async fn main() -> anyhow::Result<()> {
let mut metadata = MetadataMap::with_capacity(2);
metadata.insert(
"x-honeycomb-team",
"...honeycomb api key...".parse().unwrap(),
);
metadata.insert("x-honeycomb-dataset", "my-api".parse().unwrap());
let tracer = init_tracer(&metadata).expect("failed to instantiate opentelemetry …Run Code Online (Sandbox Code Playgroud) 正如标题所述,我有一些客户端应用程序将指标、跟踪和日志发送到 opentelemtry 收集器,然后收集器应将提到的信号导出到 jaeger 实例。
由于某种原因,它失败了,并出现了一个不太明显的错误,我陷入了困境。
这是 Docker 的组成:
version: '3.9'
x-default-logging: &logging
driver: "json-file"
options:
max-size: "5m"
max-file: "2"
services:
# ********************
# Telemetry Components
# ********************
# Jaeger
jaeger:
image: jaegertracing/all-in-one:1.50
container_name: jaeger
deploy:
resources:
limits:
memory: 500M
restart: unless-stopped
ports:
- "16686:16686" # Jaeger UI
- "4317" # OTLP gRPC default port
- "4318" # OTLP HTTP default port (protobuf)
- "14250"
environment:
- COLLECTOR_OTLP_ENABLED=true
logging: *logging
# OpenTelemetry Collector
otelcol:
image: otel/opentelemetry-collector-contrib:0.87
container_name: otel-col
deploy:
resources: …Run Code Online (Sandbox Code Playgroud)