docker+prometheus+pushgateway+grafana搭建监控集群实战

2,710 阅读2分钟

为了快速获得机器监控项数据,采用node-exporter开源工具来监控机器详情

准备工作

先创建 prometheus_data 目录,用于存放此次实验的文件,例如 ~/docker_data/prometheus_data 从链接 prometheus.io/download/#n… 下载 exporter,解压,文件夹改名为 node_exporter ,并放置在 prometheus_data 目录下。 安装docker-compose作为编排服务。 docker-compose.yml文件如下:

version: '3'
services:
  centos1:
    image: centos
    container_name: centos1
    restart: always
    ports:
      - "9101:9100"
    volumes:
      - ~/docker_data/prometheus_data/node_exporter:/root
    command: /root/node_exporter

  centos2:
    image: centos
    container_name: centos2
    restart: always
    ports:
      - "9102:9100"
    volumes:
      - ~/docker_data/prometheus_data/node_exporter:/root
    command: /root/node_exporter

  prometheus:
    image: prom/prometheus
    container_name: prometheus
    user: root
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - ~/docker_data/prometheus_data/prometheus:/etc/prometheus
      - ~/docker_data/prometheus_data/prometheus_db:/prometheus
    command:
      - '--config.file=/etc/prometheus/prometheus.yml'
      - '--storage.tsdb.path=/prometheus'

  grafana:
    image: grafana/grafana
    container_name: grafana
    user: root
    restart: always
    ports:
      - "3000:3000"
    volumes:
      - ~/docker/prometheus_data/grafana_data:/var/lib/grafana

  pushgateway:
    image: prom/pushgateway
    container_name: pushgateway
    user: root
    ports:
      - "9091:9091"
    volumes:
      - ~/docker/prometheus_data/pushgateway_data:/var/lib/pushgateway

前两项配置两个 centos 容器,每个容器都运行 exporter,用于生成 prometheus 所需要主机 metrics。

exporter 启动的默认端口是 9100,为了在外部访问,我们将其分别映射为 9101 和 9102 端口。

为了在 centos 容器内部执行 exporter,我们使用 bind mount 的方式,并使用 command 来执行 exporter。

参照docker-compose.yml的volumes配置项在本机linux环境创建prometheus,grafana,pushgateway相对应的目录。目录结构如下

oliver@oliver-vm:~$ cd docker_data/
oliver@oliver-vm:~/docker_data$ ls
prometheus_data
oliver@oliver-vm:~/docker_data$ cd prometheus_data/
oliver@oliver-vm:~/docker_data/prometheus_data$ ls
grafana_data  node_exporter  prometheus  prometheus_db  pushgateway_data
oliver@oliver-vm:~/docker_data/prometheus_data$ cd prometheus
oliver@oliver-vm:~/docker_data/prometheus_data/prometheus$ ls
prometheus.yml

并在 ~/docker_data/prometheus_data/prometheus目录下创建prometheus.yml文件

global:
  scrape_interval: 5s

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['prometheus:9090']
  - job_name: 'linux-exporter'
    metrics_path: /metrics
    static_configs:
      - targets: ['centos1:9100', 'centos2:9100','pushgateway:9091']

docker-compose启动所有容器

执行 docker-compose up ,成功启动容器 centos1 , centos2, prometheus, grafana, pushgateway ,打开浏览器,输入地址 http://127.0.0.1:9101/metricshttp://127.0.0.1:9102/metrics 可以看到 metrics 输出。

输入地址 http://127.0.0.1:9090/targets ,可以看到 3个 centos 容器 targets 的状态都为 UP 状态,说明 prometheus 可以正常获取 exporter 的数据。

###grafana可视化 打开浏览器,输入地址 http://127.0.0.1:3000 ,输入用户名 admin 和密码 admin,登录进 grafana。 添加 data source

dashboard用开源的,在地址 grafana.com/grafana/das… 可以看到可以使用的 dashboard。这里我们选择 dashboard id 为 8918 的 dashboard,并导入到 grafana,就可以看到比较丰富的图表信息了:

pushgateway采集自定义metric

python的一个简单推送脚本

#!/usr/bin/python3
from prometheus_client import CollectorRegistry, Gauge, push_to_gateway
registry = CollectorRegistry()
g = Gauge('ping_status_metric', '检测最大响应时间',['dst_ip','city'], registry=registry)
g.labels('192.168.140.1','chengdu').set(42.2) 
g.labels('192.168.140.1','chnegdu').dec(2)  
push_to_gateway('http://192.168.140.136:9091', job='ping_status', registry=registry)

运行后打开 http://127.0.0.1:9091 pushgateway的前端页面,可以看到对应的job, metric,lables还有 value的信息

此时也可以在prometheus的页面查询到对应metric