logo
0
0
WeChat Login
zhoujianing<zhoujianing@TimedeMac-mini.local>
新增参数配置

opentelemetry-otlp-dayu

使用 Rust 语言对Opentelemetry 框架的一个封装,目的是减少应用程序引入 Opentelemetry 时对代码的侵入性。

使用: 1.引入依赖

opentelemetry-otlp-dayu = {git = "https://e.coding.net/dy-sec/practice/opentelemetry-otlp-dayu.git", branch = "master"}

2.使用 在程序入口文件(main.rs)中调用初始化函数。

init_opentelemetry_config(None);

init_opentelemetry_config函数可以接受一个参数,表示应用系统中自定义的配置文件,如果配置了该参数,opentelemetry-otlp-dayu 会去这个位置加载指定的文件,并将用户自定义的配置覆盖默认的配置。

init_opentelemetry_config(Some("src/opentelemetry.yaml"));

3.可配置参数如下:

## opentelemetry中源信息 resource: ## 服务名称 service_name: "opentelemetry-otlp-http" ## 基本参数 attributes: - key: "service.version" value: "0.1.1" ## 是否是客户系统 customer_system: true ## Trace配置 trace: ## Collector地址 endpoint: "http://127.0.0.1:4318/v1/traces" ## 是否开启 Trace enabled: true ## logs配置 logs: ## Collector 地址 endpoint: "http://127.0.0.1:4318/v1/logs" ## 是否开启Logs enabled: true ## 那些包的日志不需要记录 log_filter: - "hyper=off" - "tonic=off" - "actix=off" ## 日志等级 log_level: "info" ## metrics配置 metrics: ## Collector地址 endpoint: "http://127.0.0.1:4318/v1/metrics" ## 是一个与metrics相关的概念,主要用于描述累积(cumulative)和增量(delta)两种不同的数据报告模式 temporality: "delta" ## 是否开启Metrics enabled: true ## Trace采样器的配置 sampler: ## 是否开启采样器 enabled: false ## 采样方式 sampler_type: "TraceIdRatioBased" ## 采样的比率 0~1 rate: 0.5 ## 是否将采集的数据在控制台输出 std_logs: false

Collector的地址一般都是:<span style="color协议://IP 地址:端口号/v1/(traces/logs/metrics)。

采样方式有如下几种: 1.TraceIdRatioBased:按比例采样 2.ParentBased:根据父 Span 的采样决策动态调整,如果父 Span 已采样 → 强制采样当前 Span;如果父 Span 未采样 → 使用子采样器(如 TraceIdRatioBased)

Web Example

1.导入上述依赖。 2.根据需要自定义配置文件,将配置文件传入初始化入口函数init_opentelemetry_config。 3.在 main.rs 中配置初始化信息:

#[actix_web::main] async fn main() -> std::io::Result<()> { // 第一步:初始化 Opentelemetry 信息 init_opentelemetry_config(Some("src/opentelemetry.yaml")); HttpServer::new(|| { App::new() .service(greet) // 第二步:开启 Web 系统的链路追踪 .wrap(RequestTracing::default()) }) .bind(("0.0.0.0", 8080))? .run() .await }

4.对于日志输出,可以使用opentelemetry-otlp-dayu 提供的 info!等日志宏进行输出;引入其他的日志框架会冲突。

5.对于使用服务间的调用,支持 Http 的方式;在 opentelemetry-otlp-dayu crate中封装了 reqwest crate ,并对 Client 进行了封装,在使用时按照如下方式获取 client:

use opentelemetry_otlp_dayu::client; #[get("/A/getUsername")] async fn greet() -> impl Responder { client::builder().get("http://127.0.0.1:8081/B/zhangsan").send().await.unwrap().text().await.unwrap() }

通过上述方式发送的 Http 请求会在请求头中携带 traceID 和 spanID 两个重要的链路信息参数。