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 网页编程
每月857 次下载
26KB
385 行代码
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
[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_id
和 span_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),
}
}
TLS 相关功能
Cargo 为依赖项提供对不同 TLS 功能的支持
tls-roots
: 支持原生 TLS 根的默认功能tls-webpki-roots
: 切换到 webpki crate 根的功能
许可证
Apache 软件许可证 (ASL)
作者
Abdulla Abdurakhmanov
依赖项
~112MB
~2M SLoC