文章目录
- 一、Docker命令监控
- 二、Sysdig
- 2.1介绍
- 2.2 基本操作
- 2.2.1 切换视图
- 2.2.2 查看标签含义
- 2.2.3 排序
- 2.2.4 查看内部进程
- 2.2.5 查找
- 2.2.6 暂停
- 2.2.7 上一级
- 2.2.8 退出
- 三、Weave Scope
- 3.1介绍
- 3.2基本操作
- 3.2.1 显示容器
- 3.2.2 选择容器
- 3.2.3 按照CPU使用情况排序
- 3.2.4 控制容器
- 3.2.5 搜索容器
- 3. 两台主机监控
- 四、cAdvisor
- 4.1介绍
- 4.2 基本操作
- 4.2.1查看容器
- 4.2.1查看单个容器状态
- 五、Prometheus
- 5.1介绍
监控,这一个词对于我们开发人员已经习以为常,我们通过对于内存、IO、CPU等性能的监控去判断当前运行状态的情况,容器作为一个已经打包好的虚拟环境亦是如此,特别是多个容器运行,需要收集docker各容器的运行状态和运行信息,本章将进行容器监控,第三方容器监控来进行讲解。

一、Docker命令监控
我们先去运行几个容器
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 | 查看容器状态 |
| container ls | 查看容器状态 |
| top 【容器ID】 | 查看容器内进程 |
| stats | 查看容器各项资源消耗情况 |

像有些命令我们已经非常常见了,Docker所自带的容器指令可以实时的去捕捉信息,但是我们也会存在一些问题,数缺形时少直观,无法反应所占用的趋势,为此,我们引入第三方监控软件。
二、Sysdig
2.1介绍
Sysdig 是一款命令行监控工具,因其轻量级的特点深受广大用户的喜爱。Svsdig 就像放大镜,使用户可以更清晰地看到宿主机与容器的各项行为。它相当干多种 Linux 监控工具的合集。同时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:赋予特殊权限;
其实看到这里,我们会有一个疑问,他作为一个容器,他怎么去获取我们的容器的信息的,我们注意到这个命令**/var/run/docker.sock**我们现在来详细参看下命令,我们在前面的学习中,已经知道我们docker是由client和server组成,我们输入命令实际上是通过客户端将请求发送到同一台电脑上的Doceker Daemon服务,由Docker Daemon返回信息,客户端收到信息后展示在控制台上。我们去看Docker Daemon的信息


我们试着来监听一下
curl --unix-socket /var/run/docker.sock http://localhost/events
docker run -it --rm nginx sh

现在,我们就可以很清楚的知道,Sysdig通过对于/var/run/docker.sock数据卷的共享,可以来获取我们容器的信息。
我们接着往下走,等到我们上面命令执行完输入csysdig(退出的话ctrl+P+Q)
csysdig


2.2 基本操作
2.2.1 切换视图
点击我们下面的views


界面左边列出了sysdig支持的View,一共30多项,涵盖了操作系统的各个方面因为这里主要是讨论容器监控

所以我们将光标移到Containers这一项,界面右边立即显示出此View的功能介绍,双击可以进入视图

2.2.2 查看标签含义
点击legend


2.2.3 排序
双击头部


2.2.4 查看内部进程
双击容器进入


2.2.5 查找


2.2.6 暂停

2.2.7 上一级
退格
2.2.8 退出
按住q
三、Weave Scope
3.1介绍
Weave Scope的最大特点是会自动生成一张Docker容器地图,能够直观地理解、监控和控制容器。
#下载scope命令脚本文件并赋予x执行权限:
curl -L git.io/scope -o /usr/local/bin/scope
【真的太慢了,百度网盘都比他快】
链接:https://pan.baidu.com/s/1HWePWMZBkhkyYVlrqHY2Rw?pwd=3wva
提取码:3wva
--来自百度网盘超级会员V4的分享
|
————网盘下的,这样操作
mkdir /usr/local/bin/scope
cp 你放的位置 /usr/local/bin/scope
#加入权限
chmod a+x /usr/local/bin/scope
#以容器的方式启动Weave Scope
scope launch
#授权端口
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 选择容器
单击小图标,同时会将容器信息进行显示

3.2.3 按照CPU使用情况排序


3.2.4 控制容器

attach到容器启动进程,相当于执行docker container attach

打开shell,相当于执行docker container exec

重启容器,相当于执行docker container restart

暂停容器,相当于执行docker container pause

关闭容器,相当于执行docker container stop
3.2.5 搜索容器

3. 两台主机监控
| 名称 | IP地址 |
|---|---|
| 小唐A | 192.168.2.98 |
| 郑崽B | 192.168.2.108 |
因为小唐的已经装好了,所以直接传到郑崽的目录就好
username<登录用户名你服务器的名字【就是你直接打开控制台的名字】>
serverip<客户端ip(ip addr查看)> 192.168.2.108
scp -r -p <本机地址> 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在前,其他主机的在后
【小唐A】:scope launch 192.168.2.98 192.168.2.108



四、cAdvisor
4.1介绍
cAdvisor是google开发的容器监控工具,我们一起来看看吧
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
如果出现
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查看单个容器状态


五、Prometheus
5.1介绍
Prometheus是一个非常优秀的监控工具。准确地说,应该是监控方案Prometheus提供了监控数据搜集、存储、处理、可视化和告警一套完整的解决方案。我们先来看看他的架构,这个真的是这篇文章中最硬核的东西了

1.Prometheus Server ------服务端 —处理,储存数据
Prometheus Server负责从Exporter拉取和存储监控数据,并提供一套灵活的查询语言 (PromQL) 供用户使用。
2. Exporter-----客户端 —采集数据
Exporter负责收集目标对象 (host、container等)的性能数据,并通过HTTP接口供Prometheus Server获取。
3.可视化组件
监控数据的可视化展现对于一个监控方案至关重要,以前Prometheus自己开发了一套>>工具,不过后来废弃了,因为开源社区出现了更为优秀的产品Grafana。Grafana能够与Prometheus无缝集成,提供完美的数据展示能力。
4.Alertmanager—告警方式—实现告警
用户可以定义基于监控数据的告警规则,规则会触发告警。一旦Alertmanager收到告警,会通过预定义的方式发出告警通知。支持的方式包括Email.PagerDuty、Webhook等
工作流程
- Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics。
- Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报。
- Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
- 在图形界面中,可视化采集数据。
下面我们来对Prometheus进行一个简单的实践
| 名称 | IP地址 |
|---|---|
| 小唐A | 192.168.2.98 |
| 郑崽B | 192.168.2.108 |
我们将使用Prometheus对于小唐A和郑崽B进行监控
(1)同时Prometheus Server, Prometheus Server本身也将以容器的方式运行在小唐A上
Node Exporter: 负责收集host硬件和操作系统数据,它将以容器方式运在所有host上
cAdvisor: 负责收集容器数据,它将以容器方式运行在所有host上
(2) Grafana,显示多维数据,Grafana本身也将以容器方式运行在小唐A上
1.运行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.运行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.运行Prometheus Server【小唐A做】
【会报错,但是我们会拿到prometheus.yml,我们接着去修改我们的yml文件】
docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
【复制到本地】
docker cp prometheus:/etc/prometheus/prometheus.yml .
【修改配置文件】
【开个管理员】
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
【再次运行】
docker run -d -p 9090:9090 \
--name prometheus \
--net=host \
-v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus




4.运行grafana容器【小唐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
做到这里的时候我已经想哭了,终于出来了
账号:admin
密码:secret

添加数据




当然也可以到官网去看其他的图标
官网
这里需要我们去登陆一下,github或者微软的账号都可以


导入


然后选择好我们的对于的仓库,完成!!!














![[计算机图形学]高级光线传播与复杂外观建模(前瞻预习/复习回顾)](https://img-blog.csdnimg.cn/0a6053b0ea15456280f5bcba91e3ad3e.png)





