S7:Docker、Prometheus、Grafana

声明:所有的实验示例大部分来自《learn-docker-in-a-month-of-lunches》的作者Elton Stoneman,但运行结果并不都是照搬,大部分实验结果可能与原书不同


一、前言

虽然通过health check可以判断一个容器是否正常运行,但是其实除此之外,我们更想得到更多的运行相关信息,这样就可以避免应用的状态变得更差之前发现问题,从而避免服务的停止。这比health check只是在容器变得不正常后才提醒你来得更加有效。PrometheusGrafana都是开源的性能监控类工具,前者负责将应用的各种运行详情抽取出来,后者则负责将抽取出来的数据进行一个可视化的显示。


二、Prometheus镜像的制作与自定义配置
  • 创建一个自定义配置的Prometheus镜像
    1. 创建Prometheus的配置文件prometheus.yml
    2. 编写Dockerfile
    FROM prom/prometheus
    COPY prometheus.yml /etc/prometheus
    
    1. 创建镜像并上传
    $ docker image build -t prometheus_self .
    $ docker login
    $ docker image tag prometheus_self userName/ prometheus_self
    $ docker image push userName/ prometheus_self
    
  • 不制作镜像,只改变配置
    1. 拉取Prometheus镜像
    $ dockr image pull prometheus
    
    1. 挂载自定义的配置文件运行
    $ docker container run --mount type=bind,source='/root/prometheus.yml',target='/etc/prometheus/prometheus.yml' -p 9080:9090 --detach prometheus_self
    

    路径是绝对路径


三、Grafana镜像的制作与自定义配置
  • Grafana镜像的制作
    1. 编写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里面将其导出

    1. 制作镜像
    $ 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=;


四、Docker自身的监控信息怎么输出
  1. 修改配置文件/etc/docker/daemon.json
{
  //...
  "metrics-addr" : "0.0.0.0:9323",
  "experimental" : true
  //...
}
  1. 重新启动Docker
$ systemctl restart docker
  1. 访问localhost:9323/metrics查看Docker输出的监控信息

五、Docker、Prometheus、Grafana整合实验
  1. 获取当前机器的IP
$ ip route get 1 | awk '{print $NF;exit}'
  1. 修改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

  1. 部署应用
$ docker-compose -f docker-compose-with-grafana.yml up --detach --scale accesslog=3
  1. 打开localhost:9090/targets查看监控源是否都正常
  2. 打开localhost:8989/登录Grafana,点击左上角切换面板“Image Gallery”
  3. 访问localhost:8010发出一个请求,然后查看Grafana的监控面板,我的是这个样子
    Image Gallery

参考文档:
[1] learn-docker-in-a-month-of-lunches
[2] 官方文档


附:
[1] Elton Stoneman的github项目

你可能感兴趣的:(S7:Docker、Prometheus、Grafana)