dockerコンテナのパフォーマンスモニター準備

■はじめに

最近、SelenoidやGgrの妥当性を説明する文章を書く機会がちょいちょいあったのですが、その時の根拠としてリソースの枯渇があります。
が、ちゃんとDockerコンテナのパフォーマンスモニタリングをしていなかったので、簡単な整理をはじめます。

■今回使うもの

  • prometheus(サービス監視ツール)
  • grafana(監視データの可視化ツール)
  • grafana loki(ログ収集ツール)
  • cAdvisor(コンテナ監視ツール)
  • promtail(ログ収集ツールへの送信ツール)

■本日はdocker-compose.ymlのみ

実はこの構成、ログ周り以外は1年ぐらい前に個人的に組んでいたのです。
今回良い機会なので、ちょっと時間をとって綺麗に整理していこうと思います。

まずは忘れないうちにdocker-compose.yml

version: "3.8"
services:
  prometheus:
    image: prom/prometheus
    container_name: prometheus
    volumes:
      - ./prometheus:/etc/prometheus
    command: "--config.file=/etc/prometheus/prometheus.yml"
    ports:
      - '127.0.0.1:9090:9090'
    networks:
      default:
        aliases:
          - prometheus
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "stat /etc/prometheus || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 40s
  cadvisor:
    image: google/cadvisor
    container_name: cadvisor
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /var/lib/docker/:/var/lib/docker:ro
    ports:
      - '127.0.0.1:8080:8080'
    networks:
      default:
        aliases:
          - cadvisor
    restart: always
    healthcheck:
      test: ["CMD-SHELL", "stat /var/lib/docker || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 40s
  grafana:
    image: grafana/grafana:latest
    container_name: grafana
    ports:
      - '127.0.0.1:3000:3000'
    volumes:
      - ./grafana:/var/lib/grafana
    networks:
      default:
        aliases:
          - loki
    restart: always
    environment:
      GF_SECURITY_ADMIN_USER: admin
      GF_SECURITY_ADMIN_PASSWORD: admin
      GF_USERS_ALLOW_SIGN_UP: "false"
      GF_USERS_ALLOW_ORG_CREATE: "false"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:3000"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 40s
  promtail:
    image: grafana/promtail:latest
    container_name: promtail
    volumes:
      - /var/log:/var/log
    command: -config.file=/etc/promtail/docker-config.yaml
    networks:
      default:
        aliases:
          - loki
    healthcheck:
      test: ["CMD-SHELL", "stat /usr/bin/promtail || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 40s
  loki:
    image: grafana/loki:latest
    container_name: loki
    ports:
      - '127.0.0.1:3100:3100'
    command: -config.file=/etc/loki/local-config.yaml
    networks:
      default:
        aliases:
          - loki
    healthcheck:
      test: ["CMD-SHELL", "stat /etc/loki/local-config.yaml || exit 1"]
      interval: 10s
      timeout: 10s
      retries: 3
      start_period: 40s

次回以降、順次ブラッシュアップしていきます!
簡単ですが今回はここまで。

ではでは。