9个版本
0.3.0 | 2022年12月19日 |
---|---|
0.2.5 | 2022年7月5日 |
0.2.4 | 2022年4月21日 |
0.2.3 | 2022年3月17日 |
0.1.1 | 2021年3月12日 |
#17 in #grpc-server
每月 502 次下载
47KB
548 行
颤动对OpenTelemetry的支持
状态
此库存在是为了支持颤动中基于OpenTelemetry的连接。
颤动可以根据OpenTelemetry的gRPC协议规范暴露客户端和服务器OpenTelemetry端点。
关于
为OpenTelemetry v1提供数据绑定和实用代码的tonic-build
,主要用于tremor项目,以实现OpenTelemetry v1的互操作性、集成和互操作。
gen
文件夹中的代码由tonic-build
生成。
src
文件夹中的代码通过实用代码扩展了生成的源代码,以便于使用和定义基于tonic的gRPC服务器。具体来说,这个库是为颤动项目设计的,但没有任何依赖项,可以独立使用。
这个库不提供用作跟踪设施的API或SDK。官方的OpenTelemetry Rust项目是一个完整的OpenTelemetry SDK,专为该目的设计。它使用相同的底层协议缓冲区定义,将是需要基于OpenTelemetry的观察性仪器和与更广泛的观察性生态系统进行互操作的项目更好的目标。
这个库是为系统集成和互操作性设计的,不建议用作跟踪SDK或用于仪器,因为这已经被OpenTelemetry Rust crate很好地解决了。对于仪器,请使用官方crate。
对于需要与基于OpenTelemetry的系统进行基本互操作、互操作或集成的项目,此项目可能很有用。
Cargo.toml
的最低依赖项
[dependencies]
tremor-otelapis = { version = "0.1", features = ["otel-all"] }
tonic = { version = "0.4", features = ["tls"] }
prost = "0.7"
prost-types = "0.7"
tokio = { version = "1.1", features = ["rt-multi-thread", "time", "fs", "macros"] }
示例 OpenTelemetry 日志客户端。
注意,客户端仅使用由 tonic-build
生成的客户端存根代码。此库不添加任何额外实用程序或便利性。
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let channel = Endpoint::from_static("http://0.0.0.0:4316")
.connect()
.await?;
let mut client = LogsServiceClient::new(channel);
let resource_logs = ResourceLogs {
...
};
client
.export(ExportLogsServiceRequest {
resource_logs: vec![resource_logs],
})
.await?;
Ok(())
}
示例 OpenTelemetry 日志服务器。
注意,我们使用实用代码来公开服务器端功能。我们直接传递由 tonic-build
生成的 Protocol Buffer 消息数据绑定代码。协议缓冲区消息的数据绑定由 tonic-build
生成。
tonic-build
又基于 prost-build
构建。
fn on_logs(
request: tonic::Request<ExportLogsServiceRequest>,
) -> Result<tonic::Response<ExportLogsServiceResponse>, tonic::Status> {
println!("Got a request from {:?}", request.remote_addr());
let reply = ExportLogsServiceResponse::default();
Ok(tonic::Response::new(reply))
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let addr = "0.0.0.0:4317".parse()?;
let svc = otelapis::logs::make_service(Box::new(on_logs));
Server::builder().add_service(svc).serve(addr).await?;
Ok(())
}
基于异步通道的 OpenTelemetry 服务器示例
为了方便与异步运行时(如 tremor)集成
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let addr = "0.0.0.0:4317".parse()?;
let (tx, rx) = bounded(128);
tremor_otelapis::all::make(addr, tx).await?;
// ...
loop {
match rx.try_recv() {
Ok(OpenTelemetryEvents::Metrics(metrics)) => {
// Do something with metrics request
}
Ok(OpenTelemetryEvents::Logs(log)) => {
// Do something with log request
}
Ok(OpenTelemetryEvents::Trace(trace)) => {
// Do something with trace request
}
_ => error!("Unsupported"),
};
}
// ...
}
依赖项
~13–25MB
~427K SLoC