輕鬆搞定對容器例項日誌設定定期清理和回卷

2021-09-11 11:04:25 字數 2788 閱讀 6468

###引言 kubernetes對於容器例項的日誌收集,並沒有提供原生的解決方案。但提供使用 kubectl logs 命令檢視容器例項執行時的日誌。kubectl logs 命令實現的基本原理為:容器執行時預設將標準輸出和標準錯誤中的日誌輸出到磁碟上儲存。儲存至主機目錄:/var/lib/docker/containers/container_id/ 目錄。使用者呼叫kubectl logs 命令時,kubelet 讀取對應的日誌檔案中的資料,將資料回傳給master,再由master返回到使用者。從而實現使用者對日誌的檢視。

###通過logrotate服務實現日誌定期清理和回卷

logrotate是個十分有用的工具,它可以自動對日誌進行截斷(或輪循)、壓縮以及刪除舊的日誌檔案。例如,你可以設定logrotate,讓/var/log/foo日誌檔案每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運作完全自動化,不必進行任何進一步的人為干預。

但如果按照之前的部署方式,需要手動在每個節點上都安裝和配置對應logrotate工具。如果通過kubernetes容器服務編排的能力,將logrotate通過kubernetes中服務的方式部署到各個節點上,這樣既可以實現只需要一次部署,部署到所有節點。並且通過容器的方式保證了logrotate配置的一致性。具體的實施方案如下圖所示:

方案的具體實現是在kubernetes集群中,建立daemonset資源實現。daemonset資源會在每個node節點上都部署乙個logrotate的容器例項,並且在容器例項中設定對映主機的log日誌目錄,從而實現日誌的定時清理和回卷。

建立daemonset的示例如下

apiversion: extensions/v1beta1

kind: daemonset

metadata:

name: logrotate

spec:

template:

metadata:

labels:

id: logrotate

name: logrotate

spec:

containers:

- name: logrotate-es

image: blacklabelops/logrotate

securitycontext:

privileged: true

volumemounts:

- name: containers

mountpath: /var/lib/docker/containers

- name: varlog

mountpath: /var/log/docker

- name: logs

mountpath: /logs

env:

- name: logs_directories

value: "/var/lib/docker/containers /var/log/docker"

- name: logrotate_interval

value: "hourly"

- name: logrotate_olddir

value: "/logs"

volumes:

- hostpath:

path: /var/lib/docker/containers

name: containers

- hostpath:

path: /var/log/docker

name: varlog

- hostpath:

path: /var/log/containers/

name: logs

複製**

使用這個yaml檔案,可以直接在kubernetes中進行部署。

# kubectl create -f logrotate_ds.yaml

daemonset "logrotate" created

複製**

在示例的yaml檔案中,logrotate服務將按照定時(1小時)的對日誌進行回卷,回卷超過5個副本後則會對日誌進行清理。如果有需要,可以修改相應的引數,設定不同的回卷規則和清理規則。詳細的引數說明可以參考:github.com/blacklabelo…

###通過修改dockerd引數進行回卷和清理

由於kubernetes的日誌收集,底層是通過docker來實現。而docker提供了一定的日誌回卷和清理功能。可以通過在dockerd的啟動引數中,增加log-opts()引數實現對日誌的回卷和清理,其中max-size引數設定日誌乙個副本的最大值,max-file設定日誌的最大的副本數。超過這個副本數則會對日誌進行刪除。

具體的修改過程包括三個步驟: 1、建立/etc/dockerd/daemon.json

}複製**

引數說明: 設定單個容器日誌超過10m則進行回卷,回卷的副本數超過3個就進行清理。

2、修改dockerd 服務配置檔案

在 /etc/systemd/system/multi-user.target.wants/dockerd.serviced檔案中新增dockerd啟動引數--config-file=/etc/docker/daemon.json

3、重新啟動dockerd服務

systemctl daemon-reload

service dockerd restart

複製**

8 月最新基於 kubernetes 的應用編排實踐

5 種 docker 日誌最佳實踐

輕鬆搞定OKR設定難題

在設定okr之前,首先要做的就是將我們想要實現的目標全部列出來,再根據其對企業當前發展的重要性確定優先順序。然後排列其實現的順序。有了目標,接下來要做的就是確定乙個o。確定o往往會犯的錯誤就是對於目標的描述不夠明確,敷衍了事。比如上線一款新的產品,再比如完成一次宣傳活動,這樣的目標不需要用到okr,...

輕鬆搞定OKR設定難題

在設定okr之前,首先要做的就是將我們想要實現的目標全部列出來,再根據其對企業當前發展的重要性確定優先順序。然後排列其實現的順序。有了目標,接下來要做的就是確定乙個o。確定o往往會犯的錯誤就是對於目標的描述不夠明確,敷衍了事。比如上線一款新的產品,再比如完成一次宣傳活動,這樣的目標不需要用到okr,...

apache log 設定日誌例項

oglevel warn 錯誤日誌error log級別為禁告此級別為預設 logformat h l u t r s b i i v combined 組合日誌格式 combined log format h主機名,l遠端註冊名 u 遠端使用者 t 時間 英文格式 r 請求的第一行 s 狀態,b傳...