mirror of
https://github.com/rustfs/rustfs.git
synced 2026-09-01 09:48:20 +00:00
refactor(obs): enhance log cleanup and rotation (#2040)
This commit is contained in:
+16
-22
@@ -25,16 +25,16 @@
|
||||
use rustfs_config::observability::{
|
||||
DEFAULT_OBS_ENVIRONMENT_PRODUCTION, DEFAULT_OBS_LOG_CLEANUP_INTERVAL_SECONDS, DEFAULT_OBS_LOG_COMPRESS_OLD_FILES,
|
||||
DEFAULT_OBS_LOG_COMPRESSED_FILE_RETENTION_DAYS, DEFAULT_OBS_LOG_DELETE_EMPTY_FILES, DEFAULT_OBS_LOG_DRY_RUN,
|
||||
DEFAULT_OBS_LOG_GZIP_COMPRESSION_LEVEL, DEFAULT_OBS_LOG_KEEP_COUNT, DEFAULT_OBS_LOG_MATCH_MODE,
|
||||
DEFAULT_OBS_LOG_MAX_SINGLE_FILE_SIZE_BYTES, DEFAULT_OBS_LOG_MAX_TOTAL_SIZE_BYTES, DEFAULT_OBS_LOG_MIN_FILE_AGE_SECONDS,
|
||||
ENV_OBS_ENDPOINT, ENV_OBS_ENVIRONMENT, ENV_OBS_LOG_CLEANUP_INTERVAL_SECONDS, ENV_OBS_LOG_COMPRESS_OLD_FILES,
|
||||
ENV_OBS_LOG_COMPRESSED_FILE_RETENTION_DAYS, ENV_OBS_LOG_DELETE_EMPTY_FILES, ENV_OBS_LOG_DIRECTORY, ENV_OBS_LOG_DRY_RUN,
|
||||
ENV_OBS_LOG_ENDPOINT, ENV_OBS_LOG_EXCLUDE_PATTERNS, ENV_OBS_LOG_FILENAME, ENV_OBS_LOG_GZIP_COMPRESSION_LEVEL,
|
||||
ENV_OBS_LOG_KEEP_COUNT, ENV_OBS_LOG_KEEP_FILES, ENV_OBS_LOG_MATCH_MODE, ENV_OBS_LOG_MAX_SINGLE_FILE_SIZE_BYTES,
|
||||
ENV_OBS_LOG_MAX_TOTAL_SIZE_BYTES, ENV_OBS_LOG_MIN_FILE_AGE_SECONDS, ENV_OBS_LOG_ROTATION_TIME, ENV_OBS_LOG_STDOUT_ENABLED,
|
||||
ENV_OBS_LOGGER_LEVEL, ENV_OBS_LOGS_EXPORT_ENABLED, ENV_OBS_METER_INTERVAL, ENV_OBS_METRIC_ENDPOINT,
|
||||
ENV_OBS_METRICS_EXPORT_ENABLED, ENV_OBS_SAMPLE_RATIO, ENV_OBS_SERVICE_NAME, ENV_OBS_SERVICE_VERSION, ENV_OBS_TRACE_ENDPOINT,
|
||||
ENV_OBS_TRACES_EXPORT_ENABLED, ENV_OBS_USE_STDOUT,
|
||||
DEFAULT_OBS_LOG_GZIP_COMPRESSION_LEVEL, DEFAULT_OBS_LOG_MATCH_MODE, DEFAULT_OBS_LOG_MAX_SINGLE_FILE_SIZE_BYTES,
|
||||
DEFAULT_OBS_LOG_MAX_TOTAL_SIZE_BYTES, DEFAULT_OBS_LOG_MIN_FILE_AGE_SECONDS, ENV_OBS_ENDPOINT, ENV_OBS_ENVIRONMENT,
|
||||
ENV_OBS_LOG_CLEANUP_INTERVAL_SECONDS, ENV_OBS_LOG_COMPRESS_OLD_FILES, ENV_OBS_LOG_COMPRESSED_FILE_RETENTION_DAYS,
|
||||
ENV_OBS_LOG_DELETE_EMPTY_FILES, ENV_OBS_LOG_DIRECTORY, ENV_OBS_LOG_DRY_RUN, ENV_OBS_LOG_ENDPOINT,
|
||||
ENV_OBS_LOG_EXCLUDE_PATTERNS, ENV_OBS_LOG_FILENAME, ENV_OBS_LOG_GZIP_COMPRESSION_LEVEL, ENV_OBS_LOG_KEEP_FILES,
|
||||
ENV_OBS_LOG_MATCH_MODE, ENV_OBS_LOG_MAX_SINGLE_FILE_SIZE_BYTES, ENV_OBS_LOG_MAX_TOTAL_SIZE_BYTES,
|
||||
ENV_OBS_LOG_MIN_FILE_AGE_SECONDS, ENV_OBS_LOG_ROTATION_TIME, ENV_OBS_LOG_STDOUT_ENABLED, ENV_OBS_LOGGER_LEVEL,
|
||||
ENV_OBS_LOGS_EXPORT_ENABLED, ENV_OBS_METER_INTERVAL, ENV_OBS_METRIC_ENDPOINT, ENV_OBS_METRICS_EXPORT_ENABLED,
|
||||
ENV_OBS_SAMPLE_RATIO, ENV_OBS_SERVICE_NAME, ENV_OBS_SERVICE_VERSION, ENV_OBS_TRACE_ENDPOINT, ENV_OBS_TRACES_EXPORT_ENABLED,
|
||||
ENV_OBS_USE_STDOUT,
|
||||
};
|
||||
use rustfs_config::{
|
||||
APP_NAME, DEFAULT_LOG_KEEP_FILES, DEFAULT_LOG_LEVEL, DEFAULT_LOG_ROTATION_TIME, DEFAULT_OBS_LOG_FILENAME,
|
||||
@@ -65,8 +65,8 @@ use std::env;
|
||||
///
|
||||
/// - All fields are `Option<T>` to allow partial configuration via environment
|
||||
/// variables with sensible defaults provided by constants in `rustfs-config`.
|
||||
/// - `log_keep_count` represents the cleaner's minimum retention; `log_keep_files`
|
||||
/// controls the rolling-appender's file limit (both typically set to the same value).
|
||||
/// - `log_keep_files` is used to derive the rolling-appender's upper bound on
|
||||
/// retained files (if enabled) and to set the cleaner's minimum retention count.
|
||||
///
|
||||
/// # Example
|
||||
/// ```no_run
|
||||
@@ -128,13 +128,11 @@ pub struct OtelConfig {
|
||||
/// Rotation time granularity: `"hourly"` or `"daily"` (default: `"daily"`).
|
||||
pub log_rotation_time: Option<String>,
|
||||
/// Number of rolling log files to retain (default: `30`).
|
||||
/// The rolling-appender will delete the oldest file when this limit is exceeded.
|
||||
/// Used by both the rolling-appender (as a loose upper bound) and the
|
||||
/// background cleaner (as the minimum retention count).
|
||||
pub log_keep_files: Option<usize>,
|
||||
|
||||
// ── Log cleanup ───────────────────────────────────────────────────────────
|
||||
/// Minimum number of files the cleaner must always preserve.
|
||||
/// Typically set to the same value as `log_keep_files`.
|
||||
pub log_keep_count: Option<usize>,
|
||||
/// Hard ceiling on the total size (bytes) of all log files (default: 2 GiB).
|
||||
pub log_max_total_size_bytes: Option<u64>,
|
||||
/// Per-file size ceiling (bytes); `0` means unlimited (default: `0`).
|
||||
@@ -205,12 +203,9 @@ impl OtelConfig {
|
||||
_ => None,
|
||||
};
|
||||
|
||||
// `log_keep_files` (legacy) and `log_keep_count` (new) share the same
|
||||
// environment variables but have slightly different semantics.
|
||||
// `log_keep_files` is the rolling-appender retention count; `log_keep_count`
|
||||
// is the cleaner's minimum-keep threshold. Both default to the same value.
|
||||
// `log_keep_files` is the single source of truth for file retention count.
|
||||
// It defaults to `DEFAULT_LOG_KEEP_FILES` (30).
|
||||
let log_keep_files = Some(get_env_usize(ENV_OBS_LOG_KEEP_FILES, DEFAULT_LOG_KEEP_FILES));
|
||||
let log_keep_count = Some(get_env_usize(ENV_OBS_LOG_KEEP_COUNT, DEFAULT_OBS_LOG_KEEP_COUNT));
|
||||
|
||||
// `log_rotation_time` drives the rolling-appender rotation period.
|
||||
let log_rotation_time = Some(get_env_str(ENV_OBS_LOG_ROTATION_TIME, DEFAULT_LOG_ROTATION_TIME));
|
||||
@@ -238,7 +233,6 @@ impl OtelConfig {
|
||||
log_rotation_time,
|
||||
log_keep_files,
|
||||
// Log cleanup
|
||||
log_keep_count,
|
||||
log_max_total_size_bytes: Some(get_env_u64(ENV_OBS_LOG_MAX_TOTAL_SIZE_BYTES, DEFAULT_OBS_LOG_MAX_TOTAL_SIZE_BYTES)),
|
||||
log_max_single_file_size_bytes: Some(get_env_u64(
|
||||
ENV_OBS_LOG_MAX_SINGLE_FILE_SIZE_BYTES,
|
||||
|
||||
Reference in New Issue
Block a user