Docker使用Prometheus+Grafana监控容器信息


cAdvisor 是谷歌公司用来分析运行中的 Docker 容器的资源占用以及性能特性的工具。

cAdvisor 是一个运行中的守护进程用来收集、聚合、处理和导出运行容器相关的信息,每个容器保持独立的参数、历史资源使用情况和完整的资源使用数据。当前支持 lmctfy 容器和 Docker 容器。

        所有Docker服务器均需安装cAdvisor

cat <<'EOF'>cAdvisor.yml
version: '2'

services:
  cadvisor:
    restart: always
    image: docker.io/google/cadvisor
    ports:
      - '8080:8080'
    volumes:
      - '/:/rootfs:ro'
      - '/var/run:/var/run:rw'
      - '/sys:/sys:ro'
      - '/data/docker:/var/lib/docker:ro'
      - '/dev/disk/:/dev/disk:ro'
EOF

docker-compose -f cAdvisor.yml up -d

    

在Prometheus的架构设计中,Prometheus Server并不直接服务监控特定的目标,其主要任务负责数据的收集,存储并且对外提供数据查询支持。因此,为了能够监控到某些东西,如主机的CPU使用率,需要使用到Exporter。Prometheus周期性的从Exporter暴露的HTTP服务地址(通常是/metrics)拉取监控样本数据。

Node-exporter 的作用,就是用于机器系统数据收集。我们在展示数据时,数据肯定是有来源的,监控系统,监控的数据有:CPU、内存、磁盘、I/O等信息。所以就需要部署Node-exporter,我们一起来看下部署过程。

所有Docker服务器均需安装Node-exporter:

cat <<'EOF'>node-exporter.yml
version: '2'

services:
  node-exporter:
    restart: always
    image: docker.io/prom/node-exporter
    ports:
      - '9100:9100'
    volumes:
      - "/proc:/host/proc"
      - "/sys:/host/sys"
      - "/:/rootfs"
      - "/etc/localtime:/etc/localtime"
    command: --path.procfs /host/proc --path.sysfs /host/sys --collector.filesystem.ignored-mount-points "^/(sys|proc|dev|host|etc)($$|/)"
EOF

docker-compose -f node-exporter.yml up -d


Prometheus配置

sudo sh -c "cat >>/etc/prometheus/prometheus.yml" <<'EOF'
global:
  scrape_interval: 15s
  scrape_timeout: 10s
  evaluation_interval: 15s
alerting:
  alertmanagers:
  - scheme: http
    timeout: 10s
    api_version: v1
    static_configs:
    - targets: []
scrape_configs:
- job_name: prometheus
  honor_timestamps: true
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  static_configs:
  - targets:
    - localhost:9090
    - docker-1:8080
    - docker-1:9100 
    - docker-2:8080
    - docker-2:9100
EOF

安装Prometheus:

cat <<'EOF'>prometheus.yml
version: '2'
services:
  prometheus-operator:
    restart: always
    image: docker.io/bitnami/prometheus:2
    ports:
      - 9090:9090
    volumes:
      - '/data/bitnami/prometheus.yml:/etc/prometheus/prometheus.yml'
EOF

docker-compose -f prometheus.yml up -d

安装Grafana:

cat <<'EOF'>grafana.yml
version: '2'    
services:    
  grafana:    
    image: docker.io/bitnami/grafana:8    
    ports:    
      - '3000:3000'    
    environment:    
      - 'GF_SECURITY_ADMIN_PASSWORD=bitnami'    
    volumes:    
      - grafana_data:/opt/bitnami/grafana/data    
volumes:    
  grafana_data:    
    driver: local    
EOF

docker-compose -f prometheus.yml up -d

使用dashboard:

grafana dashboard  import  11558   893