2017-05-27 66 views
2

我的pod有多個日誌文件,例如php-fpm + nginx堆棧。如何收集日誌文件?kubernetes如何收集沒有stdout或stderr的日誌文件

我知道nginx使用符號鏈接。但是這不能處理超過2個日誌文件。

我想在主機上掛載捲到豆莢,但是如何爲每個豆莢設置不同的文件夾?無論如何,要將主機中名爲podname的文件夾安裝到pod文件夾/logs

raychaser給了一種方法來收集文件夾到/var/log/containers/,但我不認爲它在kubernetes中的作品。

+0

這是什麼都與標準輸出/標準錯誤怎麼辦?這是「kubernetes stdout」的最高結果,但與它無關,我可以告知 – Novaterata

回答

1

最後,我找到一個方法來收集日誌。

  1. 確保所有應用程序都將所有日誌文件寫入文件夾,例如, /med/log
  2. 確保所有應用程序都使用腳本啓動作業,例如, entrypoint.sh
  3. 在安裝卷中創建一個由$ HOSTNAME命名的文件夾,例如 /log/$HOSTNAME
  4. 鏈接文件夾:ln -sf /log/$HOSTNAME /med/log

在k8s中,您需要將主機日誌文件夾/var/log/k8s/裝載到/log。和日誌文件目錄的樣子:

/var/log/k8s/ 
|-- app1-${container_id}/ 
| |-- access.log 
| |-- error.log 
|-- app2-${container_id}/ 
    |-- access.log 
    |-- error.log 
+0

這很好,但是會帶來消耗整個/ var/disk並導致其他Pod或服務失敗的風險。有一個PR建議在即將到來的k8s中創建一個logDir,從而實現資源限制。 –

+0

您也可以嘗試利用'--log-dir = XXX'。 –

+0

謝謝,蘇博德,你的意思是'kubectl --logtostderr = false --log-dir =/med/log'?你能解釋一下「PR提案在即將到來的K8s中創建logDir」嗎? –

0

您可以使用像Fluentd這樣的日誌解決方案,它允許您定義多個信息源。由於您有多個日誌文件,它可以用於您的用例。

http://docs.fluentd.org/v0.12/articles/quickstart http://docs.fluentd.org/v0.12/articles/config-file

+0

但fluentd僅收集主機文件,如'/ var/lib/docker/containers/*'和'/ var/log/container/*',除非將日誌掛載到主機,否則無法收集容器中的文件。但是我們如何確保每個容器都安裝到主機中的不同文件夾? –

相關問題