diff --git a/.docker/observability/jaeger-config.yaml b/.docker/observability/jaeger-config.yaml index 31b5a9d6..0df35f83 100644 --- a/.docker/observability/jaeger-config.yaml +++ b/.docker/observability/jaeger-config.yaml @@ -1,11 +1,10 @@ - service: - extensions: [jaeger_storage, jaeger_query, remote_sampling, healthcheckv2] + extensions: [ jaeger_storage, jaeger_query, remote_sampling, healthcheckv2 ] pipelines: traces: - receivers: [otlp, jaeger, zipkin] - processors: [batch, adaptive_sampling] - exporters: [jaeger_storage_exporter] + receivers: [ otlp, jaeger, zipkin ] + processors: [ batch, adaptive_sampling ] + exporters: [ jaeger_storage_exporter ] telemetry: resource: service.name: jaeger diff --git a/.docker/observability/otel-collector-config.yaml b/.docker/observability/otel-collector-config.yaml index 9e27c4e2..24d67dc3 100644 --- a/.docker/observability/otel-collector-config.yaml +++ b/.docker/observability/otel-collector-config.yaml @@ -1,13 +1,13 @@ receivers: otlp: protocols: - grpc: # OTLP gRPC 接收器 + grpc: # OTLP gRPC 接收器 endpoint: 0.0.0.0:4317 - http: # OTLP HTTP 接收器 + http: # OTLP HTTP 接收器 endpoint: 0.0.0.0:4318 processors: - batch: # 批处理处理器,提升吞吐量 + batch: # 批处理处理器,提升吞吐量 timeout: 5s send_batch_size: 1000 memory_limiter: @@ -15,16 +15,16 @@ processors: limit_mib: 512 exporters: - otlp/traces: # OTLP 导出器,用于跟踪数据 + otlp/traces: # OTLP 导出器,用于跟踪数据 endpoint: "jaeger:4317" # Jaeger 的 OTLP gRPC 端点 tls: insecure: true # 开发环境禁用 TLS,生产环境需配置证书 - prometheus: # Prometheus 导出器,用于指标数据 + prometheus: # Prometheus 导出器,用于指标数据 endpoint: "0.0.0.0:8889" # Prometheus 刮取端点 - namespace: "otel" # 指标前缀 + namespace: "rustfs" # 指标前缀 send_timestamps: true # 发送时间戳 # enable_open_metrics: true - loki: # Loki 导出器,用于日志数据 + loki: # Loki 导出器,用于日志数据 # endpoint: "http://loki:3100/otlp/v1/logs" endpoint: "http://loki:3100/loki/api/v1/push" tls: @@ -34,20 +34,20 @@ extensions: pprof: zpages: service: - extensions: [health_check, pprof, zpages] # 启用扩展 + extensions: [ health_check, pprof, zpages ] # 启用扩展 pipelines: traces: - receivers: [otlp] - processors: [memory_limiter,batch] - exporters: [otlp/traces] + receivers: [ otlp ] + processors: [ memory_limiter,batch ] + exporters: [ otlp/traces ] metrics: - receivers: [otlp] - processors: [batch] - exporters: [prometheus] + receivers: [ otlp ] + processors: [ batch ] + exporters: [ prometheus ] logs: - receivers: [otlp] - processors: [batch] - exporters: [loki] + receivers: [ otlp ] + processors: [ batch ] + exporters: [ loki ] telemetry: logs: level: "info" # Collector 日志级别 diff --git a/Cargo.lock b/Cargo.lock index f833d5ce..460ba8e1 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -4273,9 +4273,9 @@ checksum = "c08d65885ee38876c4f86fa503fb49d7b507c2b62552df7c70b2fce627e06381" [[package]] name = "opentelemetry" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "236e667b670a5cdf90c258f5a55794ec5ac5027e960c224bff8367a59e1e6426" +checksum = "768ee97dc5cd695a4dd4a69a0678fb42789666b5a89e8c0af48bb06c6e427120" dependencies = [ "futures-core", "futures-sink", @@ -4287,9 +4287,9 @@ dependencies = [ [[package]] name = "opentelemetry-appender-tracing" -version = "0.28.1" +version = "0.29.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c513c7af3bec30113f3d4620134ff923295f1e9c580fda2b8abe0831f925ddc0" +checksum = "e716f864eb23007bdd9dc4aec381e188a1cee28eecf22066772b5fd822b9727d" dependencies = [ "opentelemetry", "tracing", @@ -4301,9 +4301,9 @@ dependencies = [ [[package]] name = "opentelemetry-http" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8863faf2910030d139fb48715ad5ff2f35029fc5f244f6d5f689ddcf4d26253" +checksum = "46d7ab32b827b5b495bd90fa95a6cb65ccc293555dcc3199ae2937d2d237c8ed" dependencies = [ "async-trait", "bytes", @@ -4315,11 +4315,10 @@ dependencies = [ [[package]] name = "opentelemetry-otlp" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5bef114c6d41bea83d6dc60eb41720eedd0261a67af57b66dd2b84ac46c01d91" +checksum = "d899720fe06916ccba71c01d04ecd77312734e2de3467fd30d9d580c8ce85656" dependencies = [ - "async-trait", "futures-core", "http", "opentelemetry", @@ -4336,9 +4335,9 @@ dependencies = [ [[package]] name = "opentelemetry-proto" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "56f8870d3024727e99212eb3bb1762ec16e255e3e6f58eeb3dc8db1aa226746d" +checksum = "8c40da242381435e18570d5b9d50aca2a4f4f4d8e146231adb4e7768023309b3" dependencies = [ "opentelemetry", "opentelemetry_sdk", @@ -4348,39 +4347,35 @@ dependencies = [ [[package]] name = "opentelemetry-semantic-conventions" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2fb3a2f78c2d55362cd6c313b8abedfbc0142ab3c2676822068fd2ab7d51f9b7" +checksum = "84b29a9f89f1a954936d5aa92f19b2feec3c8f3971d3e96206640db7f9706ae3" [[package]] name = "opentelemetry-stdout" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5eb0e5a5132e4b80bf037a78e3e12c8402535199f5de490d0c38f7eac71bc831" +checksum = "a7e27d446dabd68610ef0b77d07b102ecde827a4596ea9c01a4d3811e945b286" dependencies = [ - "async-trait", "chrono", "futures-util", "opentelemetry", "opentelemetry_sdk", - "serde", - "thiserror 2.0.12", ] [[package]] name = "opentelemetry_sdk" -version = "0.28.0" +version = "0.29.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "84dfad6042089c7fc1f6118b7040dc2eb4ab520abbf410b79dc481032af39570" +checksum = "afdefb21d1d47394abc1ba6c57363ab141be19e27cc70d0e422b7f303e4d290b" dependencies = [ - "async-trait", "futures-channel", "futures-executor", "futures-util", "glob", "opentelemetry", "percent-encoding", - "rand 0.8.5", + "rand 0.9.0", "serde_json", "thiserror 2.0.12", "tokio", @@ -7032,9 +7027,9 @@ dependencies = [ [[package]] name = "tracing-opentelemetry" -version = "0.29.0" +version = "0.30.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "721f2d2569dce9f3dfbbddee5906941e953bfcdf736a62da3377f5751650cc36" +checksum = "fd8e764bd6f5813fd8bebc3117875190c5b0415be8f7f8059bffb6ecd979c444" dependencies = [ "js-sys", "once_cell", diff --git a/Cargo.toml b/Cargo.toml index e4525167..150a0e93 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -61,12 +61,12 @@ local-ip-address = "0.6.3" mime = "0.3.17" netif = "0.1.6" once_cell = "1.21.1" -opentelemetry = { version = "0.28" } -opentelemetry-appender-tracing = { version = "0.28.1", features = ["experimental_use_tracing_span_context", "experimental_metadata_attributes"] } -opentelemetry_sdk = { version = "0.28" } -opentelemetry-stdout = { version = "0.28.0" } -opentelemetry-otlp = { version = "0.28" } -opentelemetry-semantic-conventions = { version = "0.28.0", features = ["semconv_experimental"] } +opentelemetry = { version = "0.29" } +opentelemetry-appender-tracing = { version = "0.29.1", features = ["experimental_use_tracing_span_context", "experimental_metadata_attributes"] } +opentelemetry_sdk = { version = "0.29" } +opentelemetry-stdout = { version = "0.29.0" } +opentelemetry-otlp = { version = "0.29" } +opentelemetry-semantic-conventions = { version = "0.29.0", features = ["semconv_experimental"] } pin-project-lite = "0.2" # pin-utils = "0.1.0" prost = "0.13.4" @@ -110,7 +110,7 @@ tracing-core = "0.1.33" tracing-error = "0.2.1" tracing-subscriber = { version = "0.3.19", features = ["env-filter", "time"] } tracing-appender = "0.2.3" -tracing-opentelemetry = "0.29" +tracing-opentelemetry = "0.30" transform-stream = "0.3.1" url = "2.5.4" uuid = { version = "1.15.1", features = [ diff --git a/config/obs.example.toml b/config/obs.example.toml index 59bd0f34..50d4ae75 100644 --- a/config/obs.example.toml +++ b/config/obs.example.toml @@ -3,7 +3,7 @@ endpoint = "" # Default is "http://localhost:4317" if not specified use_stdout = false sample_ratio = 0.5 meter_interval = 30 -service_name = "rustfs_obs_service" +service_name = "rustfs" service_version = "0.1.0" deployment_environment = "develop" diff --git a/packages/obs/examples/server.rs b/packages/obs/examples/server.rs index 15a64c8b..0af2fcd0 100644 --- a/packages/obs/examples/server.rs +++ b/packages/obs/examples/server.rs @@ -10,6 +10,9 @@ async fn main() { let obs_conf = Some("packages/obs/examples/config.toml".to_string()); let config = load_config(obs_conf); let (_logger, _guard) = init_obs(config.clone()).await; + let span = tracing::span!(Level::INFO, "main"); + let _enter = span.enter(); + info!("Program starts"); // Simulate the operation tokio::time::sleep(Duration::from_millis(100)).await; run( @@ -28,7 +31,7 @@ async fn run(bucket: String, object: String, user: String, service_name: String) info!("Log module initialization is completed service_name: {:?}", service_name); // Record Metrics - let meter = global::meter("rustfs.rs"); + let meter = global::meter("rustfs"); let request_duration = meter.f64_histogram("s3_request_duration_seconds").build(); request_duration.record( start_time.elapsed().unwrap().as_secs_f64(), @@ -59,9 +62,9 @@ async fn run(bucket: String, object: String, user: String, service_name: String) #[instrument(fields(bucket, object, user))] async fn put_object(bucket: String, object: String, user: String) { let start_time = SystemTime::now(); - info!("Starting put_object operation"); + info!("Starting put_object operation time: {:?}", start_time); - let meter = global::meter("rustfs.rs"); + let meter = global::meter("rustfs"); let request_duration = meter.f64_histogram("s3_request_duration_seconds").build(); request_duration.record( start_time.elapsed().unwrap().as_secs_f64(), diff --git a/rustfs/src/main.rs b/rustfs/src/main.rs index 787ee8c9..08e10859 100644 --- a/rustfs/src/main.rs +++ b/rustfs/src/main.rs @@ -107,29 +107,29 @@ fn print_server_info() { async fn main() -> Result<()> { // Parse the obtained parameters let opt = config::Opt::parse(); - println!("config: {:?}", &opt); - // 设置 trace - // setup_tracing(); + // println!("config: {:?}", &opt); + // Load the configuration file let config = load_config(Some(opt.clone().obs_config)); + // Initialize Observability let (logger, guard) = init_obs(config).await; - // let (logger, guard) = tokio::runtime::Runtime::new()?.block_on(async { init_obs(config).await }); - // let _rr = tokio::runtime::Runtime::new()?.block_on(async { + + // Pack and store the guard + GLOBAL_GUARD.set(TracingGuard(Box::new(guard))).unwrap_or_else(|_| { + error!("Unable to set global tracing guard"); + }); + + // Initialize the logger let start_time = SystemTime::now(); let base_entry = BaseLogEntry::new() .timestamp(chrono::DateTime::from(start_time)) - .message(Some("main init obs end".to_string())) + .message(Some("main init obs start".to_string())) .request_id(Some("main".to_string())); let server_entry = ServerLogEntry::new(Level::INFO, "main_server_entry".to_string()) .with_base(base_entry) .user_id(Some("user_id".to_string())); let _r = logger.lock().await.log_server_entry(server_entry).await; - // }); - // Pack and store the guard - GLOBAL_GUARD.set(TracingGuard(Box::new(guard))).unwrap_or_else(|_| { - error!("Unable to set global tracing guard"); - }); // Run parameters run(opt).await