2017-06-13 42 views
2

我有一個使用嵌入式數據庫,並生成日誌和原始指標到以下目錄結構的應用程序:數據庫,日誌泊塢窗卷容器和指標

/opt/myapp/data/ 
    database/ 
    logs/ 
    raw_metrics/ 

我在學習泊塢窗的過程中,我試圖「Dockerize」這個程序,我試圖找到實現以下目標對我來說是安裝/體積的解決方案:

  • 嵌入式數據庫存儲在相同的安裝量,無論myapp多少容器實例我已經跑步了。換句話說,所有容器實例都將其數據寫入共享的卷database/;和
  • 我也更喜歡我的日誌和原始指標(即:所有容器實例將日誌/指標寫入同一個共享卷)相同,除了這裏,我需要能夠區分每個日誌和指標數據容器。換句話說,我需要知道容器X生成了特定的日誌消息,或者容器Y在7秒內響應了請求,等等。

我想知道標準過程在Docker-土地。閱讀官方泊塢文檔以及this article on Docker Volumes後我暫定做法是:

  1. 創建一個數據卷容器和主機
  2. 我可以再配置我的嵌入安裝它,比方說,/opt/myapp數據庫中讀取從DB內容/他們寫/opt/myapp/database,我相信(如果我明白我已經正確讀取),所有容器實例將共享相同的DB
  3. 不知何故注入容器ID或其他一些獨特標識符到每個容器實例中,並重構我的日誌記錄和度量代碼,以便在生成日誌或原始度量標準時包含該注入的ID,以便我可能擁有/opt/myapp/logs/containerX.log文件,/opt/myapp/logs/containerY.log文件等。但我對標準做法非常感興趣這裏用於Docker容器之間的日誌聚合!

而且,可以說是更重要的,是事實,我不知道這種解決方案能夠在多主機的場景在哪裏工作我都運行在多個主機上幾十myapp容器的羣/羣。我的數據卷容器是否會奇蹟般地同步所有主機上的/opt/myapp卷?如果沒有,無論主機在哪個主機上運行,​​裝載容器共享卷的解決方案是什麼?提前致謝!

回答

3

有好幾個問題。以下是我的一些答案。

  1. Docker使用的默認日誌記錄驅動程序是json-file。這將以json格式捕獲stdout和stderr。還有其他的日誌驅動程序(如syslog,fluentd,LogEntries等)可以發送到中央日誌服務器。使用中央記錄還可以避免我們自己維護卷的問題。這裏捕獲所有Docker日誌記錄驅動程序(https://docs.docker.com/engine/admin/logging/overview/#supported-logging-drivers
  2. 如果將Swarm模式與服務一起使用,則存在服務日誌記錄的概念,其中服務日誌包含與與服務關聯的所有容器關聯的日誌。(https://docs.docker.com/engine/reference/commandline/service_logs/
  3. 默認情況下,Docker日誌包含由日誌驅動程序添加的容器標識。我們可以使用日誌選項對其進行自定義(https://docs.docker.com/engine/admin/logging/log_tags/
  4. 對於跨數據庫的容器共享數據,如果容器在同一主機中,我們可以使用基於主機的卷。由於沒有自動同步,因此這不會在節點間工作。對於跨節點共享容器數據,我們可以使用共享文件系統(如nfs,ceph,gluster)或者Docker卷插件(ebs,gce)
+0

謝謝@Sreeni(+1) - 關於上面關於日誌的第一個bulletpoint驅動程序:我想我可能會使用'syslog'驅動程序並在主機上配置'syslog'。但我**相信**(如果我錯了,請糾正我),那將需要我更改我的應用程序以登錄到STDOUT或STDERR,對吧?你如何配置Docker容器的'syslog',其內部的應用**必須**登錄到文件?例如,如果我想要一個Docker化的FTP服務器[例如這個](https://github.com/fauria/docker-vsftpd/blob/master/vsftpd.conf),我沒有發言權 - 那麼FTP如何服務器日誌。 – smeeb

+0

例如,在那個特定的Docker鏡像中,日誌記錄[在這裏配置](https://github.com/fauria/docker-vsftpd/blob/master/vsftpd.conf#L44),通過設置一個'xferlog_file'到指向一個日誌文件。那麼我如何使用Docker驅動程序從這些FTP服務器容器中收集日誌呢?只是好奇!再次感謝! – smeeb

+2

你可以這樣做一個符號鏈接:'/path/to/ftp.log - >/dev/stdout',你的ftp會認爲它正在寫入一個文件。或者直接告訴他寫入'/ dev/stdout'「文件」 – Robert