摘要:使用管理日志標簽空格分隔日志管理本文作者是,本文原文地址是當前版本的一個問題就是日志管理。任何長時間運行的進程產生的日志都是冗長的,這會導致仔細檢查非常困難。所有文件這時能被轉發到一個中央日志系統。
使用 Fluentd 管理 Docker 日志
標簽(空格分隔): Fluentd Docker 日志管理
本文作者是 jwilder,本文原文地址是 Docker Log Management Using Fluentd
當前 docker 版本的一個問題就是日志管理。每個容器運行一個多帶帶的進程,并且進程的輸出被 docker 保存在主機上的一個位置。
在當前有一些操作問題:
日志無限制的增長。Docker 以 JSON 消息記錄每一行日志,這能引起文件增長過快以及超過主機上的磁盤空間,因為它不會自動輪轉。
docker logs 命令返回在每次它運行的時候返回所有的日志記錄。任何長時間運行的進程產生的日志都是冗長的,這會導致仔細檢查非常困難。
日志位于容器 /var/log 下或者是其他不容易可視化或訪問的位置。
Docker 日志選項雖然日志在 Docker 中正在演變,有幾種方法可以處理當前的 Docker 的日志:
在容器內收集 - 除了正在運行的應用程序之外,每個容器設置一個日志收集進程。baseimage-docker 使用 runit 連同 syslog 作為一個示例。
在容器外收集 - 一個多帶帶的收集 agent 運行在主機上,容器有一個從該主機掛載的卷,它們把日志記錄在那里。
在多帶帶的容器中收集 - 這是一個在主機上運行收集 agent 的細微變化。該收集 agent 也是運行在一個容器中并且該容器的卷是使用 docker run 的 volumes-from 選項被綁定給任何應用程序容器。這篇 Docker 和 logstash 有一個這種方法的示例。
這些方法可以工作,但是也有一些缺點。如果收集被執行在容器里面,這時每個容器運行多個進程會導致資源浪費(在一個容器中運行多個進程 看起來似乎是一個爭議性的話題,甚至 docker 官方文檔使用 supervisor 作為一個示例)。
如果收集使用 volumes 運行在容器外面,你依然需要確保你的應用程序日志記錄進這些 volumes 而不是 stdout/stderr。對于所有應用來說,這或許不可能。最終,容器運行依然有容器 JSON 日志文件,它也將無限增長。
Docker 使用 Fluentd容器外收集的另外一個變化就是通過一個中央化的 agent 來處理,不用綁定 volumes 到容器。這個方法是直接供工作于容器在主機上的 JSON 日志文件。
當你運行一個容器,容器的狀態存活在 /var/lib/docker/containers/
root@precise64:/var/lib/docker/containers/fe38c4124f36d0a5b2a38ea7dd58fe88ac92980286f1f6a7b7ed3ced7c994374# ls -la total 44 drwx------ 3 root root 4096 Mar 14 19:56 . drwx------ 83 root root 12288 Mar 14 21:53 .. -rw-r--r-- 1 root root 106 Mar 14 19:56 config.env -rw-r--r-- 1 root root 1522 Mar 14 19:56 config.json -rw------- 1 root root 241 Mar 14 19:56 fe38c4124f36d0a5b2a38ea7dd58fe88ac92980286f1f6a7b7ed3ced7c994374-json.log -rw-r--r-- 1 root root 126 Mar 14 19:56 hostconfig.json -rw-r--r-- 1 root root 13 Mar 14 19:56 hostname -rw-r--r-- 1 root root 181 Mar 14 19:56 hosts drwxr-xr-x 2 root root 4096 Mar 14 19:56 root
文件 e38c4124f36d0a5b2a38ea7dd58fe88ac92980286f1f6a7b7ed3ced7c994374-json.log 是容器的日志文件。每一行是一個 JSON 對象并且對于容器輸入和輸出的每一行這有一個界限。
{"log":"root@c835298de6dd:/# ls ","stream":"stdout","time":"2014-03-14T22:15:15.155863426Z"} {"log":"bin boot devu0009etc home libu0009lib64 media mnt optu0009proc root run sbin selinuxu0009srv sys tmp usr var ","stream":"stdout","time":"2014-03-14T22:15:15.194869963Z"
fluentd 是一個開源的數據收集器,它原生就支持 JSON 格式,因此你可以在主機上運行一個多帶帶的 fluentd 實例并配置它來 tail 每個容器的 JSON 文件。
如果你需要 tail 一個在容器文件系統某處的日志文件,你也可以使用 root 子目錄。所有 tailed 文件這時能被轉發到一個中央日志系統。
這有一個 fluentd.conf 配置文件的例子,tails 每個容器的日志并發送它們到 stdout。
## File input ## read docker logs with tag=docker.containertype stdout
在一個在線環境,實際的日志內容可以被發送到一個 elasticsearch 集群,并使用 kibana 或 graylog2 查看。二選一,這也有使用 JSON 工作的主機服務。
因為容器 ID 在隨著工作變化的,我創建了一個簡單的稱為 docker-gen 的 golang 工程,它可以使用模板從運行中的 docker 容器數據中生成任意文件。在這個工程中的 fluentd 模板示例被用于生成以上的樣本。
盡管沒有展示,docker-gen 也能生成 logrotate 配置文件來輪轉容器的 JSON 文件來避免在主機上沒有磁盤空間運行。希望,docker 項目能在未來的發行版中添加這個。
總結這個方法提供了一下好處:
主機可以使用一個多帶帶的收集 agent 轉發任何容器的日志到一個中央日志服務器.
不需要要求應用程序使用 syslog 或是寫日志到特定的卷。
主機可以訪問容器日志以及任何在容器文件系統上的日志文件。
主機可以為容器輪轉日志。
這個方法的一個缺點就是它直接訪問 docker 文件系統而沒有使用 API,這意味著它在未來可能出現問題,因為如果未來 docker 版本改變了它怎樣在主機文件系統存儲容器日志的話。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/26352.html
摘要:最后,我們用和適當的獨特后綴來標注數據流。將數據流分離到兩個不同的目的地在這里,我們解析自動定量日志,管理我們的緩沖區,查詢和區塊大小。 也許你對Fluentd的統一日志記錄層已經有所耳聞。可能你對日志是流不是文件這個概念也已經很熟悉,所以現在就讓我們用這個方法來思考日志層。事實上,最后導致決定性的一點就是fluentd是如何被配置的。全部都是關于我們如何處理stream的不同元素的:...
摘要:本文介紹使用收集容器日志的方法。提供了很多,默認情況下使用的,它會把容器打到的日志收集起來存到文件中,所看到的日志就是來自于這些文件。 本文介紹使用Fluentd收集standalone容器日志的方法。 Docker提供了很多logging driver,默認情況下使用的json-file,它會把容器打到stdout/stderr的日志收集起來存到json文件中,docker logs...
摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...
摘要:導讀本文系統性介紹安裝組件命令語法和應用,通過上述介紹使我們已經對基本操作有一定了解。二安裝本文以及以上版本為例來說明安裝底層對應的是鏡像,不可寫的文件系統,它的存儲方式比較多。根據規范產生和運行容器的工具。 導讀:本文系統性介紹Docker安裝、Docker組件、Docker命令、Dockerfile語法和Docker應用,通過上述介紹使我們已經對docker基本操作有一定了解。一、...
閱讀 3310·2023-04-25 19:42
閱讀 1329·2021-11-23 10:11
閱讀 2252·2021-11-16 11:51
閱讀 1590·2019-08-30 15:54
閱讀 2036·2019-08-29 18:44
閱讀 1609·2019-08-23 18:24
閱讀 494·2019-08-23 17:52
閱讀 1764·2019-08-23 15:33