監(jiān)控,這一個(gè)詞對(duì)于我們開(kāi)發(fā)人員已經(jīng)習(xí)以為常,我們通過(guò)對(duì)于內(nèi)存、IO、CPU等性能的監(jiān)控去判斷當(dāng)前運(yùn)行狀態(tài)的情況,容器作為一個(gè)已經(jīng)打包好的虛擬環(huán)境亦是如此,特別是多個(gè)容器運(yùn)行,需要收集docker各容器的運(yùn)行狀態(tài)和運(yùn)行信息,本章將進(jìn)行容器監(jiān)控,第三方容器監(jiān)控來(lái)進(jìn)行講解。
一、Docker命令監(jiān)控
我們先去運(yùn)行幾個(gè)容器
docker run -d -p 80 --name ceshi-1-httpd httpd
docker run -d -it --name ceshi-2-busybox busybox
docker run -d -it --name ceshi-3-centos centos
命令 | 解釋 |
---|---|
ps | 查看容器狀態(tài) |
container ls | 查看容器狀態(tài) |
top 【容器ID】 | 查看容器內(nèi)進(jìn)程 |
stats | 查看容器各項(xiàng)資源消耗情況 |
像有些命令我們已經(jīng)非常常見(jiàn)了,Docker所自帶的容器指令可以實(shí)時(shí)的去捕捉信息,但是我們也會(huì)存在一些問(wèn)題,數(shù)缺形時(shí)少直觀,無(wú)法反應(yīng)所占用的趨勢(shì),為此,我們引入第三方監(jiān)控軟件。
二、Sysdig
2.1介紹
Sysdig 是一款命令行監(jiān)控工具,因其輕量級(jí)的特點(diǎn)深受廣大用戶的喜愛(ài)。Svsdig 就像放大鏡,使用戶可以更清晰地看到宿主機(jī)與容器的各項(xiàng)行為。它相當(dāng)干多種 Linux 監(jiān)控工具的合集。同時(shí)docker上為我們提供了他的容器鏡像!
docker run -it --rm --name sysdig --privileged=true \
--volume=/var/run/docker.sock:/host/var/run/docker.sock \
--volume=/dev:/host/dev \
--volume=/proc:/host/proc:ro \
--volume=/boot:/host/boot:ro \
--volume=/lib/modules:/host/lib/modules:ro \
--volume=/usr:/host/usr:ro sysdig/sysdig
#--privileged=true:賦予特殊權(quán)限;
其實(shí)看到這里,我們會(huì)有一個(gè)疑問(wèn),他作為一個(gè)容器,他怎么去獲取我們的容器的信息的,我們注意到這個(gè)命令**/var/run/docker.sock**我們現(xiàn)在來(lái)詳細(xì)參看下命令,我們?cè)谇懊娴膶W(xué)習(xí)中,已經(jīng)知道我們docker是由client和server組成,我們輸入命令實(shí)際上是通過(guò)客戶端將請(qǐng)求發(fā)送到同一臺(tái)電腦上的Doceker Daemon服務(wù),由Docker Daemon返回信息,客戶端收到信息后展示在控制臺(tái)上。我們?nèi)タ碊ocker Daemon的信息
我們?cè)囍鴣?lái)監(jiān)聽(tīng)一下
curl --unix-socket /var/run/docker.sock http://localhost/events
docker run -it --rm nginx sh
現(xiàn)在,我們就可以很清楚的知道,Sysdig通過(guò)對(duì)于/var/run/docker.sock數(shù)據(jù)卷的共享,可以來(lái)獲取我們?nèi)萜鞯男畔ⅰ?/p>
我們接著往下走,等到我們上面命令執(zhí)行完輸入csysdig(退出的話ctrl+P+Q)
csysdig
2.2 基本操作
2.2.1 切換視圖
點(diǎn)擊我們下面的views
界面左邊列出了sysdig支持的View,一共30多項(xiàng),涵蓋了操作系統(tǒng)的各個(gè)方面因?yàn)檫@里主要是討論容器監(jiān)控
所以我們將光標(biāo)移到Containers這一項(xiàng),界面右邊立即顯示出此View的功能介紹,雙擊可以進(jìn)入視圖
2.2.2 查看標(biāo)簽含義
點(diǎn)擊legend
2.2.3 排序
雙擊頭部
2.2.4 查看內(nèi)部進(jìn)程
雙擊容器進(jìn)入
2.2.5 查找
2.2.6 暫停
2.2.7 上一級(jí)
退格
2.2.8 退出
按住q
三、Weave Scope
3.1介紹
Weave Scope的最大特點(diǎn)是會(huì)自動(dòng)生成一張Docker容器地圖,能夠直觀地理解、監(jiān)控和控制容器。
#下載scope命令腳本文件并賦予x執(zhí)行權(quán)限:
curl -L git.io/scope -o /usr/local/bin/scope
【真的太慢了,百度網(wǎng)盤(pán)都比他快】
鏈接:https://pan.baidu.com/s/1HWePWMZBkhkyYVlrqHY2Rw?pwd=3wva
提取碼:3wva
--來(lái)自百度網(wǎng)盤(pán)超級(jí)會(huì)員V4的分享
|
————網(wǎng)盤(pán)下的,這樣操作
cp 你放的位置 /usr/local/bin/scope
#加入權(quán)限
chmod a+x /usr/local/bin/scope
#以容器的方式啟動(dòng)Weave Scope
scope launch
#授權(quán)端口
apt install firewalld
firewall-cmd --add-port=4040/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-all
3.2基本操作
3.2.1 顯示容器
3.2.2 選擇容器
單擊小圖標(biāo),同時(shí)會(huì)將容器信息進(jìn)行顯示
3.2.3 按照CPU使用情況排序
3.2.4 控制容器
attach到容器啟動(dòng)進(jìn)程,相當(dāng)于執(zhí)行docker container attach
打開(kāi)shell,相當(dāng)于執(zhí)行docker container exec
重啟容器,相當(dāng)于執(zhí)行docker container restart
暫停容器,相當(dāng)于執(zhí)行docker container pause
關(guān)閉容器,相當(dāng)于執(zhí)行docker container stop
3.2.5 搜索容器
3. 兩臺(tái)主機(jī)監(jiān)控
名稱(chēng) | IP地址 |
---|---|
小唐A | 192.168.2.98 |
鄭崽B | 192.168.2.108 |
因?yàn)樾√频囊呀?jīng)裝好了,所以直接傳到鄭崽的目錄就好
username<登錄用戶名你服務(wù)器的名字【就是你直接打開(kāi)控制臺(tái)的名字】>
serverip<客戶端ip(ip addr查看)> 192.168.2.108
scp -r -p <本機(jī)地址> username@serverip:<要傳的地址>
scp -r -p /usr/local/bin/scope root-u@192.168.2.108:/usr/local/bin/scope
【鄭崽B】:chmod 777 /usr/local/bin
-------------等待小唐傳輸-------------
【小唐A】:scp -r -p /usr/local/bin/scope root-u@192.168.2.108:/usr/local/bin/scope
-------------傳輸完畢-----------------
【鄭崽B】:ls /usr/local/bin (檢查一下)
【鄭崽B】:chmod +x /usr/local/bin/scope
【鄭崽B】:scope launch 192.168.2.108 192.168.2.98
【鄭崽B】:docker run -d -it --name ceshi-4-centos centos
各自的ip在前,其他主機(jī)的在后
【小唐A】:scope launch 192.168.2.98 192.168.2.108
四、cAdvisor
4.1介紹
cAdvisor是google開(kāi)發(fā)的容器監(jiān)控工具,我們一起來(lái)看看吧
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
如果出現(xiàn)
docker: Error response from daemon: driver failed programming external connectivity on endpoint cadvisor (dbd62fd04c955df34e34aa72b78de70f21019a08da5bb1a06da55c4a1fad228a): (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8090 -j DNAT --to-destination 172.17.0.2:8090 ! -i docker0: iptables: No chain/target/match by that name.
【停止再重啟docker】
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
systemctl restart docker
4.2 基本操作
4.2.1查看容器
4.2.1查看單個(gè)容器狀態(tài)
五、Prometheus
5.1介紹
Prometheus是一個(gè)非常優(yōu)秀的監(jiān)控工具。準(zhǔn)確地說(shuō),應(yīng)該是監(jiān)控方案Prometheus提供了監(jiān)控?cái)?shù)據(jù)搜集、存儲(chǔ)、處理、可視化和告警一套完整的解決方案。我們先來(lái)看看他的架構(gòu),這個(gè)真的是這篇文章中最硬核的東西了
1.Prometheus Server ------服務(wù)端 —處理,儲(chǔ)存數(shù)據(jù)
Prometheus Server負(fù)責(zé)從Exporter拉取和存儲(chǔ)監(jiān)控?cái)?shù)據(jù),并提供一套靈活的查詢語(yǔ)言 (PromQL) 供用戶使用。
2. Exporter-----客戶端 —采集數(shù)據(jù)
Exporter負(fù)責(zé)收集目標(biāo)對(duì)象 (host、container等)的性能數(shù)據(jù),并通過(guò)HTTP接口供Prometheus Server獲取。
3.可視化組件
監(jiān)控?cái)?shù)據(jù)的可視化展現(xiàn)對(duì)于一個(gè)監(jiān)控方案至關(guān)重要,以前Prometheus自己開(kāi)發(fā)了一套>>工具,不過(guò)后來(lái)廢棄了,因?yàn)殚_(kāi)源社區(qū)出現(xiàn)了更為優(yōu)秀的產(chǎn)品Grafana。Grafana能夠與Prometheus無(wú)縫集成,提供完美的數(shù)據(jù)展示能力。
4.Alertmanager—告警方式—實(shí)現(xiàn)告警
用戶可以定義基于監(jiān)控?cái)?shù)據(jù)的告警規(guī)則,規(guī)則會(huì)觸發(fā)告警。一旦Alertmanager收到告警,會(huì)通過(guò)預(yù)定義的方式發(fā)出告警通知。支持的方式包括Email.PagerDuty、Webhook等
工作流程
- Prometheus server 定期從配置好的 jobs 或者 exporters 中拉 metrics,或者接收來(lái)自 Pushgateway 發(fā)過(guò)來(lái)的 metrics,或者從其他的 Prometheus server 中拉 metrics。
- Prometheus server 在本地存儲(chǔ)收集到的 metrics,并運(yùn)行已定義好的 alert.rules,記錄新的時(shí)間序列或者向 Alertmanager 推送警報(bào)。
- Alertmanager 根據(jù)配置文件,對(duì)接收到的警報(bào)進(jìn)行處理,發(fā)出告警。
- 在圖形界面中,可視化采集數(shù)據(jù)。
下面我們來(lái)對(duì)Prometheus進(jìn)行一個(gè)簡(jiǎn)單的實(shí)踐
名稱(chēng) | IP地址 |
---|---|
小唐A | 192.168.2.98 |
鄭崽B | 192.168.2.108 |
我們將使用Prometheus對(duì)于小唐A和鄭崽B進(jìn)行監(jiān)控
(1)同時(shí)Prometheus Server, Prometheus Server本身也將以容器的方式運(yùn)行在小唐A上
Node Exporter: 負(fù)責(zé)收集host硬件和操作系統(tǒng)數(shù)據(jù),它將以容器方式運(yùn)在所有host上
cAdvisor: 負(fù)責(zé)收集容器數(shù)據(jù),它將以容器方式運(yùn)行在所有host上
(2) Grafana,顯示多維數(shù)據(jù),Grafana本身也將以容器方式運(yùn)行在小唐A上
1.運(yùn)行Node Exporter【所有host都做】
docker run -d --net="host" --name node_exporter --restart=unless-stopped -p 9100:9100 \
-v "/proc:/host/proc:ro" \
-v "/sys:/host/sys:ro" \
-v "/:/rootfs:ro" \
prom/node-exporter
2.運(yùn)行cAdvisor【所有host都做】
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
3.運(yùn)行Prometheus Server【小唐A做】
【會(huì)報(bào)錯(cuò),但是我們會(huì)拿到prometheus.yml,我們接著去修改我們的yml文件】
docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
【復(fù)制到本地】
docker cp prometheus:/etc/prometheus/prometheus.yml .
【修改配置文件】
【開(kāi)個(gè)管理員】
sudo su
ls /root
vi /root/prometheus.yml
targets: ["localhost:9090","localhost:8080","localhost:9100","192.168.2.108:9090","192.168.2.108:8080","192.168.2.108:9100"]
【刪除剛剛的容器】
docker rm prometheus -f
【再次運(yùn)行】
docker run -d -p 9090:9090 \
--name prometheus \
--net=host \
-v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
4.運(yùn)行g(shù)rafana容器【小唐A做】
docker run -d -i -p 3000:3000 \
-e "GF_SERVER_ROOT_URL=http://grafana.server.name" \
-e "GF_SECURITY_ADMIN_PASSWORD=secret" \
--net=host \
grafana/grafana
做到這里的時(shí)候我已經(jīng)想哭了,終于出來(lái)了
賬號(hào):admin
密碼:secret
添加數(shù)據(jù)
5.2數(shù)據(jù)大屏導(dǎo)入
當(dāng)然也可以到官網(wǎng)去看其他的圖標(biāo)
官網(wǎng)
這里需要我們?nèi)サ顷懸幌?,github或者微軟的賬號(hào)都可以
導(dǎo)入
然后選擇好我們的對(duì)于的倉(cāng)庫(kù),完成!??!
六、對(duì)比
部署容易度
ps/top/stats無(wú)疑是最容易使用的,它們是Docker自帶的子命令,隨時(shí)隨地都可以用來(lái)快速了解容器的狀態(tài)。其余幾種也都可以容器的方式運(yùn)行,總的來(lái)說(shuō)都不算復(fù)雜。相對(duì)而言,Prometheus涉及的組件比較多,搭建整個(gè)方案需要運(yùn)行的容器數(shù)量也要多些,部署和管理的難道稍大。
數(shù)據(jù)詳細(xì)度
ps/top/stats和cAdvisor能夠監(jiān)控容器基本的資源使用情況,Sysdig、 WeaveScope和Prometheus則能提供更豐富的數(shù)據(jù)
多Host監(jiān)控
Weave Scope和Prometheus可以監(jiān)控整個(gè)集群,而其余的工具只提供單個(gè)Host的監(jiān)控能力。
告警功能
只有Prometheus具備原生的告警功能文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-462710.html
監(jiān)控非容器資源
Sysdig、 Weave Scope和 Advisor可 以監(jiān)控到 Host操 作系統(tǒng)的狀態(tài),而Prometheus則可以通過(guò)Exporter支持應(yīng)用級(jí)別的監(jiān)控,比如監(jiān)控ceph、haproxy等。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-462710.html
到了這里,關(guān)于Ubantu docker學(xué)習(xí)筆記(九)容器監(jiān)控 自帶的監(jiān)控+sysdig+scope+cAdvisor+prometheus的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!