成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Kubernetes日志收集常用套路,用了準不出錯!

云計算 新聞
本文主要介紹容器日志,容器日志可以理解是運行在容器內部的應用輸出的日志。

?一、準備

?1、關于容器日志

Docker的日志分為兩類,一類是 Docker引擎日志;另一類是容器日志。引擎日志一般都交給了系統日志,不同的操作系統會放在不同的位置。本文主要介紹容器日志,容器日志可以理解是運行在容器內部的應用輸出的日志,默認情況下,docker logs 顯示當前運行的容器的日志信息,內容包含 STOUT(標準輸出) 和 STDERR(標準錯誤輸出)。日志都會以json-file 的格式存儲于 /var/lib/docker/containers/<容器id>/<容器id>-json.log ,不過這種方式并不適合放到生產環境中。

默認方式下容器日志并不會限制日志文件的大小,容器會一直寫日志,導致磁盤爆滿,影響系統應用。(docker log-driver 支持log文件的rotate)

  • Docker Daemon 收集容器的標準輸出,當日志量過大時會導致Docker Daemon 成為日志收集的瓶頸,日志的收集速度受限。

  • 日志文件量過大時,利用docker logs -f 查看時會直接將Docker Daemon阻塞住,造成docker ps等命令也不響應。

Docker提供了logging drivers配置,用戶可根據自己的需求配置不同的log-driver,可參考官網(https://docs.docker.com/config/containers/logging/configure/)。但是上述配置的日志收集也是通過Docker Daemon收集,收集日志的速度依然是瓶頸。

log-driver 日志收集速度;

syslog 14.9 MB/s;

json-file 37.9 MB/s

能不能找到不通過Docker Daemon收集日志直接將日志內容重定向到文件并自動 rotate的工具呢?答案是肯定的采用S6基底鏡像。

S6-log 將 CMD 的標準輸出重定向到/.../default/current,而不是發送到 Docker Daemon,這樣就避免了 Docker Daemon 收集日志的性能瓶頸。本文就是采用S6基底鏡像構建應用鏡像形成統一日志收集方案。

?2、關于k8s日志

k8s日志收集方案分成以下三個級別:

1)應用(Pod)級別

Pod級別的日志 , 默認是輸出到標準輸出和標志輸入,實際上跟docker容器的一致。使用 kubectl logs pod-name -n namespace 查看,具體參考。

2)節點級別

Node級別的日志,通過配置容器的log-driver來進行管理,這種需要配合logrotare來進行,日志超過最大限制,自動進行rotate操作。

圖片

3)集群級別

集群級別的日志收集 , 有以下三種:

  • 節點代理方式

在node級別進行日志收集。一般使用DaemonSet部署在每個node中。這種方式優點是耗費資源少,因為只需部署在節點,且對應用無侵入。缺點是只適合容器內應用日志必須都是標準輸出。

圖片

  • 使用sidecar container作為容器日志代理

也就是在pod中跟隨應用容器起一個日志處理容器,有兩種形式。

一種是直接將應用容器的日志收集并輸出到標準輸出(叫做Streaming sidecar container),但需要注意的是,這時候,宿主機上實際上會存在兩份相同的日志文件:一份是應用自己寫入的;另一份則是 sidecar 的 stdout 和 stderr 對應的 JSON 文件。這對磁盤是很大的浪費 , 所以說,除非萬不得已或者應用容器完全不可能被修改。

圖片

另一種是每一個pod中都起一個日志收集agent(比如logstash或fluebtd)也就是相當于把方案一里的 logging agent放在了pod里。但是這種方案資源消耗(cpu,內存)較大,并且日志不會輸出到標準輸出,kubectl logs 會看不到日志內容。

圖片

  • 應用容器中直接將日志推到存儲后端

這種方式就比較簡單了,直接在應用里面將日志內容發送到日志收集服務后端。

圖片

二、日志架構

通過上文對k8s日志收集方案的介紹,要想設計一個統一的日志收集系統,可以采用節點代理方式收集每個節點上容器的日志,日志的整體架構如圖所示。

圖片

解釋如下:

  • 所有應用容器都是基于s6基底鏡像的,容器應用日志都會重定向到宿主機的某個目錄文件下比如/data/logs/namespace/appname/podname/log/xxxx.log。
  • log-agent 內部 包含 filebeat ,logrotate 等工具,其中filebeat是作為日志文件收集的agent。
  • 通過filebeat將收集的日志發送到kafka。
  • kafka在講日志發送的es日志存儲/kibana檢索層。
  • logstash 作為中間工具主要用來在es中創建index和消費kafka 的消息。

整個流程很好理解,但是需要解決的是:

  • 用戶部署的新應用,如何動態更新filebeat配置。
  • 如何保證每個日志文件都被正常的rotate。
  • 如果需要更多的功能則需要二次開發filebeat,使filebeat 支持更多的自定義配置。

三、付諸實踐

解決上述問題,就需要開發一個log-agent應用以daemonset形式運行在k8s集群的每個節點上,應用內部包含filebeat,logrotate,和需要開發的功能組件。

第一個問題,如何動態更新filebeat配置,可以利用(https://github.com/fsnotify/fsnotify)工具包監聽日志目錄變化create、delete事件,利用模板渲染的方法更新filebeat配置文件。

第二個問題,利用(https://github.com/robfig/cron)工具包創建cronJob,定期rotate日志文件,注意應用日志文件所屬用戶,如果不是root用戶所屬,可以在配置中設置切換用戶。

/var/log/xxxx/xxxxx.log {
su www-data www-data
missingok
notifempty
size 1G
copytruncate
}

第三個,關于二次開發filebeat,可以參考博文:https://www.jianshu.com/p/fe3ac68f4a7a

四、總結

本文只是對k8s日志收集提供了一個簡單的思路,關于日志收集可以根據公司的需求,因地制宜。

責任編輯:張燕妮 來源: dbaplus社群
相關推薦

2023-08-31 07:46:54

KubernetesLoki

2021-07-20 08:32:16

Kubernetes日志平臺

2021-07-19 09:18:07

KubernetesELK Stackk8s

2020-11-12 11:00:42

運維IT架構

2017-04-11 16:14:31

社交媒體郵件營銷

2024-02-23 14:57:40

2023-08-13 16:32:12

JavaScript

2022-05-11 10:58:11

MetricKitiOS13系統崩潰診斷

2022-06-12 21:28:26

Fluentd開源

2021-04-28 07:58:16

Raft 選舉參數

2022-01-03 07:49:04

Kubernetes集群容器

2019-11-21 11:08:33

容器服務器軟件

2021-09-07 09:34:04

CentOSfilebeatkafka

2015-08-20 10:23:23

前端代碼日志收集

2022-12-29 08:00:26

Loki網絡設備

2024-04-09 08:00:00

Kubernetes管理系統云原生

2022-05-18 08:10:50

Kubernetes工具運維

2019-12-30 15:34:52

網絡安全App信息安全

2021-12-26 18:23:10

Kubernetes集群命令

2025-05-09 10:09:42

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产第一页在线观看 | 91一区二区三区 | 亚洲高清在线播放 | 国产成人精品在线播放 | 欧美美女爱爱 | 欧美日韩在线电影 | 人人人人干 | 欧美在线一区二区三区四区 | av中文字幕在线观看 | 久久久蜜桃 | 91免费小视频 | 麻豆久久久久 | 综合精品久久久 | 久久99国产精一区二区三区 | 成人av一区 | 中文福利视频 | 久热爱 | 精品久久久久一区二区国产 | 免费国产视频在线观看 | 精品在线一区 | 日韩在线不卡视频 | 精品一区二区久久久久久久网站 | 国产探花 | 免费日韩av | 日韩精品成人网 | 自拍偷拍亚洲视频 | 国产精品日韩 | 天天射夜夜操 | 一区二区久久 | 午夜三区| 日日干天天操 | 91 久久| 国产一区二区美女 | 欧州一区二区三区 | 久久国产一区 | 麻豆亚洲 | 欧美在线一区二区三区 | 麻豆天堂 | 污视频免费在线观看 | 成年人在线观看视频 | 懂色av蜜桃av |