银河麒麟高级服务器中Docker容器的安装部署与管理实操保姆级教程
https://blog.csdn.net/xiaochenXIHUA/article/details/155027993红帽系、银河麒麟V10系统中成功安装部署Docker-ce引擎与Docker-Compose保姆级教程
https://blog.csdn.net/xiaochenXIHUA/article/details/154187536
一、prometheus监控docker容器
1.1、cAdvisor简介
要监控docker状态,需要使用一个Google开源的容器资源监控和性能分析工具cAdvisor(Container Advisor);它是专门用于收集正在运行的容器资源使用和性能信息。这个cAdvisor工具主要可收集三大类的信息:
《1》【设备信息(MachineInfo)】(不仅可以收集一台设备上的所有运行容器信息,还提供了基础的查询界面与http接口,可方便第三方组件(如prometheus进行数据抓取))。
《2》【容器信息(Container Info)】(可以对节点设备上的资源及其容器进行实时监控和性能数据采集【可采集CPU使用情况、内存使用情况、网络吞吐及其文件系统使用情况】)。
《3》【进程列表(Process List)】(由于cAdvisor使用Go语言开发,利用Linux的cgroups获取容器的资源使用信息,在K8S中集成在Kubelet里作为默认启动项,是官方标配)。
详细情况如下图所示:

1.2、Docker方式部署cAdvisor
运行单个cAdvisor来监控整个Docker主机,被监控端安装完Docker后,就可以添加cAdvisor容器了,这里假定被监控主机ip为【192.168.1.25】,执行如下命令部署cAdvisor容器服务:
bash
#在docker中安装部署cAdvisor容器服务命令
#1-先检查需部署cAdvisor容器的主机端口是否被使用(若被使用则换下一个,只能配置未被使用的端口)
netstat -antlp | grep 8090
#2-在docker中部署cAdvisor容器
docker run \
--volume=/:/rootfs:ro \
--volume=/var/run:/var/run:ro \
--volume=/sys:/sys:ro \
--volume=/var/lib/docker/:/var/lib/docker:ro \
--volume=/dev/disk/:/dev/disk:ro \
--publish=8090:8080 \
--detach=true \
--name=cadvisor \
--restart=always \
google/cadvisor:latest
#3-查看目前所有运行的容器
docker ps
#4-在浏览器访问【ip:8090】查看cAdvisor界面(正常显示则成功)
ip a
#5-cAdvisor还提供了给prometheus的接口【ip:8090/metrics】
#注意:若在浏览器访问不了8090端口则需要再防火墙中放开8090
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=8090/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port






1.3、部署node-exporter容器版监控主机服务状态
虽然cAdvisor可以监控主机的设备信息,但是没有node-exporter工具的强大完整,因此还需要安装一下node-exporter工具来监控;且由于该主机已经安装了docker,因此这里也安装docker版本的node-exporter。
bash
#部署node-exporter容器版监控主机服务状态
#1-先查看主机的9100端口是否被占用(执行如下命令后没有任何提示内容则表示未占用)
netstat -antlp | grep 9100
#2-部署node-exporter容器版命令【第一个端口是主机端口可以修改,第二个是容器内部端口不能修改】
docker run -d \
--name node-exporter \
-p 9100:9100 \
-v /proc:/host/proc:ro \
-v /sys:/host/sys:ro \
-v /:/rootfs:ro \
prom/node-exporter \
--path.procfs /host/proc \
--path.sysfs /host/sys \
--collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc|rootfs)($|/)"
#3-查看目前所有运行的容器
docker ps
#4-在浏览器访问【ip:9100】查看node-exporter界面(正常显示则成功)
ip a
#注意:若在浏览器访问不了9100端口则需要再防火墙中放开9100
firewall-cmd --list-port
firewall-cmd --zone=public --add-port=9100/tcp --permanent
firewall-cmd --reload
firewall-cmd --list-port
|--------|--------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|
| 序号 | 命令 | 说明 |
| 1 | docker run -d \ | 启动容器的基础指令 《1》docker run 表示创建并运行容器; 《2》-d 表示后台守护(守护进程模式); 《3》\ 表示换行符,仅用于格式化,不影响命令的执行。 |
| 2 | --name node-exporter \ | 指定容器名称 给容器命名为【node-exporter】 |
| 3 | -p 9100:9100 \ | 端口映射 将宿主机的9100端口映射到容器内的9100端口(宿主机的端口可以修改;容器内的端口不能修改) |
| 4 | -v /proc:/host/proc:ro \ | 挂载宿主机proc目录 /proc 宿主机的proc文件系统(主要是存储系统进程、资源信息); /host/proc 容器内的挂载路径; ro 只读权限(主要是防止容器修改宿主机的proc内容,属于安全实践); |
| 5 | -v /sys:/host/sys:ro \ | 挂载宿主机sys目录 /sys 宿主机的sys文件系统(主要是存储内核、硬件等信息); /host/proc 容器内挂载路径; ro 只读权限;方便node-exporter容器读取宿主机文件系统信息; |
| 6 | -v /:/rootfs:ro \ | 挂载宿主机根目录 / 宿主机的根目录; /rootfs 容器内的挂载路径; ro 只读权限;方便node-exporter容器读取宿主机文件系统信息; |
| 7 | prom/node-exporter \ | 指定容器镜像 使用官方的prom/node-exporter镜像(默认拉取最新版本) |
| 8 | --path.procfs /host/proc \ | 指定procfs路径 告诉node_exporter从容器内的/host/proc目录读取proc文件系统数据(这对应上面挂载的宿主机/proc文件) |
| 9 | --path.sysfs /host/sys \ | 指定sysfs路径 告诉node_exporter从容器的/host/sys目录读取sys文件系统数据(这对应上面挂载的宿主机/sys文件) |
| 10 | --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc|rootfs)($|/)" | 忽略无用的挂载点 这里配置的文件系统收集器忽略sys/proc/dev/host/etc/rootfs这些挂载点,避免收集重复或者无用的文件系统指标,减少数据冗余。 |
[部署node-exporter容器版命令解析]



二、将cAdvisor与node-exporter添加到prometheus中
bash
#将cAdvisor与node-exporter添加到prometheus中
#1-进入prometheus路径编辑其配置文件【prometheus.yml】
cd /usr/local/prometheus-3.5.0/
vi prometheus.yml
#【prometheus.yml】的最后【scrape_configs】下添加cAdvisor与node-exporter
scrape_configs:
config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090",'192.168.1.39:9100','192.168.1.36:9100','192.168.1.37:9100',"192.168.1.25:9100"]
# The label name is added as a label `label_name=<label_value>` to any timeseries scraped from this config.
labels:
app: "prometheus"
- job_name: "docker"
static_configs:
- targets: ["192.168.1.25:8090"]
labels:
app: "docker-cadvisor"
#验证修改后的prometheus.yml文件的语法是否正确(结果显示SUCCESS则表示正确)
./promtool check config prometheus.yml
#验证prometheus.yml文件中的语法正确后热重载让配置生效
curl -XPOST localhost:9090/-/reload
#然后打开浏览器进入Prometheus Server的Web界面【IP:9090】查看【Status-->Target health】即可看到添加的【docker】节点及其状态【up】表示在线【down】表示离线。




三、Grafana中配置prometheus的docker容器数据可视化
3.1、Grafana的安装与配置
Grafana的安装与配置
https://blog.csdn.net/xiaochenXIHUA/article/details/154597474
3.2、给Grafana安装插件
Grafana提供了很多的扩展插件,可以到All plugins for Grafana | Grafana Labs上查看,若想过滤出对应的插件则在中间的输入框中输入即可(如需要过滤出所有gauge类型的插件);然后点击需要查看的插件进入对应的详情界面选择【Installation】即可看到在线安装该插件的命令与可手动下载离线安装包的下载链接;如下图所示:



bash
#在线安装插件命令(直接复制插件命令在Grafana主机上运行即可)
#1-在线安装D3 Gauge插件命令
grafana-cli plugins install briangann-gauge-panel
#2-插件安装完成后可以看到Grafana的插件是安装在了【/var/lib/grafana/plugins】目录下
#若要手动安装插件,则需要将插件的离线包下载下来,然后解压到这个路径下即可(如:手动安装clock插件【可以在dashboard上显示时间】)
wget https://storage.googleapis.com/grafana-plugins-catalog/grafana-clock-panel/release/3.2.1/grafana-clock-panel-3.2.1.zip -c -P /data
cd /data
unzip grafana-clock-panel-3.2.1.zip -d /var/lib/grafana/plugins/
cd /var/lib/grafana/plugins/
ll
#3-可直接在安装了Grafana的主机上查看当前可以安装的所有插件或过滤对应的插件
#3.1-查看当前主机上可以安装的所有插件
grafana-cli plugins list-remote
#3.2-过滤当前主机上可以安装的插件
grafana-cli plugins list-remote | grep 需过滤的插件名称(如:clock)
#4-插件安装完成后重启Grafana服务
systemctl restart grafana-server







3.3、Grafana中配置prometheus的docker容器数据可视化
(若已经添加过数据源了则不用重复这个操作)登录到Grafana中(IP:3000)选择【连接】-->【添加新连接】-->【搜索Prometheus】后点击Prometheus-->点击右上角的【添加新数据源】则进入设置界面,在设置界面可以填写名称、与prometheus server的URL地址后点击最底部的【保存并测试】。
然后配置仪表盘(到【Grafana dashboards | Grafana Labs】官网获取更多的仪表盘模板。在Grafana的仪表盘界面中间输入框输入docker即可列出所有docker相关模板(如:我们选择对应的【docker】模板进入后,获取到该模板的编号是【10619】【193】【14841】)然后在浏览器上进入我们服务器上部署好的Grafana界面的【仪表盘】-->【新建】-->【导入】界面输入模板的编号或者JSON文件内容后点击【加载】后弹出的界面上可以修改模板名称、数据源为prometheus后点击【Import】)如下图所示:








3.4、Grafana中配置prometheus的node-exporter数据可视化


3.5、Grafana中关于prometheus数据可视化的几个好用仪表盘
|--------|-----------|-----------------------------------------------------|
| 序号 | 仪表盘编号 | 仪表盘名称 |
| 1 | 1860 | Node Exporter Full |
| 2 | 8919 | Node Exporter for Prometheus Dashboard CN v20201010 |
| 3 | 9965 | Blackbox Exporter 0.14 for Prometheus 监控展示看板 |
| 4 | 10619 | Docker Container & Host Metrics |
| 5 | 193 | Docker monitoring |
| 6 | 14841 | Docker monitoring |
| |||
| 其中,模板ID为https://grafana.com/grafana/dashboards/ID,将上面ID替换为具体的数字即可访问Dashboard。 |||
[Grafana中关于prometheus数据可视化的几个好用仪表盘]
