#open-telemetry #api-bindings #grpc #grpc-server #api #protobuf

颤动-otelapis

基于tonic/prost的OpenTelemetry v1 API绑定

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

Download history 142/week @ 2024-04-23 2/week @ 2024-04-30 193/week @ 2024-05-07 263/week @ 2024-05-14 198/week @ 2024-05-21 231/week @ 2024-05-28 188/week @ 2024-06-04 393/week @ 2024-06-11 440/week @ 2024-06-18 181/week @ 2024-06-25 195/week @ 2024-07-02 217/week @ 2024-07-09 219/week @ 2024-07-16 195/week @ 2024-07-23 38/week @ 2024-07-30 43/week @ 2024-08-06

每月 502 次下载

Apache-2.0

47KB
548

CNCF早期沙盒项目

CNCF流式消息传递


Quality Checks License Checks Security Checks CII Best Practices GitHub

颤动对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