Promtail 的定位#

Promtail 是 Grafana Labs 專為 Loki 設計的日誌收集 Agent。它的工作很單純:從各種來源讀取日誌,加上適當的 Label,然後送到 Loki。

如果說 Loki 是日誌的「倉庫」,那 Promtail 就是專門為這個倉庫設計的「搬運工」。它不像 Fluent Bit 或 Vector 那樣是通用的資料管道——它只做一件事,把日誌送進 Loki,但把這件事做得很好。

Promtail 之於 Loki,就像 Prometheus Node Exporter 之於 Prometheus——專用工具,設定簡單,與對應的後端有最緊密的整合。

核心能力#

Tail:讀取日誌檔#

Promtail 的最基本功能是 tail 日誌檔案——持續監控指定的檔案路徑,讀取新增的每一行。它會記住讀取的位置(offset),即使 Promtail 重啟也不會漏讀或重複。

在 Kubernetes 環境中,Promtail 通常以 DaemonSet 部署在每個 Node 上,讀取 /var/log/pods/ 目錄下的容器日誌。

Service Discovery:自動發現目標#

手動列出所有需要收集日誌的檔案路徑既繁瑣又容易遺漏。Promtail 支援自動發現機制,能動態地找到需要收集的日誌來源。

主要的 Service Discovery 方式:

  • Kubernetes SD:自動發現叢集中所有 Pod 的日誌,並從 Pod 的 Metadata 中提取 Label(Namespace、Pod Name、Container Name 等)
  • File SD:監控指定目錄下的檔案,支援 Glob Pattern
  • Journal SD:讀取 systemd Journal

Kubernetes SD 是 Promtail 最強大的能力之一——它能自動將 Kubernetes 的 Metadata 轉為 Loki 的 Label,讓你不需要任何額外設定就能用 Namespace、Deployment、Pod Name 來查詢日誌。

Promtail 的 Kubernetes Service Discovery 與 Prometheus 的機制幾乎完全相同。如果你已經設定過 Prometheus 的 kubernetes_sd_configs,Promtail 的設定邏輯會非常熟悉。

Pipeline:日誌的前處理#

Pipeline 是 Promtail 在將日誌送往 Loki 之前進行的一系列處理步驟。你可以把它想像成一條加工流水線:

  • 解析(Parse):從日誌行中提取結構化欄位(支援 JSON、Regex、Logfmt 等格式)
  • 轉換(Transform):修改欄位值、調整時間戳格式
  • 過濾(Filter):丟棄不需要的日誌(例如 Health Check 的日誌)
  • 標記(Label):從日誌內容中提取值作為 Loki Label

Pipeline 的重要性#

Pipeline 不只是「錦上添花」的功能,它直接影響日誌系統的成本與效能

  • 在收集端過濾無用日誌,可以減少 30% 到 50% 的傳輸量與儲存成本
  • 在收集端提取 Label,讓 Loki 的查詢更精確、更快速
  • 標準化日誌格式,讓來自不同應用的日誌有一致的結構

Pipeline 中提取的 Label 要遵守低基數原則。如果你從日誌中提取 request_id 作為 Label,Loki 會因為 Stream 數量爆炸而嚴重效能下降。只有少數離散值的欄位(如 levelmethod)才適合作為 Label。

適用場景#

Promtail 最適合的情境

  • 團隊已經選定 Loki 作為日誌後端,需要一個最簡單的收集方案
  • Kubernetes 環境,需要自動發現 Pod 並附加 Metadata Label
  • 不需要將日誌同時送往多個後端
  • 偏好簡單設定勝過豐富功能

Promtail 的侷限性#

Promtail 最大的限制是:它只能輸出到 Loki

這意味著:

  • 如果你未來想把日誌同時送到 Elasticsearch、S3 或其他系統,Promtail 無法滿足
  • 如果你需要對日誌做複雜的轉換(如跨欄位計算、條件路由),Promtail 的 Pipeline 能力相對有限
  • 如果你的收集需求不只是日誌(還有 Metrics、Traces),Promtail 也無法勝任

Promtail vs 通用收集器:怎麼選#

情境建議
只用 Loki,追求最簡設定Promtail
用 Loki,但未來可能加其他後端Fluent BitVector
需要同時送日誌到多個系統Fluent BitVector
需要收集 Metrics + Logs + TracesOpenTelemetry CollectorVector
Kubernetes 環境,團隊小、追求簡單Promtail(最快上手)

如果你在評估初期不確定未來需求,選擇 Fluent Bit 或 Vector 會留下更多彈性。Promtail 適合那些明確知道「我只需要 Loki」的團隊。

小結#

Promtail 是 Loki 生態系中最簡單直接的入門選擇。它的 Kubernetes Service Discovery 和 Pipeline 機制讓你能快速地將叢集中的日誌收集到 Loki,幾乎不需要太多設定。但它的專用性也是它的限制——當你的需求超出「收集日誌送到 Loki」的範疇時,就該考慮更通用的收集器了。