今天,我們將深入探討 Loki 的設定檔,了解各個關鍵參數的意義以及如何調整它們以符合不同規模的生產環境需求。
Loki 的設定檔(通常是 loki-config.yaml
)主要由以下幾個部分組成:
server
: 設定 Loki 服務本身,如監聽的 Port。common
: 通用設定,特別是儲存後端的配置(如 S3、GCS 或本地文件系統)。schema_config
: 定義日誌的儲存模式和索引策略,是效能優化的核心。limits_config
: 設定各種限制,防止單一租戶或查詢消耗過多資源。ingester
& querier
: 分別對寫入和讀取路徑進行細部調整。ruler
: 用於告警規則的評估。server
- 服務配置這是最基本的配置,定義了 Loki 如何運行。
server:
http_listen_port: 3100
grpc_listen_port: 9095
log_level: info
http_listen_port
: Loki API 的主要 Port,用於接收日誌、處理查詢。grpc_listen_port
: gRPC Port,用於 Loki 元件之間的內部通訊。log_level
: Loki 自身的日誌級別,可設為 debug
, info
, warn
, error
。common
- 儲存後端這裡定義了日誌和索引的最終儲存位置。生產環境強烈建議使用物件儲存。
common:
storage:
s3:
endpoint: s3.ap-northeast-1.amazonaws.com
region: ap-northeast-1
bucketnames: my-loki-logs-bucket
# 建議使用 IAM Role,而非寫死 Access Key
replication_factor: 3 # 在 Loki 叢集中,資料會被複製的份數
storage
: 可以選擇 s3
, gcs
, azure
或 filesystem
(本地文件系統,僅建議測試用)。replication_factor
: 在叢集模式下,確保資料的高可用性。schema_config
- 儲存模式與索引這是影響 Loki 效能和成本最重要的部分。它定義了日誌如何被索引和分塊。
schema_config:
configs:
- from: 2024-01-01
store: tsdb
object_store: s3
schema: v12
index:
prefix: index_
period: 24h
from
: 此設定生效的起始日期。你可以隨著時間演進更新你的 schema。store
: 索引的儲存格式。tsdb
是目前推薦的預設值,效能更佳。schema
: Loki 的 schema 版本,v11
或 v12
是常見選擇。index.period
: 每個索引檔案涵蓋的時間範圍。24h
表示每天建立一個新的索引檔案。這個值越小,索引越快,但檔案也越多。limits_config
- 資源限制此區塊是保護 Loki 穩定運行的關鍵,避免被惡意或錯誤的查詢拖垮。
limits_config:
enforce_metric_name: false
reject_old_samples: true
reject_old_samples_max_age: 168h # 拒收一週前的日誌
max_query_series: 10000 # 單一查詢最多能回傳的 series 數量
ingestion_rate_mb: 50 # 每秒每個租戶最大寫入速率 (MB/s)
ingestion_burst_size_mb: 100 # 瞬間寫入的峰值容許量
per_stream_rate_limit: 10MB # 單一 stream 的寫入速率限制
reject_old_samples_max_age
: 避免過舊的日誌寫入,這通常是客戶端配置錯誤的信號。max_query_series
: 限制查詢的複雜度,防止 "Query of Death"。ingestion_rate_mb
: 控制寫入流量,保護後端儲存。Loki 的設定檔提供了極大的靈活性,但也帶來了複雜性。理解以上幾個關鍵區塊的意義,可以幫助你:
schema_config
和 limits_config
。retention
策略(未在範例中詳述)和 schema 設計來管理。limits_config
是保護系統不被濫用的重要防線。