CodeGym /コース /Docker SELF /モニタリングとログの設定

モニタリングとログの設定

Docker SELF
レベル 24 , レッスン 1
使用可能

7.1 Prometheusを使ったモニタリングの設定

このステップでは、複数コンテナアプリケーションのモニタリングとログ設定について説明するよ。これにより、サービスの状態やパフォーマンスを確認できるし、問題の診断のためにログを収集して分析することもできるよ。

目的: サービスからメトリクスを収集して、それを可視化してアプリのパフォーマンスや状態をモニタリングすることだよ。

Prometheusのインストールと設定

この例では、PrometheusはDockerを使って起動されるよ。これにより、クロスプラットフォーム性が確保されて、Dockerをサポートするどんなオペレーティングシステムでも同じようにモニタリングが展開できるんだ。

1. Prometheusの設定用ディレクトリを作成する:

ターミナル

mkdir prometheus
cd prometheus

2. 設定ファイル prometheus.yml を作成する:

Yaml

global:
  scrape_interval: 15s

scrape_configs:
  - job_name: 'flask-app'
    static_configs:
      - targets: ['backend:5000']
  - job_name: 'node-app'
    static_configs:
      - targets: ['frontend:3000']

3. PrometheusのためのDockerfileを作成する:

dockerfile

FROM prom/prometheus
COPY prometheus.yml /etc/prometheus/prometheus.yml

4. compose.yamlにPrometheusを追加する:

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network

  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb

  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data

  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network

  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network

networks:
  task-network:
    driver: bridge

volumes:
  db-data:

7.2 Grafanaのインストールと設定

1. Grafana設定用ディレクトリ作成:

Terminal

mkdir grafana
cd grafana

2. Grafana用Dockerfile作成:

dockerfile

FROM grafana/grafana

3. docker-compose.ymlにGrafana追加:

Yaml

  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network

4. GrafanaをPrometheusと連携する設定:

  1. docker compose upを使ってコンテナを起動します。
  2. ブラウザでhttp://localhost:3033にアクセスします。
  3. デフォルトのクレデンシャル (admin/admin) を使ってログインします。
  4. "Configuration" -> "Data Sources"に移動し、新しいデータソースを追加します。
  5. "Prometheus"を選択し、URL http://prometheus:9090を指定します。
  6. 設定を保存します。

Grafanaでダッシュボード作成

  1. 新しいダッシュボード作成:
    • "Create" -> "Dashboard"に移動します。
    • "Add new panel"をクリックします。
    • "Query"セクションでデータソースPrometheusを選択します。
    • メトリクスを取得するためにPromQLクエリを入力します。例えば、CPU使用率をモニタリングするには:
  2. Promql
    
    rate(container_cpu_usage_seconds_total[1m]) 
            
  3. パネル設定 (Panel):
    • チャートタイプを選択します (例えば、"Graph")。
    • パネルを設定します (例えば、名前、凡例、軸など)。
    • "Apply"をクリックしてパネルを保存します。
  4. 追加のパネル作成:
    • 他のメトリクス (メモリ、ネットワーク、ディスクなど) のために、これらの手順を繰り返します。

7.3 ELK Stackの設定

ELK Stack (Elasticsearch, Logstash, Kibana)を使ったログの設定。

目的: サービスからのログを収集、保存、分析すること。

Elasticsearchのインストールと設定

compose.yamlElasticsearchを追加:

Yaml

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.15.0
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network

Logstashのインストールと設定

ステップ 1. Logstash用のディレクトリを作成:

Terminal

mkdir logstash
cd logstash

ステップ 2. logstash.conf設定ファイルを作成:

Text

input {
  beats {
    port => 5044
  }
}
filter {
  json {
    source => "message"
  }
}
output {
  elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "docker-logs-%{+YYYY.MM.dd}"
  }
}

ステップ 3. Logstash用のDockerfileを作成:

dockerfile

FROM docker.elastic.co/logstash/logstash:8.15.0
COPY logstash.conf /usr/share/logstash/pipeline/logstash.conf

ステップ 4. compose.yamlにLogstashを追加:

Yaml

  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network

Kibanaのインストールと設定

compose.yamlにKibanaを追加:

Yaml

  kibana:
    image: docker.elastic.co/kibana/kibana:8.15.0
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network

ログ収集のためのFilebeatのインストール

ステップ 1. Filebeat用のディレクトリを作成:

Terminal

mkdir filebeat
cd filebeat

ステップ 2. filebeat.yml設定ファイルを作成:

Yaml

filebeat.inputs:
- type: docker
  containers.ids:
    - '*'
processors:
  - add_docker_metadata: ~
output.logstash:
  hosts: ["logstash:5044"]

ステップ 3. Filebeat用のDockerfileを作成:

dockerfile

FROM docker.elastic.co/beats/filebeat:8.15.0
COPY filebeat.yml /usr/share/filebeat/filebeat.yml

ステップ 4. compose.yamlにFilebeatを追加:

Yaml

filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network

7.4 完全なファイル

完全なファイル compose.yaml

Yaml

version: '3'

services:
  frontend:
    build: ./frontend
    ports:
      - "3000:3000"
    networks:
      - task-network
        
  backend:
    build: ./backend
    ports:
      - "5000:5000"
    depends_on:
      - database
    networks:
      - task-network
    environment:
      - DATABASE_URL=postgresql://taskuser:taskpassword@database:5432/taskdb
        
  database:
    image: postgres:13
    environment:
      - POSTGRES_DB=taskdb
      - POSTGRES_USER=taskuser
      - POSTGRES_PASSWORD=taskpassword
    networks:
      - task-network
    volumes:
      - db-data:/var/lib/postgresql/data
        
  nginx:
    build: ./nginx
    ports:
      - "80:80"
    depends_on:
      - frontend
      - backend
    networks:
      - task-network
        
  prometheus:
    build: ./prometheus
    ports:
      - "9090:9090"
    networks:
      - task-network
        
  grafana:
    image: grafana/grafana
    ports:
      - "3033:3000"
    depends_on:
      - prometheus
    networks:
      - task-network
        
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.9.2
    environment:
      - discovery.type=single-node
    ports:
      - "9200:9200"
    networks:
      - task-network
        
  logstash:
    build: ./logstash
    ports:
      - "5044:5044"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  kibana:
    image: docker.elastic.co/kibana/kibana:7.9.2
    ports:
      - "5601:5601"
    depends_on:
      - elasticsearch
    networks:
      - task-network
        
  filebeat:
    build: ./filebeat
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock:ro"
    depends_on:
      - logstash
    networks:
      - task-network
        
networks:
  task-network:
    driver: bridge
        
volumes:
  db-data:
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION