logo
0
0
WeChat Login
zhoujianing<zhoujianing@TimedeMac-mini.local>
修改了 readme

opentelemetry-otlp-dayu

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

使用: 1.引入依赖


opentelemetry-otlp-dayu = {git = "git@e.coding.net:dy-sec/dss-gateway-repo-dev/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-dayu"
  ## 基本参数
  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 两个重要的链路信息参数。

About

使用 Rust 语言对Opentelemetry 框架的一个封装;支持 Http 协议,能在 Http 请求中传递链路上下文。 目的是减少应用程序引入 Opentelemetry 时对代码的侵入性。

Language
Rust63.9%
Markdown24.1%
TOML8.9%
gitignore3.1%