作者丨Jeffrey Walker
翻譯丨Vincent
譯者注:微服務和容器很好地結合了,但是它們的結合讓日志記錄也變成了一個難題。作者在本文描述了一些因素,在設置監控的時候是需要考慮的。以下為譯文
在過去的幾年中,容器已經成為IT領域的一個重要話題,尤其是在DevOps領域。簡單地說,當從一個環境遷移到另一個環境時,容器提供了一種簡單且可擴展的方法可以運行軟件。
容器是通過在一個包中提供完整的運行環境實現的,其中就包括了應用程序,所有的依賴項,庫,其它二進制文件以及運行時所需的配置文件。
與容器緊密結合的是微服務,它代表了開發應用程序的一種更靈活的方式。微服務體系結構將應用程序構建為一組松耦合的服務,這些服務通過處理離散業務功能的API連接起來。微服務主要為應用程序開發提供了一種“分而治之”的方法,而不是一個大型的單一代碼庫。
Docker在容器的基礎架構領域是處于世界領先地位的,它是一個部署容器級軟件應用的平臺。容器的真正價值在于它們允許團隊動態地啟動一個完整的運行環境。Docker可以說是讓企業采用微服務的最具影響力的平臺。
類似于虛擬機通過向來自一個服務器的終端用戶提供一個操作系統的多個實例來簡化軟件開發和測試,容器在應用程序和主機操作系統之間添加了一個額外的抽象層。最大的不同是,容器不需要管理程序,只運行操作系統的一個實例;總的來說,這等同于內存更少,運行時間更快。
與開發任何應用程序一樣,日志記錄是過程的中心部分,在出現問題時尤其有用。但是,在集裝箱化應用程序的世界里,與傳統應用程序相比,它是不同的。日志Docker實際上意味著不僅記錄應用程序和應用程序主機操作系統,以及Docker服務。在處理多碼應用程序時,有許多日志記錄技術和方法可以記住。我們將在下面詳細介紹前五種最佳實踐。
基于應用程序的日志記錄
在基于應用程序的方法中,容器內的應用程序使用日志框架來處理日志記錄過程。例如,某個Java應用程序可能會使用Log4j 2來對日志文件格式化,然后發送到遠程服務器,并完全繞過Docker環境和操作系統。
雖然基于應用程序的日志記錄使開發人員對日志事件有了最大的控制權,但是這種方法也會在應用程序過程中產生大量的消耗。這種方法對于那些工作在傳統應用程序環境中的人來說可能是有用的,因為它允許開發人員繼續使用應用程序的日志框架(例如Log4j 2)而不需要向主機添加日志功能。
Logging Docker實際上意味著不僅需要記錄應用程序和主機操作系統,還包括了Docker服務。
使用數據卷
容器本質上是臨時的,這意味著如果容器關閉了,那么容器內的任何文件最終都會丟失。相反,容器必須將日志事件轉發到集中式日志記錄服務(比如Loggly),或者將日志事件存儲在數據卷中。數據卷的定義為“容器內的一個標記目錄,該目錄用來保存持久或共享的數據”。
使用數據卷來記錄事件的好處是,由于它們鏈接到主機上的一個目錄,所以日志數據仍然存在,并且可以與其它容器共享。這種方法的優點是它減少了在容器失敗或關閉時丟失數據的可能性。在這里可以找到關于在Ubuntu中設置Docker數據卷的說明。
Docker日志驅動
在Docker中進行日志記錄的第三種方法是使用平臺的日志驅動程序將日志事件轉發給在主機上運行的syslog實例。Docker日志驅動程序直接從容器的stdout和stderr輸出里面讀取日志事件;這就消除了從日志文件中讀取和寫入的需要,最終也會稍微改善性能。
然而,使用Docker日志驅動程序也有一些缺點:
它不允許進行日志解析,只允許進行日志轉發。
Docker日志命令只與日志驅動程序JSON文件一起工作。
當TCP服務器不可訪問時,容器就會終止。
這里可以找到為Docker配置默認日志驅動程序的說明。
容器專用日志
這種方法的主要優點是允許在Docker環境中完全地管理日志事件。由于專用的日志容器可以從其他容器收集日志事件,聚合它們,然后將事件存儲或轉發到第三方服務,這種方法消除了對主機的依賴。
專用日志容器的其它優點是:
自動收集、監視和分析日志事件。
在沒有配置的情況下自動縮放日志事件。
通過多個日志事件、stats和Docker API數據流來檢索日志。
Sidecar方法
Sidecars已經成為管理微服務架構的流行方法。Sidecar的想法來自于類似摩托車的sidecar是如何附著在摩托車上的。引用一個消息源,“Sidecar作為第二個過程在你的服務旁邊運行,并通過類似于HTTP上的REST-like API 這樣一個同類接口提供了’平臺基礎設施’的特性。”
從日志記錄的角度來看,Sidecar方法的優點是每個容器都與它自己的日志容器有關(應用程序容器保存日志事件和日志容器標記,然后像Loggly那樣將它們轉發到日志管理系統)。
Sidecar方法對于大型部署來說尤其有用,因為這些部署需要有更專門的日志信息和自定義標記。不過,建立Sidecar非常復雜,而且難度也很大。