使用Loggly 進行 Docker的日志集中化處理
Docker越來越多的被應用到分布式應用中。由于Docker 容器可以隔離依賴并簡化應用維護,因此成千上萬的企業正在使用Docker來縮短他們的發布周期并實現持續交付。Loggly 對Docker及時的提供新的支持的原因正在于現今它已經有很多值得興奮的地方。
在這篇文章中,我將介紹幾種Docker的日志處理的方法,并給出如何從類似Nginx這樣的應用程序發送syslog的示例。
Loggly 為Docker Logging添色
Docker 提供一個內置的logging功能,但是它僅僅只是給你一個初步的文本格式的最近訪問日志。使用Loggly管理Docker日志有如下優勢:
你可以在一個地方獲取到所有容器的日志,而無需再運行docker logs命令;
你可以通過我們提供的Search工具Loggly Dynamic Field Explorer,更快捷、高效的分析你的Docker日志并且它還提供一個直觀的趨勢圖;
你可以設置一些報警,這樣可以在發生錯誤或者事件數達到一個特定的閾值時(可能意味著故障)及時知曉。
Docker日志發送到Loggly可以有多種途徑
Loggly提供了多種靈活的日志傳送方法,你可以選擇其中最適合你特定環境的那個——當然,所有的方法都不需要專門的agent。以下是為每種logging類型提供的***方案:
1. Syslog
現在您可以使用 Loggly Docker container。它同樣托管在 Docker Hub上。SendGrid Labs推薦使用這種方案。
2. 自定義應用日志
通過Loggly的 HTTP端點發送數據:如果你正在使用Loggly為通用開發語言提供的 logging庫的其中之一做logging的話,這種方式可能會工作的很好。
3. 文件和socket結合
掛載到宿主機,之后rsyslog將會幫你讀取已經掛載的卷,并且隔一段時間會將你的log events轉發到Loggly。下次我會找個時間針對這種方法作出更為詳細的介紹。
在這篇文章中,我將會詳細介紹***種方案,這種方案適用于可以生成兼容于syslog日志的應用程序。兼容于syslog日志的應用包括Apache、Nginx和使用logback或是Log4j的Java程序。
使用容器技術有以下優點:
- 你只需要維護單獨的進程(一個容器就是一個進程),并且它們相對獨立于宿主機本身;
- 你可以更高效的使用你的資源。在一臺宿主機上,一個Loggly的Docker容器可以支持同一主機上的數十個其它容器;
- 你可以保證你的核心應用的性能和可靠性。
- 由于Loggly容器是作為一個單獨的進程運行,你可以確保以一種可靠的方式從Loggly獲取你的日志,而無需阻塞你的應用程序的處理;
- 你可以單點控制發送到Loggly的日志。例如,由于日志會發送到外網,你可能希望對其設置TLS加密,又或者,你想對你的日志做下過濾,只是想把特定日志級別的日志內容發送到Loggly。
Loggly Docker容器是怎樣工作的?
SendGrid提供了Docker 鏡像。 使用鏡像可以快速構建一個Docker容器。而在容器中,rsyslog會開放514端口,Docker會將這個端口映射到宿主機上的一個高數值的端口。 而當你設置連接到其他的容器時,Docker將會插入一個環境變量來告知它如何發送syslog到Loggly容器。連接到它的Docker容器數量理論 上沒有限制。這樣多對一的關系多對一的關系見上圖。
如何使用它?
Loggly 的支持中心目前提供了如何使用Docker容器的 step-by-step instructions教程。基本的命令就是運行Logger docker容器,然后插入自定義的標記(token), 并將端口映射到接收syslog的514端口。
- sudo docker run -d -p 514/udp --name loggly-docker -e TOKEN=TOKEN -e TAG=Docker sendgridlabs/loggly-docker
該篇教程也包含了一個具體的示例,講述如何使用netcat發送測試數據,并且配置一個支持syslog的Nginx容器然后發送syslog數據到Loggly的過程。一旦數據流入到Loggly,你便可以使用我們的查找接口、趨勢圖等等。
那么,現在就嘗試構建Docker Logging吧!