kubernetes(k8s)日志收集方案


kubernetes日志中心:

目的:

日志分析是我們系統中很重要的一部分,最基本的,我們可以根據日志信息來進行debug。

需求:

1、application log

2、kubernetes component logs (the component which in kube-system namespaces)

3、nginx-ingress controller logs 

調研:

日志收集我們需要從4個方面來講。

1、日志源——你的日志由什么輸出,通常在容器中,就是容器日志

2、流——你采用什么方式去傳輸這個日志,這里還涉及一個緩存的概念。

3、日志存儲——日志存在哪里(硬盤、ES、Clickhouse?)

4、可視化工具分析——(kibana、grafana)

 

從以上4個方向來分析。

日志源:不用說,在容器中,我們就是容器的日志,“/var/log/containers”中。我們只要能夠獲取到這個文件變化,就可以操控這個日志走向

流:這里我們采用fluent-bit來獲取,然后傳輸

日志存儲:我們這里采用開源Elasticsearch進行處理 (后面我會寫一些其他的工具收集)

可視化:Kibana

實施:

這里強烈推薦大家在k8s環境內使用helm。至於helm是什么,大家可以去官網參考。

 

我這里有一些配置好的helm,主要是對其進行了一修改,使其可以獲取到kube-system中的一些日志,因為kube-system中的日志是不會保存在/var/log/containers里的。

GitHub地址:

https://github.com/linbingdouzhe/helm-for-fluentd

https://github.com/linbingdouzhe/helm-for-fluent-bit

 

其中原理大概如下:

fluent-bit以daemonset的形式在每個node上讀取對應目錄的文件變化,而后發送給fluentd。

fluentd對數據進行緩存以及json處理操作,然后寫入ES

注意,這個fluentd的緩存功能很重要,這個是避免數據丟失的重要配置,默認64GB最大。這個值可以參考:

 

total_limit_size 75GB #這個值自定義,可大可小,一般建議要比buffer的實際空間要低。因為如果一旦磁盤寫滿,那么fluentd就會掛掉

  

還有一個重要參數,這個參數只在k8s中需要開啟,如果不開啟這三個配置,你的日志就會經常出現斷發送的情況。。。。很坑

#在output中      
reconnect_on_error true reload_on_failure true reload_connections false

  

 

基本配置以上這些。就可以發送日志了。

不過,如果每天的日志產生大於60GB的日志,就不建議使用這套架構,可以采用

fluent-bit - kafka - logstash 這套架構。

這個架構的好處在於日志可以緩存在kafka。然后通過logstash進行消費。

logstash的好處在於他可以檢測到es的狀態,如果es處於繁忙狀態,logstash就不會繼續往里面寫,而fluentd則不是,他會把es寫崩。直到es報錯“Data too large”

 

關於日志流這部分就寫完了,后面會寫es優化的一些配置


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM