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

Docker容器監控方案怎么選

147次閱讀
沒有評論

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

本篇文章給大家分享的是有關 Docker 容器監控方案怎么選,丸趣 TV 小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著丸趣 TV 小編一起來看看吧。

隨著線上服務的全面 docker 化,對 docker 容器的監控就很重要了。SA 的監控系統是物理機的監控,在一個物理機跑多個容器的情況下,我們是沒法從一個監控圖表里面區分各個容器的資源占用情況的。為了更好的監控容器運行情況,更重要的是為了后續的容器動態調度算法需要的大量運行時數據的搜集,經過調研后,基于 CAdvisor + InfluxDB + Grafana 搭建了這套容器監控系統。

1、容器監控方案選擇

在調研容器監控系統的時候,其實是有很多選擇的,比如 docker 自帶的 docker stats 命令,Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor 等。通過 docker stats 命令可以很方便的看到當前宿主機上所有容器的 CPU,內存以及網絡流量等數據。但是 docker stats 命令的缺點就是統計的只是當前宿主機的所有容器,而獲取的監控數據是實時的,沒有地方存儲,也沒有報警功能。

而 Scout(鏈接:https://scoutapp.com/)、Sysdig Cloud,Data Dog 雖然都提供了較完善的服務,但是它們都是托管的服務而且都收費,于是也不在考慮范圍之內。Sensu Monitoring Framework(鏈接:https://sensu.io/)集成度較高,也免費,但是部署過于復雜。最后,我們選擇了 CAdvisor 做容器監控工具。CAdvisor 谷歌出品,優點是開源產品,監控指標齊全,部署方便,而且有官方的 docker 鏡像。缺點是集成度不高,默認只在本地保存 2 分鐘數據。不過在調研之后發現可以加上 InfluxDB 存儲數據,對接 Grafana 展示圖表,比較便利地搭建好了容器監控系統,數據收集和圖表展示效果良好,對系統性能也幾乎沒有什么影響。

2、容器資源監控 -CAdvisor2.1 部署與運行

CAdvisor 是一個容器資源監控工具,包括容器的內存,CPU,網絡 IO,磁盤 IO 等監控,同時提供了一個 WEB 頁面用于查看容器的實時運行狀態。CAdvisor 默認存儲 2 分鐘的數據,而且只是針對單物理機。不過,CAdvisor 提供了很多數據集成接口,支持 InfluxDB,Redis,Kafka,Elasticsearch 等集成,可以加上對應配置將監控數據發往這些數據庫存儲起來。

由于 CAdvisor 已經容器化,部署和運行很簡單,執行如下命令即可:

運行之后,就可以在瀏覽器打開 http://ip:8080 查看宿主機的容器監控數據了。

2.2 集成 InfluxDB

如前面說到,CAdvisor 默認只在本機保存最近 2 分鐘的數據,為了持久化存儲數據和統一收集展示監控數據,需要將數據存儲到 InfluxDB 中。InfluxDB 是一個時序數據庫,專門用于存儲時序相關數據,很適合存儲 CAdvisor 的數據。而且,CAdvisor 本身已經提供了 InfluxDB 的集成方法,在啟動容器時指定配置即可。我們使用了管理容器來管理 CAdvisor,修改后的啟動配置如下。主要指定了存儲引擎為 InfluxDB,以及指定 InfluxDB 的 HTTP API 的地址(這里用到了自建 DNS 的域名 influxdb.service.consul 以避免暴露外部端口),還有對應的數據庫和用戶名密碼。

{    binds : [           /:/rootfs:ro ,           /var/run:/var/run:rw ,           /sys:/sys:ro ,           /home/docker/var/lib/docker/:/var/lib/docker:ro    ],     image : forum-cadvisor ,     labels : {        type : cadvisor    },     command : -docker_only=true -storage_driver=influxdb  -storage_driver_db=cadvisor  -storage_driver_host=influxdb.service.consul:8086  -storage_driver_user=testuser  -storage_driver_password=testpwd ,     tag : latest ,     hostname : cadvisor-{{lan_ip}} }

注意到我們使用了一個自己的 forum-cadvisor 鏡像來代替官方的 cadvisor 鏡像,這是為了修復 cadvisor 一些問題以及基于管理方便性的考慮。

2.3 CAdvisor 存在的問題 1)運行報錯問題

運行最新的 CAdvisor 容器的時候,發現容器有如下的錯誤日志:

這個問題是因為沒有安裝 findutils 工具導致的。

2)統計不到容器內存數據

Debian 默認沒有開啟 CGroup Memory 的支持,CAdvisor 默認情況下無法統計到容器內存數據,需要修改 GRUB 啟動參數,修改文件 /etc/default/grub,加入下面這行:

GRUB_CMDLINE_LINUX= cgroup_enable=memory

然后更新 grub2 重啟即可。

3)網絡流量監控數據錯誤問題

在 CAdvisor 上線一段時間后,順安發現容器的網絡數據跟實際情況不符,并查找資料后發現問題是因為 CAdvisor 默認只統計第一個網卡的流量,而在我們的容器中是有多個 overlay 網絡的,需要統計容器中所有的網卡流量。于是我修改了 CAdvisor 統計網絡流量部分的代碼并重新編譯了一個版本在線上使用,修改的代碼在這里。

最后,我們自定義的鏡像文件 forum-cadvisor.Dockerfile 是這樣的(src/cadvisor 是修改后重新編譯的 cadvisor 可執行文件):

2.4 CAdvisor 原理簡介

CAdvisor 運行時掛載了宿主機根目錄,docker 根目錄等多個目錄,由此可以從中讀取容器的運行時信息。docker 基礎技術有 Linux namespace,Control Group(CGroup),AUFS 等,其中 CGroup 用于系統資源限制和優先級控制的。

宿主機的 /sys/fs/cgroup/ 目錄下面存儲的就是 CGroup 的內容了,CGroup 包括多個子系統,如對塊設備的 blkio,cpu,內存,網絡 IO 等限制。Docker 在 CGroup 里面的各個子系統中創建了 docker 目錄,而 CAdvisor 運行時掛載了宿主機根目錄和 /sys 目錄,從而 CAdvisor 可以讀取到容器的資源使用記錄。

比如下面可以看到容器 b1f257 當前時刻的 CPU 的使用統計。CGroup 詳細介紹可以參見 DOCKER 基礎技術:LINUX CGROUP(鏈接 https://coolshell.cn/articles/17049.html)

# cat /sys/fs/cgroup/cpu/docker/b1f25723c5c3a17df5026cb60e1d1e1600feb293911362328bd17f671802dd31/cpuacct.statuser 95191system 5028

而容器網絡流量 CAdvisor 是從 /proc/PID/net/dev 中讀取的,如上面的容器 b1f257 進程在宿主機的 PID 為 6748,可以看到容器所有網卡的接收和發送流量以及錯誤數等。CAdvisor 定期讀取對應目錄下面的數據并定期發送到指定的存儲引擎存儲,而本地會默認存儲最近 2 分鐘的數據并提供 UI 界面查看。

# cat /proc/6748/net/devInter-|   Receive                                                |  Transmit face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed  eth0: 6266314     512    0    0    0     0          0         0    22787     292    0    0    0     0       0          0  eth2:       0       0    0    0    0     0          0         0        0       0    0    0    0     0       0          0    lo: 5926805    5601    0    0    0     0          0         0  5926805    5601    0    0    0     0       0          0

3、容器監控數據存儲 -InfluxDB

InfluxDB(鏈接:https://docs.influxdata.com/influxdb/v1.3/)是一個開源的分布式時序數據庫,使用 GO 語言開發。特別適合用于時序類型數據存儲,CAdvisor 搜集的容器監控數據用 InfluxDB 存儲就很合適,而且 CAdvisor 本身就提供了 InfluxDB 的支持,集成起來非常方便。

由于線上服務都 docker 化了,所以 InfluxDB 我們也是選擇用容器來跑,通過容器管理系統統一管理。容器運行時的核心配置如下,主要掛載了數據庫目錄,以及配置了 consul 的服務注冊,這樣,CAdvisor 由于和 InfluxDB 處于同一個 overlay 子網中,不需要再開放端口給外部訪問,CAdvisor 直接通過 influxdb.service.consul:8086 即可連接到 InfluxDB。

為了存儲 CAdvisor 的數據,需要預先創建好數據庫并配置用戶名密碼以及相關權限。InfluxDB 提供了一套 influx 的 CLI,跟 mysql client 很相似。另外,InfluxDB 的數據庫操作語言 InfluxQL 跟 SQL 語法也基本一致。進入 InfluxDB 容器,運行下面命令創建數據庫和用戶密碼并授權。

# influxConnected to http://localhost:8086 version 1.3.5InfluxDB shell version: 1.3.5 create database cadvisor  ## 創建數據庫 cadvisor show databasesname: databasesname—-_internalcadvisor CREATE USER testuser WITH PASSWORD testpwd ## 創建用戶和設置密碼 GRANT ALL PRIVILEGES ON cadvisor TO testuser ## 授權數據庫給指定用戶 CREATE RETENTION POLICY cadvisor_retention ON cadvisor DURATION 30d REPLICATION 1 DEFAULT ## 創建默認的數據保留策略,設置保存時間 30 天,副本為 1

配置成功后,可以看到 CAdvisor 會通過 InfluxDB 的 HTTP API 自動創建好數據表,并將數據發送到 InfluxDB 存儲起來。

3.2 InfluxDB 重要概念

influxdb 有一些重要概念:database,timestamp,field key,field value,field set,tag key,tag value,tag set,measurement,retention policy,series,point,下面簡要說明一下:database:數據庫,如之前創建的數據庫 cadvisor。InfluxDB 不是 CRUD 數據庫,更像是一個 CR-ud 數據庫,它優先考慮的是增加和讀取數據而不是更新刪除數據的性能。timestamp:時間戳,因為 InfluxDB 是時序數據庫,它的數據里面都有一列名為 time 的列,存儲記錄生成時間。如 rx_bytes 中的 time 列,存儲的就是時間戳。fields: 包括 field key,field value 和 field set 幾個概念。field key 是字段名,在 rx_bytes 表中,字段名為 value。field value 是字段值,如 17858781633,1359398 等。而 field set 是字段集合,由 field key 和 field value 構成,如 rx_bytes 中的字段集合如下:

value = 17858781633value

tags:包括 tag key,tag value,tag set 幾個概念。tag key 是標簽名,在 rx_bytes 表中 container_name,game,machine,namespace,type 都是標簽。tag value 就是標簽的值了。tag set 就是標簽集合,由 tag key 和 tag value 構成。InfluxDB 中標簽是可選的,不過標簽是有索引的。如果查詢中經常用的字段,建議設置為標簽而不是字段。標簽相當于傳統數據庫中有索引的列。retention policy: 數據保留策略,cadvisor 的保留策略為 cadvisor_retention,存儲 30 天,副本為 1。一個數據庫可以有多個保留策略。measurement:類似傳統數據看的表,是字段,標簽以及 time 列的集合。series:共享同一個 retention policy,measurement 以及 tag set 的數據集合。

3.3 InfluxDB 的特色功能

InfluxDB 作為時序數據庫,相比傳統數據庫它有很多特色功能,比如獨有的一些特色函數和連續查詢功能。關于 InfluxDB 的更多詳細內容可以參見官方文檔。

特色函數:有一些聚合類函數如 FILL()用于填充數據, INTEGRAL()計算字段所覆蓋的曲面面積,SPREAD()計算表中最大與最小值的差值,STDDEV()計算字段標準差,MEAN()計算平均值, MEDIAN()計算中位數,SAMPLE()函數用于隨機取樣以及 DERIVATIVE()計算數據變化比等。

連續查詢:InfluxDB 獨有的連續查詢功能可以定期的縮小取樣,就原數據庫的數據縮小取樣后存儲到指定的新的數據庫或者新的數據表中,在歷史數據統計整理時特別有用。

4、容器監控數據可視化 -Grafana

通過 CAdvisor 搜集容器的監控數據,存儲到 InfluxDB 中,接下來就剩數據可視化的問題了。畢竟,一個可視化的圖表可以很方便快速的看到容器的一些問題。圖表展示我選擇的是 Grafana。Grafana 是一個開源的數據監控分析可視化平臺,支持多種數據源配置 (支持的數據源包括 InfluxDB,MySQL,Elasticsearch,OpenTSDB,Graphite 等) 和豐富的插件及模板功能,支持圖表權限控制和報警。Grafana 同樣也是以容器方式運行,容器啟動配置如下,主要是掛載了 grafana 的數據和日志目錄,設置了管理員的密碼,并開放了 8888 端口作為 grafana 的訪問端口:

啟動之后就可以在 http://IP:8888/ 頁面去配置數據源了,一個示例如下:

配置完數據源,就可以添加 Panel 來實現數據可視化了。Grafana 的圖表功能十分強大,在配置數據查詢語句的時候也是十分智能,會對數據源,數據表,數據字段自動提示,而且對 InfluxDB 的所有函數都有分類可以直接選取配置。需要注意的一點就是在配置字節類數據 (比如網卡接收流量 rx_bytes 和 內存使用量 memory_usage) 的時候單位要選 data(IEC)這個類別。

使用 CAdvisor+InfluxDB+Grafana 構建容器資源監控系統,是可行而且是較為簡便的方式。這三個組件全部以容器的方式運行,也符合我們線上服務皆為容器的理念。目前已經全面上線該監控系統,運行正常,數據可視化效果良好。除了用于可視化監控之外,這些數據后續還會用于系統異常檢測算法和容器智能調度算法中。

以上就是 Docker 容器監控方案怎么選,丸趣 TV 小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注丸趣 TV 行業資訊頻道。

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計6530字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 沙河市| 虹口区| 鹤庆县| 凌海市| 黔南| 汪清县| 杭锦旗| 汽车| 毕节市| 大余县| 东乡| 潮州市| 临武县| 辛集市| 乌鲁木齐县| 锡林郭勒盟| 延安市| 鸡东县| 天峻县| 奈曼旗| 乌兰浩特市| 宣威市| 固原市| 古浪县| 壶关县| 莆田市| 南川市| 麻江县| 五家渠市| 夏河县| 永济市| 农安县| 天台县| 玉龙| 邻水| 武穴市| 芜湖市| 谢通门县| 彝良县| 砀山县| 蒙自县|