prometheus使用cadvisor監控docker容器
1.cadvisor概述
一般公司會有很多docker主機,那么就需要對docker進行監控了,docker監控可以采用docker stats配合shell命令來取值做監控,但是無法傳遞給prometheus進行采集,zabbix監控docker又比較麻煩,因此就有了谷歌的cadvisor
cadvisor不僅可以搜集一臺機器上的所有運行的容器資訊,還提供基礎查詢界面的http介面,方便prometheus進行資料抓取
cadvisor可以對節點機器上的資源及容器進行實時監控和性能資料采集,包括CPU使用情況、記憶體使用情況、網路吞吐量及檔案系統使用情況,但是cadvisor有個缺陷,只能實時展現當前的監控資料,對于歷時資料不做保留,因此需要使cadvisor接入prometheus,由prometheus內置的tsdb資料庫進行存盤歷時資料
cadvisor利用Linux的cgroups獲取容器的資源使用情況,在k8s中集成,官方標配
cadvisor需要在每臺docker主機都要安裝
docker主要監控容器記憶體、CPU、磁盤、網卡
使用docker stats監控容器性能的命令
[root@192_168_81_220 docker]# docker stats --no-stream nervous_moser
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
e265e173ac98 nervous_moser 0.00% 5.605MiB / 972.6MiB 0.58% 2.42kB / 0B 27.3MB / 22.5kB 2
最終配合和grafana展示監控docker容器效果
可以在圖中清楚的看到每個容器的CPU、記憶體使用率以及每臺主機上運行容器的數量

2.環境準備
| IP | 主機名 | 服務 |
|---|---|---|
| 192.168.81.210 | prometheus-server | prometheus、grafana |
| 192.168.81.220 | 192_168_81_220 | docker、cadvisor |
| 192.168.81.230 | 192_168_81_230 | docker、cadvisor |
3.在docker服務器上部署docker
192.168.81.220/92.168.81.230服務器都需要操作
1.獲取鏡像源
wget -O /etc/yum.repos.d/docker-ce.repo https://download.docker.com/linux/centos/docker-ce.repo
sed -i 's#download.docker.com#mirrors.tuna.tsinghua.edu.cn/docker-ce#' /etc/yum.repos.d/docker-ce.repo
yum makecache fast
2.安裝docker
yum -y install docker-ce
systemctl start docker
systemctl enable docker
3.配置鏡像加速器
tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://zggyaen3.mirror.aliyuncs.com"]
}
EOF
4.啟動docker
systemctl restart docker
5.簡單運行一個容器
docker run -d nginx:latest
4.docker安裝cadvisor監控
4.1.安裝cadvisor
在docker主機都操作,192.168.81.220/92.168.81.230服務器都需要操作
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:rw \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8080:8080 \
--detach=true \
--name=cadvisor \
google/cadvisor:latest
注釋: --volume=/:/rootfs:ro #將/目錄掛載到容器的/rootfs,權限為讀
--volume=/var/run:/var/run:rw #將/var/run掛載到容器的/var/run目錄,權限為讀寫
其他的volume都是這個意思,ro為讀,rw為讀寫
--volume=/var/lib/docker/:/var/lib/docker:ro #這個是將宿主機的docker目錄掛載到容器,因為cadvisor需要監控所有容器,因此需要掛載
--publish=8080:8080 #開放公共埠
最終效果為,兩臺機器都啟動了cadvisor和nginx鏡像

4.2.訪問cadvisor查看監控資料
訪問http://宿主機的ip:8080j即可

4.3.查看某一個容器的監控資訊
點擊首頁/docker,跳轉進去后,可以看到subcontainers下面容器串列,下面顯示的都是容器id,可以用docker ps看到具體的容器

打開后即可看到具體的某個容器監控指標

也可以看到影像

4.4.cadvisor監控指標頁面
訪問http://宿主機的ip:8080/metrics即可

5.prometheus添加cadvisor監控
5.1.prometheus安裝
二進制安裝詳細看上一篇文章
docker安裝
[root@prometheus-server ~]# docker run -d -p9090:9090 -v /data/prom/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus:latest
5.1.修改prometheus組態檔
1.修改組態檔增加docker監控cadvisor
[root@prometheus-server ~]# vim /etc/prometheus/prometheus.yml
- job_name: "docker"
static_configs:
- targets: ['192.168.81.220:8080','192.168.81.230:8080']
2.重繪配置
[root@prometheus-server ~]# curl -X POST http://127.0.0.1:9090/-/reload
docker監控主機已經UP

查看監控項,關于container開頭的都是監控

6.prometheus+grafana實作docker容器的監控圖形展現
6.1.安裝grafana
[root@prometheus-server ~]# rpm -ivh grafana-6.3.2-1.x86_64.rpm
[root@prometheus-server ~]# systemctl start grafana-server
[root@prometheus-server ~]# systemctl enable grafana-server
訪問http://服務器地址:3000

6.1.添加prometheus資料源
點擊Add data source

選擇prometheus

填寫prometheus地址

6.2.匯入docker監控圖形模板
6.2.1.點擊+號—import

6.2.2.填寫監控模板id
在這里填寫上監控模板的id號,193號docker監控模板比較不錯

6.2.3.選擇prometheus源
填寫完id號之后,會自動找到對應的模板
選擇對應的prometheus源之后點擊import

6.3.查看圖形
選擇Docker monitoring

這個模板美中不足的是看不到具體一臺主機上的容器,而是把所有docker主機的容器全部都列在這里了

7.可以選docker主機的模板匯入
終于在grafana找到了一款可以選擇主機的docker監控模板
下載地址https://grafana.com/api/dashboards/8321/revisions/3/download
匯入后張這個顏值

8.最終效果

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/240483.html
標籤:其他
