一千萬個為什麽

搜索

什麽是分布式任務的良好日誌記錄實踐?



我有以下設置:

創建多個工作者,進行一次計算並在結束後終止它們   計算完成。

因此,每次它都將是一個運行任務的不同實例,因此每個主機都將擁有自己的日誌文件,這將導致一個巨大的文件列表。

這是一個好習慣嗎?如果不是,在這個特定的用例中記錄任務處理的更好方法是什麽?

PS:我的基礎設施是無服務器的。因此,現在,我正在登錄(AWS)CloudWatch。但是,請獨立於AWS回答這個問題,並盡可能適合無服務器的安裝。

轉載註明原文: 什麽是分布式任務的良好日誌記錄實踐?

一共有 2 個回答:

“無服務器”大多僅僅意味著你有相對簡單的微服務,通常只是一個小的webapp或一個自動連接到REST前端的單一功能。相同的概念適用於更傳統的Web服務:通常是遠程系統日誌和ElasticSearch編寫器的混合。

網絡或遠程系統日誌已經存在了很長時間,並且有一套相當強大的工具。您將不得不運行中央系統日誌服務器,但協議非常簡單,每種語言都有純客戶端庫,可用於發送日誌。遠程系統日誌的一個常見問題是它傳統上基於UDP。這意味著在重負載下,某些日誌消息可能會丟失。這可能是一件好事,有助於避免級聯過載,但它是需要註意的。一些較新的syslog守護程序也支持基於TCP的協議,但客戶端支持不太統一,因此請做好您的研究。

最近很流行的是登錄到ElasticSearch。由於Kibana儀表板和Logstash小燈照明(通常稱為ELK,ElasticSearch + Logstash + Kibana),這一點非常有用。亞馬遜甚至提供了一個托管的ElasticSearch選項,使其開始起步更容易。 ES使用相對簡單的REST API,因此任何使用HTTP客戶端的語言(請閱讀:所有這些語言)應該可以記錄到ES,但要確保在部分系統中斷情況下阻止網絡操作時小心(例如,確保您的應用程序不會停留在日誌調用中,永遠不會成功並停止為用戶請求提供服務)。

更復雜的日誌拓撲僅受限於你的想象,盡管現在你會看到很多Kafka數據庫/隊列/無論你想要調用它的用法 - 它是非常復雜的日誌分發系統中的一個關鍵點。

在“無服務器”方面,您通常希望直接在網絡級與這些系統集成,因此可以將日誌數據直接從您的服務/功能發送到系統日誌或ES,而不是寫入本地文件(盡管也許回應那些本地調試和開發也是如此)。

這個答案更多的是關於可伸縮性的考慮 - 如果工人的數量可以很高,並且/或者他們中的多個人可以同時以高速率生產日誌。

是的,同時使用多個日誌文件是一種很好的做法。

試圖將多個工作人員實時合並為一個日誌文件日誌會引發問題:

  • 使用阻止機制來防止郵件丟失會減慢工作人員的速度
  • 日誌消息可能在組合日誌文件中亂序出現
  • 由於寫入速度有限,組合日誌的集中式日誌記錄工具可能會過載,消息將丟失

分片日誌文件(使用同時活動的多個日誌文件)本身就是一些托管提供商使用的技術,可以提供高性能,可擴展的集中式日誌記錄服務。例如,將日誌導出到文件時,Google的 StackDriver日誌記錄會生成多個分片日誌文件。從在Google雲端存儲中記錄條目

當您將日誌導出到雲端存儲分區時,Stackdriver   記錄將一組文件寫入存儲桶。這些文件是有組織的   在日誌類型和日期的目錄層次結構中。日誌類型可以是a   像 syslog 這樣的簡單名稱或類似的復合名稱   <�代碼> appengine.googleapis.com/request_log </代碼>。如果這些日誌被存儲在一個   存儲桶名為 my-gcs-bucket ,那麽這些目錄將被命名為   在以下示例中:

<�預> <�代碼> MY-GCS-桶/系統日誌/ YYYY/MM/DD / 我-GCS-桶/ appengine.googleapis.com/REQUEST_LOG/YYYY/MM/DD / </代碼>      

單個存儲桶可以包含來自多種日誌類型的日誌。

     葉目錄( DD/)包含多個文件,每個文件都是   將導出的日誌條目保存在文件中指定的時間段內   名稱。文件被分割並且它們的名字以分片號結尾,    SnAn (n = 0,1,2,...)。例如,這裏有兩個文件   可能存儲在目錄中   我的-GCS桶/系統日誌/ 2015/01/13/</代碼>:

<�預> <�代碼> 08:00:00_08:59:59_S0.json 08:00:00_08:59:59_S1.json </代碼>      

這兩個文件一起包含所有的 syslog 日誌條目   UTC時間0800開始的小時內的實例。獲取所有日誌   條目,您必須閱讀每個時間段的所有碎片 - 在此   大小寫,文件碎片0和1.寫入的文件碎片數量可以   根據日誌條目的數量更改每個時間段。

這樣的高性能日誌記錄服務也可以提供登錄到文件的備選方案,因此如果感興趣,可以完全避免日誌文件的管理:

最後 - 如果實時日誌文件合並不是多個日誌文件可以幫助進行離線日誌管理的要求:

  • 易於設計漸進式日誌備份,壓縮,歸檔和最終處理方案
  • 可以並行處理多組日誌(日誌文件),從而減少/避免瓶頸效應
  • 不需要文件分割和重寫