久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Docker數據采集的原理是什么

177次閱讀
沒有評論

共計 2658 個字符,預計需要花費 7 分鐘才能閱讀完成。

本篇內容主要講解“Docker 數據采集的原理是什么”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓丸趣 TV 小編來帶大家學習“Docker 數據采集的原理是什么”吧!

監控目的

減少宕機時間

擴展和性能管理

資源計劃

識別異常事件

故障排除、分析

為什么需要監控我們的服務?其中有一些顯而易見的原因,比如需要監控工具來提醒服務故障,比如通過監控服務的負載來決定擴容或縮容。如果機器普遍負載不高,則可以考慮縮減一下機器規模,如果數據庫連接經常維持在一個高位水平,則可以考慮一下是否可以進行拆庫處理,優化一下架構。

##Docker 監控面臨的挑戰

Docker 特點

像 host 但不是 host

量大

生命周期短 監控盲點(斷層)

微服務 集群

全方位

Host(VM)+ Services + Containers + Apps

容器為我們的開發和運維帶來了更多的方向和可能性,我們也需要一種現代的監控方案來應對這種變化。

隨著不可變基礎設施概念的普及,云原生應用的興起,云計算組件已經越來越像搭建玩具的積木塊。很多基礎設施生命周期變短,不光容器如此,云主機、VM 也是。

在云計算出現之前,一臺機器可能使用 3、5 年甚至更長都不需要重裝,主機名也不會變,而現在,可能升級一個版本,就要重建一個云主機或重新啟動一個容器。監控對象動態變化,而且非常頻繁。即使全部實現自動化,也會在負載和復雜度方面帶來不利影響。

監控還有助于進行內部統制,尤其是對安全比較敏感的行業,比如證券、銀行等。比如服務器受到攻擊時,我們需要分析事件,找到根本原因,識別類似攻擊,發現未知的被攻擊系統,甚至完成取證等工作。

集群的出現,使應用的拓撲結構也變得復雜,不同應用的指標和日志格式也不統一,再加上要考慮應對多租戶的問題,這些都給監控帶來了新挑戰。

傳統的監控內包括對主機、網絡和應用的監控,但是 Docker 出現之后,容器這一層很容易被忽略,成為三不管地區,即監控的盲點。

有人說,容器不就是個普通的 OS 么?裝個 Zabbix 的探針不就行了么?Docker host 和 Docker 容器都要裝 Zabbix 探針……其實問題很多。

除了容器內部看到的 cpu 內存情況不準之外,而且容器生命周期短,重啟之后 host 名,ip 地址都會變,所以最好在 Docker host 上安裝 Zabbix agent。

如果每個容器都像 OS 那樣監控,則 metric 數量將會非常巨大,而且這些數據很可能幾分鐘之后就無效率了(容器已經停止)。容器生命周期短暫,一旦容器結束運行,之前收集的數據將不再有任何意義。

主要的解決方式就是以 App 或者 Service 為單位進行監控(通過 Tag 等方式)。

##Docker 監控技術基礎

docker stats

Remote API

偽文件系統

我們可以通過 docker stats 命令或者 Remote API 以及 Linux 的偽文件系統來獲取容器的性能指標。

使用 API 的話需要注意一下,那就是不要給 Docker daemon 帶來性能負擔。如果你一臺主機有 200 個容器,如果非常頻繁的采集系統性能可能會大量占據 CPU 時間。

最好的方式應該就是使用偽文件系統。如果你只是想通過 shell 來采集性能數據,則 docker stats 可能是最簡單的方式了。

docker stats 命令

該命令默認以流式方式輸出,如果想打印出最新的數據并立即退出,可以使用 no-stream=true 參數。

偽文件系統

CPU、內存、磁盤

網絡

文件位置大概在(跟系統有關,這是 Systemd 的例子):

Docker 各個版本對這三種方式的支持程度不同,取得 metric 的方式和詳細程度也不同,其中網絡 metric 是在 1.6.1 之后才能從偽文件系統得到。

Memory

內存的很多性能指標都來自于 memory.stat 文件:

前面的不帶 total 的指標,表示的是該 cgroup 中的 process 所使用的、不包括子 cgroup 在內的內存量,而 total 開頭的指標則包含了這些進程使用的包括子 cgroup 數據。這里我們看到的數據都是一樣的,由于這里并沒有子 cgroup。

兩個比較重要的指標:

RSS:resident set size

進程的所有數據堆、棧和 memory map 等。rss 可以進一步分類為 active 和 inactive(activeanon and inactiveanon)。在內存不夠需要 swap 一部分到磁盤的時候,會選擇 inactive 的 rss 進行 swap。

cache memory

緩存到內存中的硬盤文件的大小。比如你讀寫文件的時候,或者使用 mapped file 的時候,這個內存都會增加。這類內存也可以再細分為 active 和 inactive 的 cache,即 activefile 和 inactivefile。如果系統需要更多內存,則 inactive 的 cache 會被優先重用。

CPU

cpuacct.stat 文件

docker.cpu.system

docker.cpu.user

但是比較遺憾,Docker 不會報告 nice,idle 和 iowait 等事件。

System 也叫 kernel 時間,主要是系統調用所耗費的部分,而 user 則指自己程序的耗費 CPU,如果 User 時間高,則需要好好檢查下自己的程序是否有問題,可能需要進行優化。

Blkio

優先從 CFQ(Completely Fair Queuing 完全公平的排隊)拿數據,拿不到從這兩個文件拿:· blkio.throttle.ioservicebytes,讀寫字節數 · blkio.throttle.io_serviced,讀寫次數

Throttle 這個單純可能有誤導,實際這些都不是限制值,而是實際值。每個文件的第一個字段是 major:minor 這樣格式的 device ID。

網絡數據

iptables

偽文件系統

網絡設備接口

Virtual Ethernet

針網絡的監控要精確到接口級別,即網卡級別。每個容器在 host 上都有一個對應的 virtual Ethernet,我們可以從這個設備獲得 tx 和 rx 信息。

不過找到容器在主機上對應的虛擬網卡比較麻煩。這時候可以在宿主機上通過 ip netns 命令從容器內部取得網絡數據。

為了在容器所在網絡命名空間中執行 ip netns 命令,我們首先需要找到這個容器進程的 PID。

或者:

實際上 Docker 的實現也是從偽文件系統中讀取網絡 metric 的:

到此,相信大家對“Docker 數據采集的原理是什么”有了更深的了解,不妨來實際操作一番吧!這里是丸趣 TV 網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-08-16發表,共計2658字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 伊川县| 延边| 阿拉尔市| 澄城县| 淮安市| 弥勒县| 营山县| 桃江县| 武邑县| 望江县| 沙田区| 平原县| 丹寨县| 宜阳县| 融水| 乌拉特后旗| 盘山县| 无锡市| 青田县| 伽师县| 新密市| 宁都县| 泸溪县| 郯城县| 汤阴县| 静宁县| 广元市| 思南县| 广饶县| 陈巴尔虎旗| 抚顺市| 延川县| 阿拉善盟| 彰化市| 崇阳县| 华池县| 镇原县| 琼中| 和田县| 宣恩县| 兴安盟|