一、docker自带的监控命令
首先通过几个镜像运行几个容器:
[root@localhost ~]# docker pull httpd
[root@localhost ~]# docker pull centos
[root@localhost ~]# docker pull busybox
[root@localhost ~]# docker run -d -p 80 --name http-1 httpd
[root@localhost ~]# docker run -dit --name busybox-1 busybox
[root@localhost ~]# docker run -dit --name centos-1 centos
Docker提供了一个新命令docker container ls,其作用和用法与docker container ps完全一样。
1.ps
查看当前运行的容器(docker container ls或者docker container ps):
[root@localhost ~]# docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18f3549f8451 centos "/bin/bash" 2 minutes ago Up 2 minutes centos-1
3ac5857da8f9 busybox "sh" 3 minutes ago Up 3 minutes busybox-1
f828fc65e09a httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:32768->80/tcp http-1
[root@localhost ~]# docker container ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
18f3549f8451 centos "/bin/bash" 3 minutes ago Up 3 minutes centos-1
3ac5857da8f9 busybox "sh" 3 minutes ago Up 3 minutes busybox-1
f828fc65e09a httpd "httpd-foreground" 3 minutes ago Up 3 minutes 0.0.0.0:32768->80/tcp http-1
查看当前所有的容器(docker container ls -a或者docker container ps -a):
[root@localhost ~]# docker container ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34216a5e8229 httpd "httpd-foreground" 43 seconds ago Exited (0) 13 seconds ago http-2
18f3549f8451 centos "/bin/bash" 6 minutes ago Up 6 minutes centos-1
3ac5857da8f9 busybox "sh" 6 minutes ago Up 6 minutes busybox-1
f828fc65e09a httpd "httpd-foreground" 6 minutes ago Up 6 minutes 0.0.0.0:32768->80/tcp http-1
[root@localhost ~]# docker container ls -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
34216a5e8229 httpd "httpd-foreground" About a minute ago Exited (0) 37 seconds ago http-2
18f3549f8451 centos "/bin/bash" 6 minutes ago Up 6 minutes centos-1
3ac5857da8f9 busybox "sh" 6 minutes ago Up 6 minutes busybox-1
f828fc65e09a httpd "httpd-foreground" 7 minutes ago Up 7 minutes 0.0.0.0:32768->80/tcp http-1
2.top
如果想知道某个容器中运行了哪些进程,可以执行docker container top [container]命令。
查看本地系统的进程信息:
[root@localhost ~]# top
查看容器的进程信息:
[root@localhost ~]# docker container top httpd-1
[root@localhost ~]# docker top httpd-1
3、stats
docker container stats用于显示每个容器各种资源的使用情况。
查看当前正在运行的每个容器各种资源的使用情况:
[root@localhost ~]# docker container stats
[root@localhost ~]# docker stats
查看指定的正在运行的某个容器各种资源的使用情况:
[root@localhost ~]# docker container stats httpd-1
[root@localhost ~]# docker stats httpd-1
二、sysdig
sysdig是一个轻量级的系统监控工具,同时它还原生支持容器。通过sysdig可以近距离观察Linux系统和容器的行为。Linux上有很多常用的监控工具,比如strace,tcpdump,htop,iftop,lsof … 而sysdig则是将这些工具的功能集成到一个工具中,并且提供一个友好统一的操作界面。除此之外其还能对容器如docker、coreOS、LXC进行监控。
另外该工具也支持Windows平台和Mac平台,平时工作主要涉及Linux平台。
安装和运行sysdig的最简单方法是运行Docker容器。
[root@localhost ~]# 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
//创建一个容器并自动进入容器中
//--rm:随着退出容器而被删除;
//--privileged=true:赋予特殊权限;
root@df6c08b61e54:/#:/# csysdig //执行这条命令
这是一个类似Linux top命令的界面,但要强大太多。sysdig按不同的View来监控不同类型的资源,点击底部Views菜单或者按F2,显示View选择列表。
界面左边列出了sysdig支持的View,一共30多项,涵盖了操作系统的各个方面,因为这里主要是容器监控,所以通过方向键将蓝色光标移动到Containers这一项,界面右边立即显示处此View的功能介绍。回车或者双击Containers,进入容器监控界面。
sysdig会显示该Host上所有容器的实时数据,每两秒刷新一次。各列数据的含义也是自解释的,如果不清楚,可以点击底部的Legend或者按F7。如果想按某一列排序,比如按使用的内存量,点一下列头的VIRT即可。
如果想查看某个容器运行的进程,比如httpd-1,将光标移动到容器,然后回车或者双击。
可以通过回车或者双击查看某个进程中的线程信息。
返回上一级,按退格键(Backspace)即可。
sysdig的交互功能很强,如果界面显示的条目很多,可以点击底部Search菜单,然后输入关键字进行查找。
如果觉得界面刷新太快,看不清楚关注的信息,可以点击底部Pause菜单。
sysdig的特点:
监控信息全,包括Linux操作系统和容器,界面交互性强。
不过sysdig显示的是实时数据,看不到变化和趋势。而且是命令行操作方式,需要ssh到Host上执行,会带来一些不便。
三、Weave Scope
Weave Scope的最大特点是会自动生成一张Docker容器地图,能够直观地理解、监控和控制容器。
//下载scope命令脚本文件并赋予x执行权限:
[root@localhost ~]# curl -L git.io/scope -o /usr/local/bin/scope
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:02 --:--:-- 0
0 0 0 0 0 0 0 0 --:--:-- 0:00:04 --:--:-- 0
100 616 100 616 0 0 55 0 0:00:11 0:00:11 --:--:-- 155
100 11664 100 11664 0 0 948 0 0:00:12 0:00:12 --:--:-- 16615
[root@localhost ~]# chmod a+x /usr/local/bin/scope
//以容器的方式启动Weave Scope:
[root@localhost ~]# scope launch
Unable to find image 'weaveworks/scope:1.13.1' locally
1.13.1: Pulling from weaveworks/scope
c9b1b535fdd9: Pull complete
550073704c23: Pull complete
8738e5bbaf1d: Pull complete
0a8826d26027: Pull complete
387c1aa951b4: Pull complete
e72d45461bb9: Pull complete
75cc44b65e98: Pull complete
11f7584a6ade: Pull complete
a5aa3ebbe1c2: Pull complete
7cdbc028c8d2: Pull complete
Digest: sha256:4342f1c799aba244b975dcf12317eb11858f9879a3699818e2bf4c37887584dc
Status: Downloaded newer image for weaveworks/scope:1.13.1
afeb79fe4819b971542478924c2864636d42383719397432ba69ad4537364012
Scope probe started
Weave Scope is listening at the following URL(s):
* http://192.168.122.1:4040/
* http://192.168.10.52:4040/
//在本地防火墙授权4040端口:
[root@localhost ~]# firewall-cmd --add-port=4040/tcp --permanent
[root@localhost ~]# firewall-cmd --reload
[root@localhost ~]# firewall-cmd --list-all
浏览器访问地址192.168.1052:4040访问weavescope系统:
如果要监控两台的话:主机名必须进行区分方法如下:
[root@dockerA ~]# curl -L git.io/scope -o /usr/local/bin/scope
[root@dockerA ~]# chmod +x /usr/local/bin/scope
[root@dockerA ~]# scope launch 192.168.10.52 192.168.10.53 //首选指定本地的IP,再指定对方的IP
[root@docker1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
32509663f9d9 weaveworks/scope:1.13.1 "/home/weave/entrypo…" 3 minutes ago Up 3 minutes weavescope
414d77b61305 centos "/bin/bash" 26 minutes ago Up 26 minutes centos-1
9893f8027c79 busybox "sh" 27 minutes ago Up 27 minutes busybox-1
8a490fe455cf httpd "httpd-foreground" 28 minutes ago Up 28 minutes 0.0.0.0:32768->80/tcp httpd-1
[root@dockerB ~]# curl -L git.io/scope -o /usr/local/bin/scope
[root@dockerB ~]# chmod +x /usr/local/bin/scope
[root@dockerB ~]# scope launch 192.168.10.53 192.168.10.52
[root@dockerB ~]# docker run -itd --name nginx nginx //运行一个容器进行测试
[root@docker2 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
ce3ff3dee35d nginx "/docker-entrypoint.…" 12 seconds ago Up 10 seconds 80/tcp nginx
f70388b83380 weaveworks/scope:1.13.1 "/home/weave/entrypo…" 2 minutes ago Up 2 minutes weavescope
四、prometheus
1.prometheus简介
Prometheus是一套开源的系统监控报警框架。它以给定的时间间隔从已配置的目标收集指标,评估规则表达式,显示结果,并在发现某些情况为真时触发警报。
作为新一代的监控框架,Prometheus具有以下特点 :
强大的多维度数据模型:
(1)时间序列数据通过metric名和键值对来区分;
(2)所有的metrics都可以设置任意的多维标签;
(3)数据模型更随意,,不需要刻意设置为以点分隔的字符串;
(4)可以对数据模型进行聚合、切割和切片操作;
(5)支持双精度浮点类型,标签可以设为全unicode(统一码);
灵活、强大的查询语句:在同一个查询语句,可以对多个 metrics 进行乘法、加法、连接、取分数位等操作;
易于管理:不依赖于分布式存储;
使用 pull 模式采集时间序列数据;
可以采用 push gateway 的方式把时间序列数据推送至 Prometheus server 端;
可以通过服务发现或者静态配置去获取监控的targets;
有多种可视化图形界面;
易于伸缩。;
2.Prometheus组成及架构
Prometheus包含了许多组件,其中许多组件都是可选的,常用的组件有:
Prometheus Server:用于收集和存储时间序列数据;
Client Library:客户端库,为需要监控的服务生成相应的metrics 并暴露给 Prometheus server;
Push Gateway:主要用于短期的 jobs。由于这类 jobs 存在时间较短,可能在 Prometheus 来 pull 之前就消失了。为此,这次 jobs 可以直接向 Prometheus server端推送它们的 metrics
Exporters:用于暴露已有的第三方服务的 metrics 给 Prometheus;
Alertmanager:从 Prometheus server 端接收到 alerts 后,会进行去除重复数据,分组,并路由到对端的接受方式,发出报警;
…………等等,还有好多,这里就列出几个常用的组件!
Prometheus官方文档中的架构图:
官方的架构图中,主要模块块包括:Prometheus server, exporters, Pushgateway, PromQL, Alertmanager 以及图形界面;
大致的工作流程是:
(1)Prometheus server 定期从配置好的 jobs 或者 exporters 中拉 metrics,或者接收来自 Pushgateway 发过来的 metrics,或者从其他的 Prometheus server 中拉 metrics;
(2)Prometheus server 在本地存储收集到的 metrics,并运行已定义好的 alert.rules,记录新的时间序列或者向 Alertmanager 推送警报;
(3)Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警;
(4)在图形界面中,可视化采集数据;
3.部署prometheus
1)环境准备
注意:上述三台服务器上必须具备最基本的docker环境,上述环境的docker版本为18.09.0
上述环境所需组件的作用如下:
Prometheus server:普罗米修斯的主服务器(端口:9090);
NodeEXporter:负责收集Host硬件信息和操作系统信息,(端口:9100);
cAdvisor:负责收集Host上运行的容器信息(端口:8080);
Grafana:负责展示普罗米修斯监控界面(3000);
Alertmanager:用来接收Prometheus发送的报警信息,并且执行设置好的报警方式,报警内容(同样也是在dockerA主机上部署,端口:9093);
各组件的关系:NodeEXporter、cAdvisor负责收集信息发送给 Prometheus server,在由 Prometheus server交给Grafana进行图形化的显示。如需报警,则由prometheus向Alertmanager组件发送信息!
实验环境,关闭防火墙、SELinux,实际环境中需开启相应的端口!
2)部署prometheus
(1)运行Node-exporter容器
NodeEXporter主要负责收集Host硬件信息和操作系统信息!
[root@dockerA ~]# docker run -d --name node -p 9100:9100 -v /proc:/host/proc -v /sys:/host/sys -v /:/rootfs --net=host prom/node-exporter --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($|/)"
//使用prom/node-exporter 镜像创建一个名为node的容器,用于收集硬件和系统信息;
//--net=host表示Prometheus server可以直接与node-exporter通信;
//并映射9100端口
由于这个NodeEXporter组件需要在三台docker host主机上,所以以上命令就需要在另外两台主机上都执行。
客户端使用浏览器进行访问,如图:
(2)运行cAdvisor容器
cAdvisor主要负责收集Host上运行的容器信息!
[root@dockerA ~]# docker run -v /:/rootfs:ro -v /var/run:/var/run/:rw -v /sys:/sys:ro -v /var/lib/docker:/var/lib/docker:ro -p 8080:8080 --detach=true --name=cadvisor --net=host google/cadvisor
同样这个cAdvisor组件也是需要在三台docker host上全部安装的!所以以上命令也需在另外两台主机上执行
客户端使用浏览器进行访问,如图:
(3)运行Prometheus server容器(只需在dockerA主机上执行即可!)
Prometheus是普罗米修斯的主服务器!
在部署Prometheus之前,需要对它的配置文件进行修改,所以首先运行一个Prometheus容器将其配置文件复制到本地,便于进行修改。
[root@dockerA ~]# docker run -d -p 9090:9090 --name prometheus --net=host prom/prometheus
//运行一个Prometheus容器是为了将它的配置文件拿到本地
[root@dockerA ~]# docker cp prometheus:/etc/prometheus/prometheus.yml .
//将Prometheus容器中的主配置文件复制到本地
[root@dockerA ~]# vim prometheus.yml //编辑主配置文件
- targets: ['localhost:9090','localhost:8080','localhost:9100','192.168.10.53:8080','192.168.10.53:9100','192.168.10.54:8080','192.168.10.54:9100']
//这项原本是存在的,只需修改即可!
//用于指定监控本机的9090、8080、9100这三个端口,另外添加另外两台docker主机的8080、9100这两个端口。
//8080端口运行的是cAdvisor服务
//9100端口运行的是node-exporter服务
//9090端口运行的就是Prometheus服务
[root@dockerA ~]# docker rm prometheus -f //将刚才运行的容器删除
prometheus
[root@dockerA ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
//重新运行一个prometheus容器,将刚才修改完成的配置文件挂载到容器中
dockerA/dockerB/dockerC的运行的容器如下:
[root@dockerA ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d3c1e99bec8d prom/prometheus "/bin/prometheus --c…" 3 seconds ago Up 2 seconds prometheus
054af5cd0a53 google/cadvisor "/usr/bin/cadvisor -…" 8 minutes ago Up 8 minutes cadvisor
ba4ca118ef1d prom/node-exporter "/bin/node_exporter …" 14 minutes ago Up 14 minutes node
[root@dockerB ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
243b573e1e3a google/cadvisor "/usr/bin/cadvisor -…" 15 minutes ago Up 15 minutes cadvisor
f7c99f83c02e prom/node-exporter "/bin/node_exporter …" 20 minutes ago Up 20 minutes node
[root@dockerC ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4781d7584490 google/cadvisor "/usr/bin/cadvisor -…" 15 minutes ago Up 15 minutes cadvisor
b63618561c11 prom/node-exporter "/bin/node_exporter …" 21 minutes ago Up 21 minutes node
(4)运行grafana容器(同样只需在dockerA主机上运行即可!)
grafana主要负责展示普罗米修斯监控界面,给我们提供良好的图形化界面!
[root@dockerA ~]# mkdir grafana-storage
[root@dockerA ~]# chmod 777 -R grafana-storage
//创建一个目录,赋予777的权限
[root@dockerA ~]# docker run -d -p 3000:3000 --name grafana -v /root/grafana-storage:/var/lib/grafana -e "GF_SECURITY_ADMIN_PASSWORD=123.com" grafana/grafana
//“-e”选项表示修改容器内部的环境变量,将admin用户的密码更改为123.com;
客户端访问测试:
上述配置完成后,我们就需要配置它以什么样的形式来给我们展示了,可以自定义,直接去grafana官网寻找现成的模板。如图:
这里我选择的如图
将grafana官方的模板导入到我们的grafana容器提供的web页面中,方法有两种方式:
1)第一种方式:
在grafana官网选择自己喜欢的模板,点击进入,如图:
下载后,回到自己搭建的grafana容器提供的web页面中,如图:
仔细看的话,会发现这个模板有些信息都检测不到,所以这里就是为了展示一种方式导入模板的方式。个人建议推荐使用第二种方式!
2)第二种方式:
选择合适的模板后,记录其ID号,如图:
记录下模板的ID号之后,同样回到自己搭建的grafana容器提供的web页面中,如图:
3)配置Peometheus监控实现报警
Prometheus的报警方式有好几种,比如:邮箱、微信、钉钉等,本次案例采用邮箱告警的方式。
当然在配置QQ邮箱之前,需要我们登录QQ邮箱,打开SMTP服务,并获取 授权码。
(1)运行alertmanager容器
Alertmanager组件主要是用来接收Prometheus发送的报警信息,并且执行设置好的报警方式,报警内容;
只需在dockerA主机上部署即可!方法如下:
[root@dockerA ~]# docker run -d --name alertmanager -p 9093:9093 prom/alertmanager
//随便运行一个容器,其目的就是将容器中服务的配置文件拿到本地
[root@dockerA ~]# docker cp alertmanager:/etc/alertmanager/alertmanager.yml .
//将altermanager服务的yml配置文件拿到本地
[root@dockerA ~]# vim alertmanager.yml //编辑配置文件
global:
resolve_timeout: 5m
smtp_from: '614165736@qq.com' #发送者信息
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '614165736@qq.com' #接收者信息
smtp_auth_password: 'zyxgdzcrllqvbcag' #使用qq邮箱生成的授权码
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname'] #采用默认组
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '614165736@qq.com' //发送者信息
send_resolved: true //当容器恢复正常时,也会发送一份邮件
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
alertmanager.yml配置文件中一级字段:
global:全局配置(包括报警解决的超时时间、SMTP相关配置、各种渠道通知的API地址等新消息); route:用来设置报警的分发策略;
receivers:配置告警消息接收者信息;
inhibit_rules:抑制规则配置,当存在与另一组匹配的警报时,抑制规则将仅用于一组匹配的;
(2)配置alertmanager报警规则
[root@dockerA ~]# mkdir -p prometheus/rules && cd prometheus/rules
//创建目录用于存放规则的目录
[root@dockerA rules]# vim node-up.rules //编写规则
groups:
- name: node-up //自定义名称
rules:
- alert: node-up
expr: up{job="prometheus"} == 0
// job的名称必须和prometheus配置文件中的 - job_name: 'prometheus'对应
for: 15s
labels:
severity: 1
team: node
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
可以根据以上配置文件进行修改,若想自己编写报警规则,可以参考它的官方文档,如图:
(3)关联Prometheus
[root@dockerA ~]# vim prometheus.yml
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 - 192.168.1.1:9093 //此行将原本的内容更改为alertmanager容器的IP+端口
13
14 # Load rules once and periodically evaluate them according to the global 'evaluat ion_interval'.
15 rule_files:
16 - "/usr/local/prometheus/rules/*.rules" //这一行需要手动添加,指定容器内的路径
[root@dockerA ~]# docker rm -f prometheus //修改完配置为文件后,需要将容器删除,重新运行一台新的容器
[root@dockerA ~]# docker run -d -p 9090:9090 --name prometheus --net=host -v /root/prometheus.yml:/etc/prometheus/prometheus.yml -v /root/prometheus/rules/node-up.rules:/usr/local/prometheus/rules/node-up.rules prom/prometheus
//指定步骤(2)编写的rule文件的路径,
为防止格式可能会出现错误,附上截图一张,如下:
此时在prometheus主页上可以看到相应规则
模拟dockerA上的容器node关闭
[root@dockerA ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
709a68311b08 prom/alertmanager "/bin/alertmanager -…" 22 minutes ago Up 22 minutes 0.0.0.0:9093->9093/tcp alertmanager
165352d0303a prom/prometheus "/bin/prometheus --c…" 35 minutes ago Up 35 minutes prometheus
ba11917794a8 grafana/grafana "/run.sh" 2 hours ago Up 2 hours 0.0.0.0:3000->3000/tcp grafana
054af5cd0a53 google/cadvisor "/usr/bin/cadvisor -…" 2 hours ago Up 2 hours cadvisor
ba4ca118ef1d prom/node-exporter "/bin/node_exporter …" 2 hours ago Up 5 seconds node
[root@dockerA ~]# docker stop node
node
为了追求美观,我们采取设置一下报警信息的模板!
[root@dockerA ~]# cd prometheus
[root@dockerA prometheus]# mkdir alertmanager-tmpl
[root@dockerA prometheus]# cd alertmanager-tmpl/
[root@dockerA prometheus]# vim email.tmpl
{{ define "email.from" }}614165736@qq.com{{ end }}
{{ define "email.to" }}614165736@qq.com{{ end }}
{{ define "email.to.html" }}
{{ range .Alerts }}
=========start==========<br>
告警程序: prometheus_alert<br>
告警级别: {{ .Labels.severity }} 级<br>
告警类型: {{ .Labels.alertname }}<br>
故障主机: {{ .Labels.instance }}<br>
告警主题: {{ .Annotations.summary }}<br>
触发时间: {{ .StartsAt.Format "2020-08-07 14:45:10" }} <br>
=========end==========<br>
{{ end }}
{{ end }}
[root@dockerA ~]# vim alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '614165736@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '614165736@qq.com'
smtp_auth_password: 'zyxgdzcrllqvbcag'
smtp_require_tls: false
smtp_hello: 'qq.com'
templates: //添加此行
- '/etc/alertmanager-tmpl/*.tmpl' //指定容器中模板的路径
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" }}' //必须和模板中对应
html: '{{ template "email.to.html" . }}' //必须和模板中对应
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
[root@dockerA ~]# docker rm alertmanager -f
//删除容器
[root@dockerA ~]# docker run -d --name alertmanager -p 9093:9093 -v /root/alertmanager.yml:/etc/alertmanager/alertmanager.yml -v /root/prometheus/alertmanager-tmpl:/etc/alertmanager-tmpl prom/alertmanager
//创建容器本地创建的模板文件
//创建完成后,确定容器是正常运行
[root@dockerA ~]# docker stop node //关闭容器node
node
[root@dockerA ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7e426238f32d prom/alertmanager "/bin/alertmanager -…" About a minute ago Up About a minute 0.0.0.0:9093->9093/tcp alertmanager
165352d0303a prom/prometheus "/bin/prometheus --c…" About an hour ago Up About an hour prometheus
ba11917794a8 grafana/grafana "/run.sh" 2 hours ago Up 2 hours 0.0.0.0:3000->3000/tcp grafana
054af5cd0a53 google/cadvisor "/usr/bin/cadvisor -…" 3 hours ago Up 3 hours cadvisor
ba4ca118ef1d prom/node-exporter "/bin/node_exporter …" 3 hours ago Exited (2) 7 seconds ago node
转载:https://blog.csdn.net/weixin_44907813/article/details/107853939