CentOS7下利用docker搭建prometheus+grafana+consul监控环境

步骤:
  1. 安装docker
  2. docker运行consul
  3. docker运行prometheus
  4. docker运行grafana
前提条件:
  1. CentOS7操作系统
  2. 最新版本的yum

步骤1

  1. 检查内核版本$ uname -r,运行docker需要内核版本在3.10以上。

  2. 安装docker

    $ sudo yum install -y docker
  3. 检查是否安装成功,安装成功如下

    $ docker version
    Client:
    Version:         1.13.1
    API version:     1.26
    Package version:
    Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
  4. 启动docker

    $ sudo systemctl start docker.service
  5. 设置开机时自动启动docker

    $ sudo systemctl enable docker

步骤2

  1. docker后台运行consul,并将容器端口映射到主机8500端口。docker会自动拉取consul的镜像并运行。

    $ sudo docker run --name consul -d -p 8500:8500 consul
    Unable to find image 'consul:latest' locally
    Trying to pull repository docker.io/consul ...
  2. 检查容器是否运行成功,看到如下信息,表示consul后台运行成功。

    $ docker ps
    CONTAINER ID       IMAGE          COMMAND                  CREATED          STATUS        PORTS                                                                       NAMES
    37ee3147c1f6       consul         "docker-entrypoint..."   9 seconds ago    Up 8 seconds  8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp    consul
  3. 打开网页 http://localhost:8500 可以看到如下界面
    这里写图片描述

  4. 编辑服务脚本

    $ vim cadvisor.json
    {
          "ID": "cadvisor",
          "Name": "prometheus-cadvisor",
          "Tags": [
             "primary",
             "v1"
          ],
          "Address": "localhost",
          "port": 8080,
          "Check":
              {
                  "HTTP": "http://localhost:8080/metrics",
                  "Interval": "15s"
              }
      }
  5. 注册服务(在cadvisor.json文件夹下执行)

    $ curl --request PUT --data @cadvisor.json http://localhost:8500/v1/agent/service/register
  6. 查看结果
    1
    备注:要想看到如上图Node Health都是绿色,还需docker成功运行google/cadvisor:v0.24.1

  7. 删除服务

    $ curl --request PUT http://localhost:8500/v1/agent/service/deregister/cadvisor

步骤3

  1. 在本地新建一个prometheus.yml文件,我是在root文件夹下建的。

    $ vim prometheus.yml

    文件内容如下:

    
    # my global config
    
    global:
      scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
      evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
      # scrape_timeout is set to the global default (10s).
    
    
    # Alertmanager configuration
    
    alerting:
      alertmanagers:
      - static_configs:
        - targets:
          # - alertmanager:9093
    
    
    # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
    
    rule_files:
      # - "first_rules.yml"
      # - "second_rules.yml"
    
    
    # A scrape configuration containing exactly one endpoint to scrape:
    
    
    # Here it's Prometheus itself.
    
    scrape_configs:
      # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
      - job_name: 'prometheus'
        # metrics_path defaults to '/metrics'
        # scheme defaults to 'http'.
        static_configs:
        - targets: ['localhost:9090']
    
      - job_name: 'consul-prometheus'
        consul_sd_configs:
          - server:   'localhost:8500'
            services: []
        relabel_configs:
          - source_labels: ['__meta_consul_service']
            regex:  .*prometheus.*
            action:  keep  

    备注:其中 - job_name: 'consul-prometheus' 下的内容是consul的prometheus配置。意思是在consul中注册的服务,如果名字中含有 prometheus 的可以被prometheus自动监控。source_labels regex 可以根据自己的需求进行调整。

  2. docker 运行 prometheus

    $ sudo docker run --name prometheus -d -p 9090:9090 --privileged=true -v /root/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
  3. 检查运行结果,可以看到又多了一行prometheus的信息。

    $ docker ps
    CONTAINER ID        IMAGE             COMMAND                  CREATED        STATUS         PORTS                                                                   NAMES
    37ee3147c1f6        consul            "docker-entrypoint..."   32 minutes a   Up 32 minutes  8300-8302/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0..0:8500->8500/tcp   consul
    355090ded434        prom/prometheus   "/bin/prometheus -..."   2 days ago     Up 11 seconds  0.0.0.0:9090->9090/tcp                                                  prometheus
  4. 打开网页 http://localhost:9090/targets 可以看到prometheus和consul-prometheus,说明我们的prometheus+consul服务发现已经配置成功了。
    这里写图片描述


步骤4

  1. docker运行grafana

    $ sudo docker run --name grafana -d -p 3000:3000 grafana/grafana 
  2. 运行成功后可以打开网页 http://localhost:3000 ,初始登陆账号密码都是admin

  3. 配置数据源
    这里写图片描述

  4. 配置dashboard,从https://grafana.com/dashboards下载相应的模板import即可,我下载的是 Docker and Host Monitoring w/ Prometheus 这个模板。最终展示结果如下。
    这里写图片描述


总结

通过实践可以发现,docker运行prometheus,consul,grafana非常简单。执行$ docker ps 可以简单明了的看到四个运行的容器。配置好后,我们可以随时关闭打开他们,使用方便。
这里写图片描述


说明

  1. 以上都是以单机执行为例,如果涉及集群,则IP地址要和安装应用的主机IP一致。
  2. 如果是虚拟机运行,要想在主机上打开网页,还需关闭SELinux和防火墙。
  3. 例子中的grafana模板除了用到cadvisor,还有node-exporter。
  4. 初涉未深,有不足之处,还望各位指正,如需转载,请注明出处,谢谢!

猜你喜欢

转载自blog.csdn.net/zhaizhai6_6/article/details/82146032