12c集群日志位置_Kubernetes(k8s)那些套路之日志收集

56a7a99976ea6eaea79815065933dd24.png

準備

關于容器日志

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,可參考官網 Configure logging drivers 。但是上述配置的日志收集也是通過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基底鏡像構建應用鏡像形成統一日志收集方案。

關于k8s日志

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

  1. 應用(Pod)級別
  2. 節點級別
  3. 集群級別
  • 應用(Pod)級別

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

  • 節點級別

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

60fb2883a953f47869df310736645b0d.png
  • 集群級別

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

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

30b26ab58c607fc5a8a96b404e91971b.png
  • 使用sidecar container作為容器日志代理,也就是在pod中跟隨應用容器起一個日志處理容器,有兩種形式:

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

000759bbea20911e1c53bd7dd8aa6fa8.png

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

08bf796924be4c22bc4411fa15c230cd.png
  • 應用容器中直接將日志推到存儲后端,這種方式就比較簡單了,直接在應用里面將日志內容發送到日志收集服務后端。

2f97d8c797fed9b95fdd701016e18d22.png

日志架構

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

816baf51cbff7429df9efcbd54e30319.png

解釋如下:

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

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

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

付諸實踐

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

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

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

/var/log/xxxx/xxxxx.log {su www-data www-datamissingoknotifemptysize 1Gcopytruncate}

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

總結

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

參考文獻

  1. https://kubernetes.io/docs/concepts/cluster-administration/logging/
  2. https://support.rackspace.com/how-to/understanding-logrotate-utility/
  3. https://github.com/elastic/beats/tree/master/filebeat
  4. http://skarnet.org/software/s6/

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/530054.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/530054.shtml
英文地址,請注明出處:http://en.pswp.cn/news/530054.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數字攝像頭測試軟件,圖像測量軟件(Camera Measure)

Camera Measure是一款簡單易用的數字圖像測量工具&#xff0c;該軟件可用于顯微鏡圖像測量、測繪等專業領域或者普通用戶日常的各種測量&#xff0c;可以播放Windows相機并拍照或錄制視頻&#xff0c;打開圖片或視頻文件&#xff0c;并在畫面中進行實時的高性能圖像測量。軟件功…

過濾特征_機器學習深度研究:特征選擇中幾個重要的統計學概念

機器學習深度研究&#xff1a;特征選擇過濾法中幾個重要的統計學概念————卡方檢驗、方差分析、相關系數、p值問題引出當我們拿到數據并對其進行了數據預處理&#xff0c;但還不能直接拿去訓練模型&#xff0c;還需要選擇有意義的特征&#xff08;即特征選擇&#xff09;&am…

win10計算機優化技巧,讓Win10系統運行更流暢的優化技巧

雖然Win10系統對配置要求不高&#xff0c;在普通條件電腦的環境中也能流暢運行。但是用戶總不會介意進一步優化Win10&#xff0c;讓Win10在流暢的基礎上變得更流暢一些。本文就來介紹一下讓Win10系統更流暢的優化技巧。Win10優化技巧1、用360優化win10后開不了機的問題原因是禁…

c include 多層目錄_python+C、C++混合編程的應用

TIOBE每個月都會新鮮出爐一份流行編程語言排行榜&#xff0c;這里會列出最流行的20種語言。排序說明不了語言的好壞&#xff0c;反應的不過是某個軟件開發領域的熱門程度。語言的發展不是越來越common&#xff0c;而是越來越專注領域。有的語言專注于簡單高效&#xff0c;比如p…

校友會2019中國大學計算機,校友會2019中國計算機類一流專業排名,清華大學排名第一...

原標題&#xff1a;校友會2019中國計算機類一流專業排名&#xff0c;清華大學排名第一中國哪些高校的計算機類本科專業躋身2019世界一流專業、中國頂尖專業和中國一流專業行列&#xff1f;哪些計算機類本科專業是2019年中國高考最優秀考生的最佳選擇&#xff1f;為了給2019年全…

查詢結果取交集_Elasticsearch 查詢過程中的 prefilter 原理

大家都知道在對索引執行查詢的時候&#xff0c;需要在所有的分片上執行查詢&#xff0c;因為無法知道被查詢的關鍵詞位于哪個分片&#xff0c;對于全文查詢來說誠然如此&#xff0c;然而對于時序型的索引&#xff0c;當你從 my_index-* 中執行 now-3d 的范圍查詢時&#xff0c;…

計算機專業人畢業設計外文翻譯,計算機專業畢業設計外文翻譯.doc

《計算機專業畢業設計外文翻譯.doc》由會員分享&#xff0c;提供在線免費全文閱讀可下載&#xff0c;此文檔格式為doc&#xff0c;更多相關《計算機專業畢業設計外文翻譯.doc》文檔請在天天文庫搜索。1、&#xfeff;近幾年來&#xff0c;隨著計算機的普及和建筑電子產業的發展…

語音識別插件_AnsweringMachine XS: 越獄理由之二,iPhone 電話語音答錄機

Apps & Tweaks| Jailbreak Guide| iDevicesTweak&#xff1a;AnsweringMachine XSVersion&#xff1a;XSRepo&#xff1a;http://limneos.net/iOS Support&#xff1a;12-13Price&#xff1a;3.99iOS 開發人員 Elias Limneos 開發了電話輔助系列插件&#xff0c;AnsweringM…

怎么在計算機里找到CF里保存的視頻,電腦怎么查看穿越火線錄制保存視頻?操作方法...

在Win10電腦上玩穿越火線&#xff0c;遇到精彩時刻我們都會錄制下&#xff0c;好跟朋友分享&#xff0c;但是在Win10電腦上穿越火線錄制保存之后的視頻&#xff0c;在哪看呢?有很多用戶都不知道怎么在Win10電腦查看這個穿越火線錄制保存的視頻&#xff0c;這個的話&#xff0c…

ironpython this_IronPython sys._getframe not found

問題Im currently building a program in C# which will call functions in provided python script files.Some of these script files calls _getframe() in sys, which results in the error:System.MissingMemberException: module object has no attribute_getframe(Since…

計算機賬務處理流程圖,賬務處理流程圖

手工業務流程圖賬務處理流程主要有 5 種形式&#xff1a;記賬憑證核算形式、科目匯總表核算形式、匯總記賬憑證核算形式、日記總賬核算形式、和多欄式日記賬核算形式。不同的賬務處理流程其差別主要體現在登記總賬的方法和依據不同&#xff0c;其中科目匯總表核算形式最為常見&…

css滑動門的用處,CSS滑動門是什么?有什么用處?[web前端培訓]

在制作網頁導航時&#xff0c;經常會碰到導航欄長度不同&#xff0c;但背景相同的情形。此時如果通過拉伸背景圖的方式來適應文本內容&#xff0c;就會造成背景圖變形。在制作網頁時&#xff0c;為了使各種特殊形狀的背景能夠自適應元素中的文本內容&#xff0c;并且不會變形&a…

vue 父鏈和子組件索引_vuejs填坑-父子組件之間的訪問

有時候我們需要父組件訪問子組件&#xff0c;子組件訪問父組件&#xff0c;或者是子組件訪問根組件。1. 父組件訪問子組件 $children或$ref$children 返回所有子組件的實例&#xff0c;是一個數組顯示兩個組件的信息{{ msg }}{{ msg }}Vue.component(child1, {template: #child…

python多線程爬取多個網頁_python多線程爬取網頁

#-*- encoding:utf8 -*-‘‘‘Created on 2018年12月25日author: Administrator‘‘‘from multiprocessing.dummy import Pool as plimport csvimport requestsfrom lxml import etreedef spider(url):header {"User-Agent":"Mozilla/5.0 (Windows NT 6.1; WO…

layui 分頁ajax,實現Ajax異步的layui分頁

頁面代碼:人才推薦姓名學歷技能經驗住址聯系方式 ${res}${data}于千萬年之中時間的無涯的荒野里…時間的無涯的荒野里…--%>js代碼//加載完成$(function(){var sherchkey${positioninfo.name};savePosition();//保存修改方法getPeopleList(1,5,sherchkey);//獲取人才列表// …

Gen系列服務器,新計算、新體驗 | 新華三全新HPE Gen10系列服務器響徹“云”端

數字經濟時代的數據中心正在加速向云計算融合&#xff0c;用戶將面臨傳統架構與云架構并存的混合IT模式。如何既擁有專有數據中心對數據完全可控以及對關鍵業務充分優化的優勢&#xff0c;又能擁有云計算的靈活彈性&#xff1f;如何有效利舊并滿足混合IT架構的需求&#xff1f;…

python 異常處理 變量_Python基礎入門:從變量到異常處理

一 . 條件語句1.if-else 語句當if語句后的條件結果表達式為假&#xff0c;則執行else 語句后的代碼。如若輸入數字非666&#xff0c;則會輸出“猜錯了&#xff0c;小姐姐現在心里想的為666“2.if 語句支持嵌套hi6 hi>2 執行 if hi>7 6<7 所以無輸出hi1 hi<2 執行 p…

web系統四層結構中服務器端,基于.NET平臺構建四層B/S結構的動態網站

摘要&#xff1a;Web是基于Internet技術的一種應用層服務,具有后臺數據庫支持的n層B&#xff0f;S結構已經成為動態Web應用的主流。雖然動態網站開發工作的主要是進行服務器端應用程序的開發,但是B&#xff0f;S結構動態Web的應用要涉及瀏覽器、Web服務器、服務器端應用程序、數…

收藏功能_微軟Edge獲得了新的收藏夾菜單、PDF功能等

作為其今年早些時候概述的戰略的一部分&#xff0c;微軟Edge現在正在向所有Windows 10 PC推出。與經典的Edge不同&#xff0c;Chromium Edge與任何特定的Windows更新無關&#xff0c;但微軟又開始為該瀏覽器進行了一系列令人興奮的改進。新的Edge基于Chromium&#xff0c;它還帶…

服務器LIMIT是什么信號,Postfix添加milter-limit配置方案

[安裝環境]操作系統&#xff1a;CentOS 5.6MAT&#xff1a;POSTFIX2.8.4安裝之前必須保證POSTFIX能正常收發信如果已經安裝過Berkeley Db3以上版本可以不安裝新的DB(但是注意引入db.so)[安裝步驟]1、milter-limit-0.14.tar.gz及libsnert-1.71.6.tar.gz包的獲取方法需要創建一個…