システムの可観測性を向上させるために、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.yml
とprometheus.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