RE: 從零開始的 Data Pipeline—序章
對於許多軟體服務來說,Log 是一種埋藏的金礦,甚至對於廣告平台來說更是直接關係到營收多寡的東西,因此如何建立穩定可靠的 Data Pipeline就成為一件非常重要的事情,本文將介紹如何從零開始建構整個流程。
因本 Team 服務雲端部分是放在 Google Cloud Platform 上,因此相關方案會以 GCP 為主。
基本工具介紹
Fluentd
Fluentd 是一個開源的 Data Collector,用於收集、整理、整合數據的工具。可以收集各處來源的資料,並且把雜亂的流程整合成一個簡單、統一、好設定的單一流程,同時擁有大量的 plugin 可以支援將數據送到 Elasticsearch、S3、BigQuery 等地方。
最常見的應用是設定追蹤 web server 之類的 log 檔案,每當有新的 log 寫進來就會觸發 Fluentd 將它發送出去。
優點:
- 設定容易,參考官網文件就能輕鬆設定完成整個流程
- 可操作欄位,可以設定在流程中修改、增減、解析欄位等,不必額外寫程式
- 可使用檔案暫存,發生狀況時可從中斷處開始執行,有效提升資料可靠性
- 部屬容易,使用 td-agent 可快速建構所需環境
**缺點:**1. 當資料量大時處理速度可能不夠快
Google Cloud Storage
GCS 是 Google Cloud Platform 上的儲存服務,類似於 AWS S3。
優點:
- 靈活用量,不須像開虛擬機硬碟一樣預設容量,免去容量增減的麻煩
- 按量收費,存多少收多少,而且收費便宜
- 儲存等級,可以設定如全亞洲區或是台灣機房等,同區域內傳輸免費*
- 生命週期,可設定依照創建、更新時間等條件自動刪除或降級以節省開銷
**缺點:**1. 無內建限速,在有頻寬限制的狀況下使用原生工具 gsutil
需額外注意
註:如將儲存等級設為亞洲區,台灣機房與東京機房之間透過 GCS 中轉則無傳輸費用,僅收取儲存費用。
Elasticsearch
Elasticsearch 相信不少人也都不陌生了,這是一個搜尋引擎,但是因為其靈活的儲存能力,以及強大的搜尋、分析功能,使其成為數據分析的一大利器。
優點:
- 靈活儲存,不須事先定義資料 Schema,有變動時可立即看到
- 製作圖表容易,搭配 Kibana 可以快速拉出各種圖表
- 搜尋功能,如同它原本的用途,在追蹤特定的 Log 時很好用
- 服務群集,簡單設定即可建立 Cluster
**缺點:**1. 穩定度、效能需要花費一些時間調整。
最基礎的 Data Pipeline
上面簡單介紹了這幾個常用工具後,讓我們進入最基礎的 Data Pipeline 吧。
我們最基礎的 Pipeline 包含以下幾個角色:
- Web Server / Compute Engine因為我們有一般機房與雲端服務,這個為服務使用者與產生 Log 的角色
- Fluentd Aggregator 這角色會收集來自 Web Server 端送來的 Log,經過一些處理如解析 user agent 欄位後,在送至後續儲存應用
- GCS 用於儲存處理完的資料,可供後續的分析及機器學習使用
- Elasticsearch用於即時性的服務監控,包含成效與錯誤訊息等,搭配 Kibana 做成報表
這個架構是從各處伺服器中的 Fluentd,將 Nginx Log 傳送至 GCP 上的一台獨立機器 Fluentd Aggregator 整合,再傳送至 Elasticsearch 做及時的監控與查詢、送到 Google Cloud Storage 儲存。
當建構起這個架構後,我們就有一個基礎但好用的 Data Pipeline 了。
詳細各個元件如何使用、設定,以及我們過程中遇到的問題將在下篇的實作篇中介紹。