Vector 是一款以 Rust 撰寫的高效能資料收集器,官方宣稱資料處理速度可達同類開源專案的十倍。它不限於 Log,從 Metrics 到 Traces 同樣能處理,能對接的儲存與輸出包含 Loki、Elasticsearch、Kafka、AWS S3、Google Cloud Storage、Azure、Datadog、StatsD、TCP、UDP、檔案與 Console,覆蓋面相當廣。

Vector 最早於 2018 年由 Ben Johnson 創立的 Timber.io 開發,主要關注 Log 處理。2020 年 Timber.io 被 Datadog 收購,Vector 也正式成為 Datadog 旗下的開源專案之一。

核心概念#

Pipeline#

Vector 的 Pipeline 由三個角色組成:

  • Source:定義資料的來源,例如檔案、Kafka、Container Log。
  • Transform:負責資料加工與篩選,例如修改欄位、移除不需要的事件。
  • Sink:指定資料輸出的目的地,例如 Loki、Elasticsearch、Kafka、Datadog。

一條完整的 Pipeline 就是把多個 Source、Transform、Sink 透過 inputs 串接起來;Vector 也允許 Sink 接收多個來源,或一個 Source 同時被多條 Transform 使用。

Config#

Vector 支援以 TOML、YAML 或 JSON 撰寫設定檔,並提供 Vector CLI 的 validate 指令做語法與語意檢查。多組 sourcestransformssinks 之間用 inputs 欄位串接,形成一張小型 DAG。

以下範例展示三段 Pipeline 的串連:

  • Source:用 Demo Logs 產生假的 JSON 格式資料。
  • Transform:用 Filter 只保留 method 欄位為 GET 的事件。
  • Sink:用 Console 把篩選後的事件輸出到標準輸出。
sources:
  my_demo_logs:
    type: demo_logs
    format: json
    decoding:
      codec: json
    lines:
      - line1

transforms:
  my_demo_logs_get:
    type: filter
    condition: '.method == "GET"'
    inputs:
      - my_demo_logs

sinks:
  my_demo_stdout:
    type: console
    encoding:
      codec: json
    inputs:
      - my_demo_logs_get

在 Vector 中,元件的「相依關係」是透過 inputs 欄位顯式宣告的,而不是依賴設定檔的撰寫順序。這讓你可以把同一個 Source 同時餵給多個 Transform,或讓多個 Transform 匯入同一個 Sink,組出較複雜的處理流程。

Lab 重點#

原文 Lab 提供兩組情境,可作為動手練習的方向:

  • Basic:以 Demo Logs 為 Source 產生假資料,用 Filter Transform 留下 methodGET 的事件,再透過 Console Sink 輸出。
  • Container Log with Loki:以 Docker Logs 為 Source 收 Container Log,僅篩選帶有 logger=vector Label 的 Container;透過 Loki Sink 寫入 Loki,過程中移除 container_created_atcontainer_idlabels 等不需要的欄位,並以 container_name 作為 Loki 的 Label。

小結#

Vector 在效能與彈性上都很搶眼,已被 T-Mobile、Discord、Fastly、CVS、Visa 等企業採用,最大用量的客戶每日吞吐量超過 30TB。Red Hat OpenShift 的官方文件也將 Vector 列為 Fluentd 的替代方案,反映出社群對其穩定度的信心。

回頭看整個 Logs 篇,可以發現一個共同主題:資料收集工具普遍走向「開放、不綁定後端」的設計哲學,並把支援範圍擴展到 Metrics 與 Traces。對使用者而言,這代表更高的選擇彈性,也讓未來在切換儲存與分析工具時,不必把整套 Pipeline 推翻重建。

原文出處#

  • 原書/iThome:https://ithelp.ithome.com.tw/articles/10332767