RE: 從零開始的 Data Pipeline—序章

對於許多軟體服務來說,Log 是一種埋藏的金礦,甚至對於廣告平台來說更是直接關係到營收多寡的東西,因此如何建立穩定可靠的 Data Pipeline就成為一件非常重要的事情,本文將介紹如何從零開始建構整個流程。

因本 Team 服務雲端部分是放在 Google Cloud Platform 上,因此相關方案會以 GCP 為主。


基本工具介紹

Fluentd

Fluentd 是一個開源的 Data Collector,用於收集、整理、整合數據的工具。可以收集各處來源的資料,並且把雜亂的流程整合成一個簡單、統一、好設定的單一流程,同時擁有大量的 plugin 可以支援將數據送到 Elasticsearch、S3、BigQuery 等地方。

最常見的應用是設定追蹤 web server 之類的 log 檔案,每當有新的 log 寫進來就會觸發 Fluentd 將它發送出去。

優點:

  1. 設定容易,參考官網文件就能輕鬆設定完成整個流程
  2. 可操作欄位,可以設定在流程中修改、增減、解析欄位等,不必額外寫程式
  3. 可使用檔案暫存,發生狀況時可從中斷處開始執行,有效提升資料可靠性
  4. 部屬容易,使用 td-agent 可快速建構所需環境

**缺點:**1. 當資料量大時處理速度可能不夠快

Google Cloud Storage

GCS 是 Google Cloud Platform 上的儲存服務,類似於 AWS S3。

優點:

  1. 靈活用量,不須像開虛擬機硬碟一樣預設容量,免去容量增減的麻煩
  2. 按量收費,存多少收多少,而且收費便宜
  3. 儲存等級,可以設定如全亞洲區或是台灣機房等,同區域內傳輸免費*
  4. 生命週期,可設定依照創建、更新時間等條件自動刪除或降級以節省開銷

**缺點:**1. 無內建限速,在有頻寬限制的狀況下使用原生工具 gsutil 需額外注意

註:如將儲存等級設為亞洲區,台灣機房與東京機房之間透過 GCS 中轉則無傳輸費用,僅收取儲存費用。

Elasticsearch

Elasticsearch 相信不少人也都不陌生了,這是一個搜尋引擎,但是因為其靈活的儲存能力,以及強大的搜尋、分析功能,使其成為數據分析的一大利器。

優點:

  1. 靈活儲存,不須事先定義資料 Schema,有變動時可立即看到
  2. 製作圖表容易,搭配 Kibana 可以快速拉出各種圖表
  3. 搜尋功能,如同它原本的用途,在追蹤特定的 Log 時很好用
  4. 服務群集,簡單設定即可建立 Cluster

**缺點:**1. 穩定度、效能需要花費一些時間調整。


最基礎的 Data Pipeline

上面簡單介紹了這幾個常用工具後,讓我們進入最基礎的 Data Pipeline 吧。

我們最基礎的 Pipeline 包含以下幾個角色:

  1. Web Server / Compute Engine因為我們有一般機房與雲端服務,這個為服務使用者與產生 Log 的角色
  2. Fluentd Aggregator 這角色會收集來自 Web Server 端送來的 Log,經過一些處理如解析 user agent 欄位後,在送至後續儲存應用
  3. GCS 用於儲存處理完的資料,可供後續的分析及機器學習使用
  4. Elasticsearch用於即時性的服務監控,包含成效與錯誤訊息等,搭配 Kibana 做成報表

這個架構是從各處伺服器中的 Fluentd,將 Nginx Log 傳送至 GCP 上的一台獨立機器 Fluentd Aggregator 整合,再傳送至 Elasticsearch 做及時的監控與查詢、送到 Google Cloud Storage 儲存。

當建構起這個架構後,我們就有一個基礎但好用的 Data Pipeline 了。

詳細各個元件如何使用、設定,以及我們過程中遇到的問題將在下篇的實作篇中介紹。

Posts in this series