banner
Bathe

Bathe

可観測性: Prometheusのデプロイメント

システムの可観測性を向上させるために、Prometheus を使用して、システムのさまざまなレベルでのリソース消費を監視できます。たとえば、システムレベルのディスク I/O やネットワーク帯域幅、テナントレベルの CPU 消費やメモリ使用量、コンポーネントレベルの Ray クラスターリソース利用、バックエンドプラットフォームのシステムコール数、ガーベジコレクションの状態、オペレーターレベルのオブジェクトサイズや実行時間などです。このデータを蓄積することで、開発者は問題をトラブルシューティングし、次のシステム最適化の方向性を提供できます。

Prometheus をデプロイする方法は 2 つあります。**1 つ目は、Docker-Compose に基づく軽量デプロイメントです。** これは、1 台のマシンまたは限られた数のマシンのみがあるシナリオで主にデプロイされます。**2 つ目は、Kubernetes に基づくデプロイメントです。** これらのデプロイメントと、デプロイ担当者のための具体的な操作手順について詳細に紹介します。

Docker-Compose に基づくデプロイメント#

Docker-Compose でデプロイする際、クライアントのサーバーのリソースはしばしば限られています。一部のクライアントにとって、Prometheus コンポーネントに 500MB のメモリを占有することは受け入れられません。したがって、Prometheus コンポーネントはプラグイン可能に設計する必要があります。さらに、クライアントが複数のサーバーを持っている可能性を考慮すると、Prometheus はシステム機能から比較的独立しているため、Ray クラスターリソースを占有せずにアイドルマシンに別々にデプロイできます。そのため、既存のデプロイメントファイルに統合するのではなく、Prometheus をデプロイするための別のデプロイメントファイルを使用します。

各サーバーに Docker および Docker-Compose 環境がすでにインストールされていると仮定します。合計 N 台のサーバーがあり、Prometheus 監視モジュールは 1 台のマスターマシンと N-1 台のスレーブマシンに分けることができます。Docker-Compose に基づく Prometheus のデプロイプロセスは、以下の 2 つのステップに分けられます。

  • 各スレーブサーバーにサービスを作成します。
  • マスターサーバーにサービスを作成します。

各スレーブサーバーにサービスを作成する#

サービスのための設定ファイルを作成します。この設定ファイルは、スレーブサーバーのポート 9100 を占有します。サーバーの IP アドレスが 192.168.88.101 であると仮定すると、node-exporter は 192.168.88.101:9100 で実行されます。次のステップでは、192.168.88.101:9100 の情報をマスターの prometheus.yml 設定ファイルに追加する必要があります。

version: '3'
services:
  node-exporter:
    image: prom/node-exporter:latest
    container_name: node_exporter
    hostname: node-exporter
    restart: always
    volumes:
      - /proc:/host/proc:ro
      - /sys:/host/sys:ro
      - /:/rootfs:ro
      - /etc/hostname:/etc/hostname:ro
    ports:
      - "9100:9100"
    # ポート9100が占有されている場合は、次のように使用できます。
    # - "9200:9100"
networks:
  - monitor

networks:
  monitor:
    driver: bridge
    ipam:
      config:
        - subnet: 172.16.102.0/24

同じディレクトリでdocker-compose up -dを実行してサービスを開始します。

マスターサーバーにサービスを作成する#

マスターのホストの IP アドレスが 192.168.88.13 であると仮定します。まず、同じディレクトリにdocker-compose.ymlprometheus.ymlを作成します。docker-compose.ymlに示されているように:

  • マスター機のnode-exporterは 192.168.88.13:9100 で作成されます。
  • マスター機のprometheusは 192.168.88.13:9090 で作成されます。
  • マスター機のgrafanaは 192.168.88.13:3000 で作成されます。
  • マスター機のalertmanagerは 192.168.88.13:9093 で作成されます。
  • マスター機のcadvisorは 192.168.88.13:8080 で作成されます。
version: "3.7"
services:
  # サービス1: ノード監視
  node-exporter:
    image: prom/node-exporter:latest
    container_name: "node-exporter"
    ports:
      - "9100:9100"
    restart: always
  # サービス2: ノード監視
  prometheus:
    image: prom/prometheus:latest
    container_name: "prometheus0"
    restart: always
    ports:
      - "9090:9090"
    volumes:
      - "./prometheus.yml:/etc/prometheus/prometheus.yml"
      - "./prometheus_data:/prometheus"
  # サービス3: データダッシュボード
  grafana:
    image: grafana/grafana
    container_name: "grafana"
    ports:
      - "3000:3000"
    restart: always
    volumes:
      - "./grafana_data:/var/lib/grafana"
      - "./grafana_log:/var/log/grafana"
      - "./grafana_data/crypto_data:/crypto_data"  # ホストアドレスはコロンの前、コンテナアドレスはコロンの後です。これはsqliteデータベースの場所を指定するために使用されます。
  # サービス4: アラート処理
  alertmanager:
    image: prom/alertmanager:latest
    container_name: Myalertmanager
    hostname: alertmanager
    restart: always
    ports:
      - '9093:9093'
    volumes:
      - './prometheus/config:/config'
      - './prometheus/data/alertmanager:/alertmanager/data'
  # サービス5: Docker監視
  cadvisor:
    image: lagoudocker/cadvisor:v0.37.0
    container_name: cadvisor
    restart: always
    volumes:
      - /:/rootfs:ro
      - /var/run:/var/run:rw
      - /sys:/sys:ro
      - /dev/disk/:/dev/disk:ro
      - /var/lib/docker/:/var/lib/docker:ro
    command:
      - "--disable_metrics=udp,tcp,percpu,sched"
      - "--storage_duration=15s"
      - "-docker_only=true"
      - "-housekeeping_interval=30s"
      - "-disable_metrics=disk"
    ports:
      - 8080:8080
    networks:
      - monitor
networks:
  monitor:
    name: monitor
    driver: bridge
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
  - static_configs:
    - targets:
    # マスター機のdocker-compose.ymlの'alertmanager'設定ファイルと一致する必要があります。
       - 192.168.88.13:9093

# ルールを一度読み込み、グローバルな'evaluation_interval'に従って定期的に評価します。
rule_files:
  #- "app/prometheus/rules/*.yml"
  - "rule.yml"
  # - "first_rules.yml"
  # - "second_rules.yml"

# 正確に1つのエンドポイントをスクレイプするためのスクレイプ構成:
# ここではPrometheus自体です。
scrape_configs:
  # ジョブ名は、スクレイプされた任意のタイムシリーズにラベル`job=<job_name>`として追加されます。
  - job_name: 'slave101NodeExporter'
    static_configs:
    - targets: ['192.168.88.101:9100']
      labels:
        host: slave101
  - job_name: 'masterNodeExporter'
    static_configs:
    - targets: ['192.168.88.13:9100']
      labels:
        host: master
  - job_name: 'masterCadvisor'
    static_configs:
    - targets: ['192.168.88.13:8080']
      labels:
        host: master
  # 他のサーバーのNodeExporterを追加
  # - job_name: 'slave21NodeExporter'
  #   static_configs:
  #   - targets: ['192.168.88.21:9100']
  #     labels:
  #       host: slave21NodeExporter

K8S に基づくデプロイメント#

Kubesphere に Prometheus と Node-exporter がネイティブにインストールされているため、Grafana のみを Kubesphere にインストールする必要があります。手順は主に 2 つの部分から構成されます:Helm を使用して Grafana をデプロイし、Grafana に永続ボリュームを追加します。

Helm を使用して Grafana をデプロイする#

K8S に基づくデプロイメント方法は、Helm を使用してデプロイします。次のコマンドを使用して、kubesphere-monitoring-system 名前空間(デフォルト)に Grafana を作成します。

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update
helm install grafana grafana/grafana -n kubesphere-monitoring-system

Grafana に永続ボリュームを追加する
次に、Grafana に永続ボリュームを追加して、ダッシュボードやユーザー情報を永続的に保存できるようにします。まず、kubesphere-monitoring-system に「grafana-storage」という名前の PVC を作成します。

kubectl create pvc grafana-storage -n kubesphere-monitoring-system --size=1Gi

次に、Grafana の開発に対応する YAML ファイルの断片を以下のように修正します。

  volumes:
  - configMap:
      defaultMode: 420
      name: grafana
    name: config
  - name: grafana-storage
    persistentVolumeClaim:
      claimName: grafana-storage
読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。