11111111111
知識(shí)共享平臺(tái)
知識(shí)共享平臺(tái)

討教大學(xué)平臺(tái)

  • 首頁(yè)
  • 免費(fèi)課
  • 精品課
  • 討教題庫(kù)
  • 企業(yè)服務(wù)

    hot

  • 下載APP
  • 證書查詢
  • 關(guān)于我們
我問(wèn)
討教號(hào)
搜索
消息
  • 我的文章

    我的關(guān)注

    我的問(wèn)答

    我的秘密

    我的評(píng)論

    我的訂閱

    我的打賞

    我的錢包

    我的通知

    我的設(shè)置

    退出登錄

  • ×

    登錄

    討教 | 通行證

    登錄
    立即注冊(cè)
    忘記密碼?
    使用微信登錄

    提問(wèn) ×

    寫下你的問(wèn)題,準(zhǔn)確的表述更容易得到答案

    類型話題

    選擇支付方式
    您的討教幣 111 付費(fèi)金額

            <code id="eoctd"><strong id="eoctd"></strong></code>

                  Docker容器的日志處理

                  JAVA葵花寶典
                  2019-06-24 16:23:08
                  16篇 作品
                  2089 總閱讀量

                  Docker有很多的日志插件,默認(rèn)使用 json-file,只有使用json-file時(shí),sudo docker logs -f 才可以顯示,輸入以下命令查看docker日志插件:

                  $ sudo docker info | grep Logging

                  這里先說(shuō)明一下,當(dāng)容器運(yùn)行時(shí),docker會(huì)在宿主機(jī)上創(chuàng)建一個(gè)該容器相關(guān)的文件,然后將容器產(chǎn)生的日志轉(zhuǎn)存到該文件下。docker logs -f 命令就會(huì)找到該文件內(nèi)容并顯示在終端上。

                  我們都知道docker logs -f會(huì)將所有對(duì)應(yīng)的服務(wù)日志輸出到終端,無(wú)論服務(wù)的部署在哪個(gè)節(jié)點(diǎn)上,那么我現(xiàn)在提出一個(gè)問(wèn)題,是否每個(gè)節(jié)點(diǎn)對(duì)應(yīng)的容器文件,都會(huì)保存該服務(wù)的完整日志備份,還是只保存該節(jié)點(diǎn)服務(wù)對(duì)應(yīng)容器產(chǎn)生的日志?

                  因?yàn)檫@個(gè)問(wèn)題涉及到每個(gè)節(jié)點(diǎn)如果都用filebeat監(jiān)聽(tīng)宿主機(jī)的容器日志文件,那么每個(gè)節(jié)點(diǎn)的容器日志都是一個(gè)完整的備份,日志就會(huì)重復(fù),所以答案是每個(gè)節(jié)點(diǎn)只保留該節(jié)點(diǎn)上容器的日志,docker logs -f 命令只不過(guò)在overlay網(wǎng)絡(luò)模型上走了一層協(xié)議,把在其它節(jié)點(diǎn)上的相同的容器日志匯聚起來(lái)。

                  容器日志收集工具有很多,我這里只用filebeat舉例。

                  默認(rèn)使用docker的json-file,首先配置daemon(不推薦這種做法):

                  $ sudo dockerd \
                  --log-driver=json-file \
                  --log-opt labels=servicename

                  啟動(dòng)容器需要添加如下參數(shù):

                  $ sudo docker service update --label servicename=test

                  或者直接在docker-compose.yml中標(biāo)記(推薦這種做法):

                  version: "3"

                  services:
                    project1:
                      image: chenghuizhang/project1:v3
                      ports:
                        - 8081:8081
                      networks:
                        - my_net
                      deploy:
                        mode: replicated
                        replicas: 3
                      labels:
                        - "servicename=project1"
                      logging:
                        driver: "json-file"
                        options:
                          labels: "servicename"
                          tag: "{{.ImageName}}/{{.Name}}/{{.ID}}"
                          max-size: "100m"
                          max-file: "10"

                  networks:
                    my_net:
                        name: my_net
                        driver: overlay
                        ipam:
                          config:
                          - subnet: 10.18.0.0/24

                  自定義一個(gè)servicename標(biāo)簽,值為project1,tag格式為容器的信息,下面會(huì)說(shuō)到。

                  在每個(gè)節(jié)點(diǎn)安裝filebeat,并且filebeat.yml配置如下:

                  filebeat.prospectors:
                  - type: log
                     paths:
                             # 容器的日志目錄
                        - /var/lib/docker/containers/*/*.log
                        # 因?yàn)閐ocker使用的log driver是json-file,因此采集到的日志格式是json格式,設(shè)置為true之后,filebeat會(huì)將日志進(jìn)行json_decode處理
                     json.keys_under_root: true
                     tail_files: true 
                  output.logstash:
                    hosts: ["172.17.10.114:5044"]

                  在logstash.conf中配置索引:

                  output {
                    elasticsearch {
                      action => "index"
                      hosts => ["172.17.10.114:9200"]
                      # 獲取日志label
                      index => "%{attrs.servicename}-%{+YYYY.MM.dd}"
                    }
                  }

                  Dockerfile文件需要將項(xiàng)目輸出的日志打印到stdout和stderr中,不然json-file日志驅(qū)動(dòng)不會(huì)收集到容器里面輸出的日志,sudo docker logs -f就在終端顯示不了容器日志了,在Dockerfile中需加入以下命令:

                  RUN ln -sf /dev/stdout /xx/xx.log \ # info
                      && ln -sf /dev/stderr /xx/xx.log # error

                  或者在項(xiàng)目的log4j配置輸出控制臺(tái):

                  <Appenders>
                      <Console name="Console" target="SYSTEM_OUT">
                          <PatternLayout pattern="[%d{DEFAULT}]%m"/>
                      </Console>
                  </Appenders>

                  如果日志需要記錄容器id名稱和鏡像名稱,在運(yùn)行容器時(shí)可以加入以下參數(shù):

                  --log-opt tag="{{.ImageName}}/{{.Name}}/{{.ID}}"

                  當(dāng)然也可以在docker-compose編排文件中加入,具體格式在文中上面已經(jīng)舉例了。

                  下圖為官方的tag標(biāo)簽解釋文檔:

                  最終,json-file日志插件將容器打印到控制臺(tái)的日志生成到本地/var/lib/docker/containers/*/目錄中,為json格式,如下:

                  {
                      "log":"[GIN-debug] [WARNING] Now Gin requires Go 1.6 or later and Go 1.7 will be required soon.",
                      "stream":"stderr",
                      "attrs":{
                          "tag":"chenghuizhang/project1:v3@sha256:e6c0419d64e5eda510056a38cfb803750e4ac2f0f4862d153f7c4501f576798b/mygo.2.jhqptjugfti2t4emf55sehamo/647eaa4b3913",
                          "servicename":"project1"
                      },
                      "time":"2019-03-24T02:08:59.780161908Z"
                  }

                  最后在logstash中格式化日志:

                  filter {
                   grok {
                      patterns_dir => "/etc/logstash/conf.d/patterns"
                      match => {"message" => "%{TIMESTAMP_ISO8601:time}%{SERVICENAME:attr.servicename}%{DOCKER_TAG:attr.tag}"}
                  }


                  本網(wǎng)站內(nèi)容僅代表作者本人的觀點(diǎn),不代表本網(wǎng)站的觀點(diǎn)和看法,與本網(wǎng)站立場(chǎng)無(wú)關(guān),如有侵權(quán)請(qǐng)聯(lián)系討教。
                  給作者打賞,鼓勵(lì)TA抓緊創(chuàng)作
                  0人打賞金額
                  JAVA葵花寶典
                  16篇 作品
                  2089 總閱讀量
                  評(píng)論
                  您可能感興趣的文章

                  項(xiàng)目管理服務(wù)模式

                  敏捷項(xiàng)目管理與傳統(tǒng)項(xiàng)目管理比較

                  項(xiàng)目管理的特點(diǎn)

                  PMO是什么?是管項(xiàng)目經(jīng)理的嘛?

                  項(xiàng)目經(jīng)理必須關(guān)注的開(kāi)會(huì)十大關(guān)鍵問(wèn)題!

                  項(xiàng)目的組成要素

                  熱門話題 更多話題
                  精益生產(chǎn) 質(zhì)量管理 智能制造
                  職場(chǎng)效率 項(xiàng)目管理 討教
                  AI 大數(shù)據(jù) 六西格瑪
                  ×

                  給作者打賞,鼓勵(lì)TA抓緊創(chuàng)作!

                  選擇支付方式
                  選擇打賞金額
                  注:打賞的收益歸作者,非平臺(tái)

                  微信掃描支付

                  打賞金額: 1元

                  ×

                  給作者打賞,鼓勵(lì)TA抓緊創(chuàng)作!

                  您的討教幣
                  填寫您打賞討教幣數(shù)量
                  輸入密碼

                  111

                  注:打賞的收益歸作者,非平臺(tái)

                  微信掃描支付

                  打賞金額: 1元

                  感谢您访问我们的网站,您可能还对以下资源感兴趣:

                  国产精品久久久久久久人人看
                  主站蜘蛛池模板: 国产一区在线mmai| 人妻无码第一区二区三区| 久久久精品日本一区二区三区 | 亚洲无线码在线一区观看 | 国产综合无码一区二区色蜜蜜| 农村人乱弄一区二区| 亚洲一区二区三区无码中文字幕 | 一区二区三区免费视频观看| 一区二区高清在线| 美女福利视频一区| 日韩毛片基地一区二区三区| 国内精品一区二区三区东京| 另类国产精品一区二区| 日本香蕉一区二区三区| 中文字幕一区二区三区有限公司| 日韩精品在线一区二区| 果冻传媒一区二区天美传媒| 免费一区二区三区| 国产成人一区二区三区高清| 国产品无码一区二区三区在线蜜桃| 无码人妻一区二区三区免费看| 在线视频一区二区三区四区| 日本在线一区二区| 精品少妇一区二区三区在线| 国产精品高清一区二区人妖| 国产免费一区二区三区免费视频 | 精品欧洲av无码一区二区14| 合区精品久久久中文字幕一区| 精品一区二区三区在线观看视频 | 亚洲老妈激情一区二区三区| 亚洲一区二区三区深夜天堂| 东京热无码av一区二区| 天天躁日日躁狠狠躁一区| 污污内射在线观看一区二区少妇 | 日韩精品无码一区二区三区不卡| 性盈盈影院免费视频观看在线一区| 少妇无码一区二区三区| 爆乳熟妇一区二区三区霸乳| 视频一区二区中文字幕| 精品视频午夜一区二区| 国产伦精品一区二区|

                  <cite id="dszvi"><style id="dszvi"></style></cite>
                  • <output id="dszvi"><option id="dszvi"><em id="dszvi"></em></option></output>