声明:所有的实验示例大部分来自《learn-docker-in-a-month-of-lunches》的作者Elton Stoneman,但运行结果并不都是照搬,大部分实验结果可能与原书不同
一、前言
虽然通过health check
可以判断一个容器是否正常运行,但是其实除此之外,我们更想得到更多的运行相关信息,这样就可以避免应用的状态变得更差之前发现问题,从而避免服务的停止。这比health check
只是在容器变得不正常后才提醒你来得更加有效。Prometheus
和Grafana
都是开源的性能监控类工具,前者负责将应用的各种运行详情抽取出来,后者则负责将抽取出来的数据进行一个可视化的显示。
二、Prometheus镜像的制作与自定义配置
- 创建一个自定义配置的
Prometheus
镜像- 创建
Prometheus
的配置文件prometheus.yml
- 编写
Dockerfile
FROM prom/prometheus COPY prometheus.yml /etc/prometheus
- 创建镜像并上传
$ docker image build -t prometheus_self . $ docker login $ docker image tag prometheus_self userName/ prometheus_self $ docker image push userName/ prometheus_self
- 创建
- 不制作镜像,只改变配置
- 拉取
Prometheus
镜像
$ dockr image pull prometheus
- 挂载自定义的配置文件运行
$ docker container run --mount type=bind,source='/root/prometheus.yml',target='/etc/prometheus/prometheus.yml' -p 9080:9090 --detach prometheus_self
路径是绝对路径
- 拉取
三、Grafana镜像的制作与自定义配置
- Grafana镜像的制作
- 编写Dockerfile
FROM grafana/grafana:6.5.0 COPY datasource-prometheus.yaml ${GF_PATHS_PROVISIONING}/datasources/ COPY dashboard-provider.yaml ${GF_PATHS_PROVISIONING}/dashboards/ COPY dashboard.json /var/lib/grafana/dashboards/
这三个配置文件是关于监控数据源和监控面板的配置,你可以在Grafana里面将其导出
- 制作镜像
$ docker image build -t grafana_self:6.5.0 .
- 不制作镜像,只改变配置
-
普通配置就不多说了
-
插件的安装
- 安装官方的插件
$ docker container run -e "GF_INSTALL_PLUGINS=grafana-clock-panel,grafana-simple-json-datasource" grafana/grafana
在运行时指定环境变量
GF_INSTALL_PLUGINS
,后面接要安装的插件列表,具体格式为GF_INSTALL_PLUGINS=[plugin1 [version]][, plugin2 [version]][, ...]
,version表示插件的版本,不指定的话则是安装最新的- 安装其他来源的插件
$ docker container run -e "GF_INSTALL_PLUGINS=http://plugin-domain.com/my-custom-plugin.zip;custom-plugin" grafana/grafana
具体格式为
GF_INSTALL_PLUGINS=<url to plugin zip>;<plugin name>
-
四、Docker自身的监控信息怎么输出
- 修改配置文件
/etc/docker/daemon.json
{
//...
"metrics-addr" : "0.0.0.0:9323",
"experimental" : true
//...
}
- 重新启动Docker
$ systemctl restart docker
- 访问
localhost:9323/metrics
查看Docker输出的监控信息
五、Docker、Prometheus、Grafana整合实验
- 获取当前机器的IP
$ ip route get 1 | awk '{print $NF;exit}'
- 修改
Elton Stoneman
提供的docker-compose-with-grafana.yml
version: "3.7"
services:
accesslog:
image: diamol/ch09-access-log
ports:
- "80"
networks:
- app-net
iotd:
image: diamol/ch09-image-of-the-day
ports:
- "8011:80"
networks:
- app-net
image-gallery:
image: diamol/ch09-image-gallery
ports:
- "8010:80"
depends_on:
- accesslog
- iotd
networks:
- app-net
prometheus:
image: diamol/ch09-prometheus
ports:
- "9090:9090"
environment:
- DOCKER_HOST=172.17.0.8
networks:
- app-net
grafana:
image: diamol/ch09-grafana
ports:
- "8989:3000"
depends_on:
- prometheus
networks:
- app-net
networks:
app-net:
external:
name: nat
DOCKER_HOST修改为你机器的IP
- 部署应用
$ docker-compose -f docker-compose-with-grafana.yml up --detach --scale accesslog=3
- 打开
localhost:9090/targets
查看监控源是否都正常 - 打开
localhost:8989/
登录Grafana,点击左上角切换面板“Image Gallery” - 访问
localhost:8010
发出一个请求,然后查看Grafana的监控面板,我的是这个样子
Image Gallery
参考文档:
[1] learn-docker-in-a-month-of-lunches
[2] 官方文档
附:
[1] Elton Stoneman的github项目
网友评论