国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

使用 Fluentd 管理 Docker 日志

Hujiawei / 2065人閱讀

摘要:使用管理日志標簽空格分隔日志管理本文作者是,本文原文地址是當前版本的一個問題就是日志管理。任何長時間運行的進程產生的日志都是冗長的,這會導致仔細檢查非常困難。所有文件這時能被轉發到一個中央日志系統。

使用 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.container






  type tail
  format json
  time_key time
  path /var/lib/docker/containers/c835298de6dde500c78a2444036101bf368908b428ae099ede17cf4855247898/c835298de6dde500c78a2444036101bf368908b428ae099ede17cf4855247898-json.log
  pos_file /var/lib/docker/containers/c835298de6dde500c78a2444036101bf368908b428ae099ede17cf4855247898/c835298de6dde500c78a2444036101bf368908b428ae099ede17cf4855247898-json.log.pos
  tag docker.container.c835298de6dd
  rotate_wait 5







  type tail
  format json
  time_key time
  path /var/lib/docker/containers/965c22a2ad1e935cb1476772ebe1ebef0050559b4cbcc7775b936348e7822347/965c22a2ad1e935cb1476772ebe1ebef0050559b4cbcc7775b936348e7822347-json.log
  pos_file /var/lib/docker/containers/965c22a2ad1e935cb1476772ebe1ebef0050559b4cbcc7775b936348e7822347/965c22a2ad1e935cb1476772ebe1ebef0050559b4cbcc7775b936348e7822347-json.log.pos
  tag docker.container.965c22a2ad1e
  rotate_wait 5







  type tail
  format json
  time_key time
  path /var/lib/docker/containers/889fe291f590c2c2aa2852856687efbb3e6fdd2faeca84da4bc0be2263f37953/889fe291f590c2c2aa2852856687efbb3e6fdd2faeca84da4bc0be2263f37953-json.log
  pos_file /var/lib/docker/containers/889fe291f590c2c2aa2852856687efbb3e6fdd2faeca84da4bc0be2263f37953/889fe291f590c2c2aa2852856687efbb3e6fdd2faeca84da4bc0be2263f37953-json.log.pos
  tag docker.container.889fe291f590
  rotate_wait 5



  type 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

相關文章

  • Fluented,Kubernetes和谷歌云平臺——處理日志流的解決方案

    摘要:最后,我們用和適當的獨特后綴來標注數據流。將數據流分離到兩個不同的目的地在這里,我們解析自動定量日志,管理我們的緩沖區,查詢和區塊大小。 也許你對Fluentd的統一日志記錄層已經有所耳聞。可能你對日志是流不是文件這個概念也已經很熟悉,所以現在就讓我們用這個方法來思考日志層。事實上,最后導致決定性的一點就是fluentd是如何被配置的。全部都是關于我們如何處理stream的不同元素的:...

    ymyang 評論0 收藏0
  • 使用Fluentd收集Docker容器日志

    摘要:本文介紹使用收集容器日志的方法。提供了很多,默認情況下使用的,它會把容器打到的日志收集起來存到文件中,所看到的日志就是來自于這些文件。 本文介紹使用Fluentd收集standalone容器日志的方法。 Docker提供了很多logging driver,默認情況下使用的json-file,它會把容器打到stdout/stderr的日志收集起來存到json文件中,docker logs...

    ivan_qhz 評論0 收藏0
  • 關于k8s集群容器日志收集的總結

    摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...

    jeffrey_up 評論0 收藏0
  • 關于k8s集群容器日志收集的總結

    摘要:我推薦你使用進行日志收集,將作為的出口。集群目前暫時沒有提供日志查看機制。以如下的形式啟動容器,容器日志將發往配置的。 【作者barnett】本文介紹了k8s官方提供的日志收集方法,并介紹了Fluentd日志收集器并與其他產品做了比較。最后介紹了好雨云幫如何對k8s進行改造并使用ZeroMQ以消息的形式將日志傳輸到統一的日志處理中心。 容器日志存在形式 目前容器日志有兩種輸出形式: ...

    or0fun 評論0 收藏0
  • 容器化-Docker實戰

    摘要:導讀本文系統性介紹安裝組件命令語法和應用,通過上述介紹使我們已經對基本操作有一定了解。二安裝本文以及以上版本為例來說明安裝底層對應的是鏡像,不可寫的文件系統,它的存儲方式比較多。根據規范產生和運行容器的工具。 導讀:本文系統性介紹Docker安裝、Docker組件、Docker命令、Dockerfile語法和Docker應用,通過上述介紹使我們已經對docker基本操作有一定了解。一、...

    tuantuan 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<