資訊處理流程 | 生成 | 收集 | 儲存 | 使用 |
---|---|---|---|---|
Vector | ✓ |
Vector 是一款使用 Rust 所撰寫的高效能資料收集器,據稱其資料處理速度是市面上其他開源專案的 10 倍之多。Vector 可以從各種不同來源爬取資料,經過加工與篩選後,再將資料輸出至各式儲存服務,例如 Loki、Elasticsearch、Kafka、AWS S3、GCS、Azure、Datadog、StatsD、TCP、UDP、File 和 Console 等。由於其高度可擴展和彈性,Vector 不僅適用於 Log 資料,也能處理 Metrics 和 Traces。
Vector 最早由 Ben Johnson 創立的 Timber.io 在 2018 年開發,主要專注於 Log 處理。2020年,Timber.io 被 DataDog 收購,Vector 因此成為了 DataDog 的開源專案之一。
Vector 的 Pipeline 主要分為三大階段:Source、Transform 和 Sink。
Vector 的 Config 可以使用 TOML、YAML 或 JSON 格式撰寫。若要確認設定檔的正確性,可以透過 Vector CLI 的 validate 指令進行驗證。
sources
、transforms
和 sinks
都可以定義多個,再透過 inputs
串連不同的 Components 組成 Pipeline,例如以下範例:
method
欄位為 GET
的資料。sources:
my_demo_logs:
type: demo_logs
format: json
decoding:
codec: json # 使用 json codec 解析資料
lines:
- line1
transforms:
my_demo_logs_get:
type: filter
condition: '.method == "GET"' # 使用 `.` 選取欄位
inputs:
- my_demo_logs # 這裡使用 my_demo_logs 作為 input
sinks:
my_demo_stdout:
type: console
encoding:
codec: json # 使用 json codec 輸出資料
inputs:
- my_demo_logs_get # 這裡使用 my_demo_logs_get 作為 input
範例程式碼:17-vector
啟動所有服務
docker-compose -f docker-compose.loki.yaml up -d
檢視服務
admin/admin
點擊左上 Menu > Explore,左上 Data Source 選擇 Loki
,在 Label Filter 中 Label 選擇 app
,Value 選擇 nginx
,即可看到 nginx Container 的 Log
若要生成更多 Log 也可以使用 k6 發送更多 Request
k6 run --vus 1 --duration 300s k6-script.js
關閉所有服務
docker-compose down
啟動所有服務
docker-compose -f docker-compose.loki.yaml up -d
檢視服務
admin/admin
點擊左上 Menu > Explore,左上 Data Source 選擇 Loki
,在 Label Filter 中 Label 選擇 container_name
,Value 選擇 nginx
,即可看到 nginx Container 的 Log
若要生成更多 Log 也可以使用 k6 發送更多 Request
k6 run --vus 1 --duration 300s k6-script.js
關閉所有服務
docker-compose down
logger=vector
Label 的 Containercontainer_created_at
、container_id
、labels
,並使用 container_name
作為 Loki 的 LabelVector 以其出色的效能和靈活性贏得了眾多開發者的喜愛。大型企業與新創如 T-Mobile、Discord、Fastly、CVS 和 Visa 等都是 Vector 的使用者之一。其中,用量最大的使用者每天透過 Vector 處理超過 30TB 的資料。這些實例都證明了 Vector,儘管是一個相對年輕的開源專案,卻已具備應對大規模系統和生產環境的能力。此外,Red Hat 的 Kubernetes 產品 OpenShift 的文件也有介紹 Vector,推薦它作為 Fluentd 的替代方案。
因為 Logs 是歷史悠久的領域,所以有很多不同的工具可以選擇,在 Logs 系列中我們主要著重於 Loki 和資料收集工具。可以看到資料收集工具的設計理念大多都是以開放的生態系為主,不會限制最後輸出的服務,甚至也將可處理的資料放大到了 Metrics 與 Traces,這對於我們在打造系統時是一個很大的優勢,能夠選擇最適合我們當下情境的儲儲存服務。未來如果有新的儲存與使用工具出現時,也可以輕鬆的切換。