18 个版本 (11 个重大更新)

0.12.0 2024年7月21日
0.10.0 2024年5月29日
0.9.0 2024年3月5日
0.8.0 2023年12月31日
0.2.0 2022年7月31日

#1832 in 网页编程

Download history 269/week @ 2024-04-30 119/week @ 2024-05-07 166/week @ 2024-05-14 224/week @ 2024-05-21 337/week @ 2024-05-28 117/week @ 2024-06-04 174/week @ 2024-06-11 218/week @ 2024-06-18 250/week @ 2024-06-25 210/week @ 2024-07-02 307/week @ 2024-07-09 508/week @ 2024-07-16 296/week @ 2024-07-23 100/week @ 2024-07-30 179/week @ 2024-08-06 194/week @ 2024-08-13

每月857 次下载

Apache-2.0 协议

26KB
385 行代码

Cargo tests and formatting security audit

OpenTelemetry 对 Google Cloud Trace 的支持

快速开始

Cargo.toml

[dependencies]
opentelemetry-gcloud-trace = "0.12"

兼容性矩阵

opentelemetry-gcloud-trace 版本 opentelemetry 版本 tracing-opentelemetry gcloud-sdk
0.12 0.24 0.25 0.25
0.11 0.23 0.24 0.25
0.10 0.23 0.24 0.24

示例


use opentelemetry::trace::*;
use opentelemetry_gcloud_trace::*;

let tracer = GcpCloudTraceExporterBuilder::for_default_project_id().await? // or GcpCloudTraceExporterBuilder::new(config_env_var("PROJECT_ID")?)
    .install()
    .await?;

tracer.in_span("doing_work_parent", |cx| {
  // ...
});

所有示例均可在 examples 目录中找到。

要运行示例,请使用环境变量

# PROJECT_ID=<your-google-project-id> cargo run --example enable-exporter

Google Cloud Console Example

[dependencies]
opentelemetry = { version = "*", features = [] }
opentelemetry_sdk = { version = "*", features = ["rt-tokio"] }
opentelemetry-gcloud-trace = "*"

配置

您可以使用 with_trace_config 指定跟踪配置

   GcpCloudTraceExporterBuilder::new(google_project_id).with_trace_config(
      trace::config()
         .with_sampler(Sampler::AlwaysOn)
         .with_id_generator(RandomIdGenerator::default())
   )

限制

  • 此导出器不支持除 Tokio 之外的其他运行时

与日志的集成

此 crate 有意不使用 API 导出日志,以避免在 GKE/GCE 环境中重复日志。您可以使用此 crate 与 tracing-stackdriver crate 结合使用以生成 JSON 格式的日志,日志和跟踪将通过 trace_idspan_id 字段自动关联。

以下是一个此类配置的示例


fn init_console_log(
    tracer: opentelemetry_sdk::trace::Tracer,
) -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
    let telemetry = tracing_opentelemetry::layer().with_tracer(tracer);

    let subscriber = tracing_subscriber::registry::Registry::default()
        .with(tracing_subscriber::fmt::layer())
        .with(tracing_subscriber::EnvFilter::from_str(
            "gcloud_sdk=debug",
        )?)
        .with(telemetry);

    tracing::subscriber::set_global_default(subscriber)?;

    Ok(())
}

fn init_stackdriver_log(
    gcp_project_id: &str,
    tracer: opentelemetry_sdk::trace::Tracer,
) -> Result<(), BoxedError> {
    let telemetry_layer = tracing_opentelemetry::layer().with_tracer(tracer);

    let stackdriver_layer = tracing_stackdriver::layer().with_cloud_trace(
        tracing_stackdriver::CloudTraceConfiguration {
            project_id: gcp_project_id.to_string(),
        },
    );

    let subscriber = tracing_subscriber::Registry::default()
        .with(telemetry_layer)
        .with(stackdriver_layer)
        .with(tracing_subscriber::EnvFilter::from_str(
            "gcloud_sdk=debug",
        )?);
    tracing::subscriber::set_global_default(subscriber)
        .expect("Could not set up global logger");

    Ok(())
}

async fn init_tracing(app_mode: &GlobalAppMode, 
                      gcp_project_id: &str) -> Result<(), BoxedError> {
    let tracer = GcpCloudTraceExporterBuilder::new(gcp_project_id.into())
        .install()
        .await?;

    match app_mode {
        GlobalAppMode::Production => init_stackdriver_log(gcp_project_id, tracer),
        GlobalAppMode::Development => init_console_log(tracer),
    }
}

Cargo 为依赖项提供对不同 TLS 功能的支持

  • tls-roots: 支持原生 TLS 根的默认功能
  • tls-webpki-roots: 切换到 webpki crate 根的功能

许可证

Apache 软件许可证 (ASL)

作者

Abdulla Abdurakhmanov

依赖项

~112MB
~2M SLoC