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