diff --git a/.docker/observability/config/obs.toml b/.docker/observability/config/obs.toml index ecb34006..3b26644c 100644 --- a/.docker/observability/config/obs.toml +++ b/.docker/observability/config/obs.toml @@ -1,12 +1,12 @@ [observability] -endpoint = "http://localhost:4317" # Default is "http://localhost:4317" if not specified +endpoint = "http://otel-collector:4317" # Default is "http://localhost:4317" if not specified use_stdout = false # Output with stdout, true output, false no output sample_ratio = 2.0 meter_interval = 30 service_name = "rustfs" service_version = "0.1.0" environments = "production" -logger_level = "info" +logger_level = "debug" [sinks] [sinks.kafka] # Kafka sink is disabled by default diff --git a/Dockerfile.obs b/Dockerfile.obs index fdcfcc3f..f16ea3dc 100644 --- a/Dockerfile.obs +++ b/Dockerfile.obs @@ -1,4 +1,4 @@ -FROM alpine:latest +FROM ubuntu:latest # RUN apk add --no-cache # 如果 rustfs 有依赖,可以在这里添加,例如: @@ -7,7 +7,11 @@ FROM alpine:latest WORKDIR /app -COPY ./target/x86_64-unknown-linux-musl/release/rustfs /app/rustfs +# 创建与 RUSTFS_VOLUMES 一致的目录 +RUN mkdir -p /root/data/target/volume/test1 /root/data/target/volume/test2 /root/data/target/volume/test3 /root/data/target/volume/test4 + +# COPY ./target/x86_64-unknown-linux-musl/release/rustfs /app/rustfs +COPY ./target/x86_64-unknown-linux-gnu/release/rustfs /app/rustfs RUN chmod +x /app/rustfs diff --git a/crates/obs/src/config.rs b/crates/obs/src/config.rs index 33f974f9..737d2c0d 100644 --- a/crates/obs/src/config.rs +++ b/crates/obs/src/config.rs @@ -10,19 +10,21 @@ use std::env; /// Add endpoint for metric collection /// Add use_stdout for output to stdout /// Add logger level for log level +/// Add local_logging_enabled for local logging enabled #[derive(Debug, Deserialize, Clone)] pub struct OtelConfig { - pub endpoint: String, - pub use_stdout: Option, - pub sample_ratio: Option, - pub meter_interval: Option, - pub service_name: Option, - pub service_version: Option, - pub environment: Option, - pub logger_level: Option, + pub endpoint: String, // Endpoint for metric collection + pub use_stdout: Option, // Output to stdout + pub sample_ratio: Option, // Trace sampling ratio + pub meter_interval: Option, // Metric collection interval + pub service_name: Option, // Service name + pub service_version: Option, // Service version + pub environment: Option, // Environment + pub logger_level: Option, // Logger level + pub local_logging_enabled: Option, // Local logging enabled } -// 辅助函数:从环境变量中提取可观测性配置 +// Helper function: Extract observable configuration from environment variables fn extract_otel_config_from_env() -> OtelConfig { OtelConfig { endpoint: env::var("RUSTFS_OBSERVABILITY_ENDPOINT").unwrap_or_else(|_| "".to_string()), @@ -54,6 +56,10 @@ fn extract_otel_config_from_env() -> OtelConfig { .ok() .and_then(|v| v.parse().ok()) .or(Some(LOGGER_LEVEL.to_string())), + local_logging_enabled: env::var("RUSTFS_OBSERVABILITY_LOCAL_LOGGING_ENABLED") + .ok() + .and_then(|v| v.parse().ok()) + .or(Some(false)), } } @@ -179,6 +185,10 @@ pub struct AppConfig { } impl AppConfig { + /// Create a new instance of AppConfig with default values + /// + /// # Returns + /// A new instance of AppConfig pub fn new() -> Self { Self { observability: OtelConfig::default(), @@ -195,6 +205,7 @@ impl Default for AppConfig { } } +/// Default configuration file name const DEFAULT_CONFIG_FILE: &str = "obs"; /// Loading the configuration file diff --git a/docker-compose-obs.yaml b/docker-compose-obs.yaml index 9a01db4c..505f287b 100644 --- a/docker-compose-obs.yaml +++ b/docker-compose-obs.yaml @@ -62,18 +62,18 @@ services: dockerfile: Dockerfile.obs container_name: node1 environment: - - RUSTFS_VOLUMES=/root/data/target/volume/test{1...4} + - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 - - RUSTFS_OBS_CONFIG=/etc/observability/config.obs.toml + - RUSTFS_OBS_CONFIG=/etc/observability/config/obs.toml platform: linux/amd64 ports: - "9001:9000" # 映射宿主机的 9001 端口到容器的 9000 端口 - "9101:9002" volumes: - - ./data:/root/data # 将当前路径挂载到容器内的 /root/data - - ./.docker/observability/config/obs.toml:/etc/observability/config.obs.toml + # - ./data:/root/data # 将当前路径挂载到容器内的 /root/data + - ./.docker/observability/config:/etc/observability/config networks: - rustfs-network @@ -87,14 +87,14 @@ services: - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 - - RUSTFS_OBS_CONFIG=/etc/observability/config.obs.toml + - RUSTFS_OBS_CONFIG=/etc/observability/config/obs.toml platform: linux/amd64 ports: - "9002:9000" # 映射宿主机的 9002 端口到容器的 9000 端口 - "9102:9002" volumes: - - ./data:/root/data - - ./.docker/observability/config/obs.toml:/etc/observability/config.obs.toml + # - ./data:/root/data + - ./.docker/observability/config:/etc/observability/config networks: - rustfs-network @@ -104,18 +104,18 @@ services: dockerfile: Dockerfile.obs container_name: node3 environment: - - RUSTFS_VOLUMES=/root/data/target/volume/test{1...4} + - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 - - RUSTFS_OBS_CONFIG=/etc/observability/config.obs.toml + - RUSTFS_OBS_CONFIG=/etc/observability/config/obs.toml platform: linux/amd64 ports: - "9003:9000" # 映射宿主机的 9003 端口到容器的 9000 端口 - "9103:9002" volumes: - - ./data:/root/data - - ./.docker/observability/config/obs.toml:/etc/observability/config.obs.toml + # - ./data:/root/data + - ./.docker/observability/config:/etc/observability/config networks: - rustfs-network @@ -125,18 +125,18 @@ services: dockerfile: Dockerfile.obs container_name: node4 environment: - - RUSTFS_VOLUMES=/root/data/target/volume/test{1...4} + - RUSTFS_VOLUMES=http://node{1...4}:9000/root/data/target/volume/test{1...4} - RUSTFS_ADDRESS=0.0.0.0:9000 - RUSTFS_CONSOLE_ENABLE=true - RUSTFS_CONSOLE_ADDRESS=0.0.0.0:9002 - - RUSTFS_OBS_CONFIG=/etc/observability/config.obs.toml + - RUSTFS_OBS_CONFIG=/etc/observability/config/obs.toml platform: linux/amd64 ports: - "9004:9000" # 映射宿主机的 9004 端口到容器的 9000 端口 - "9104:9002" volumes: - - ./data:/root/data - - ./.docker/observability/config/obs.toml:/etc/observability/config.obs.toml + # - ./data:/root/data + - ./.docker/observability/config:/etc/observability/config networks: - rustfs-network diff --git a/scripts/run.sh b/scripts/run.sh index c31ce7ed..1d1470d9 100755 --- a/scripts/run.sh +++ b/scripts/run.sh @@ -47,6 +47,7 @@ export RUSTFS__OBSERVABILITY__SERVICE_NAME=rustfs export RUSTFS__OBSERVABILITY__SERVICE_VERSION=0.1.0 export RUSTFS__OBSERVABILITY__ENVIRONMENT=develop export RUSTFS__OBSERVABILITY__LOGGER_LEVEL=debug +export RUSTFS__OBSERVABILITY__LOCAL_LOGGER_ENABLED=true export RUSTFS__SINKS__FILE__ENABLED=true export RUSTFS__SINKS__FILE__PATH="./deploy/logs/rustfs.log" export RUSTFS__SINKS__WEBHOOK__ENABLED=false