このチュートリアルでは、オープンソースの Prometheus を使用して、Google Kubernetes Engine(GKE)にデプロイされたアプリケーションのマイクロサービスに livenessProbe を設定する方法について説明します。
このチュートリアルでは、オープンソースの Prometheus を使用します。ただし、各 GKE Autopilot クラスタは、Prometheus 指標向けの Google Cloud のフルマネージド、マルチクラウド、クロスプロジェクト ソリューションである Managed Service for Prometheus を自動的にデプロイします。Google Cloud Managed Service for Prometheus により、Prometheus を大規模に手動で管理、運用しなくても、Prometheus を使用してワークロードのモニタリングや、アラートの送信を行うことができます。
Grafana などのオープンソース ツールを使用して、Prometheus によって収集された指標を可視化することもできます。
目標
- クラスタを作成します。
- Prometheus をデプロイします。
- サンプル アプリケーションの Bank of Anthos をデプロイします。
- Prometheus livenessProbe を構成します。
- Prometheus アラートを構成します。
- Slack チャネルで通知を受信するように Alertmanager を構成します。
- 停止をシミュレートして Prometheus をテストします。
費用
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。
始める前に
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
-
In the Google Cloud console, on the project selector page, click Create project to begin creating a new Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
-
Enable the GKE API.
- Helm API をインストールします。
環境を準備する
このチュートリアルでは、Cloud Shell を使用して Google Cloud でホストされるリソースを管理します。
デフォルトの環境変数を設定します。
gcloud config set project PROJECT_ID gcloud config set compute/region COMPUTE_REGION
次のように置き換えます。
PROJECT_ID
: Google Cloud のプロジェクト ID。PROJECT_ID
: クラスタの Compute Engine のリージョン。このチュートリアルでは、リージョンはus-central1
です。通常、近くのリージョンがおすすめです。
このチュートリアルで使用するサンプル リポジトリのクローンを作成します。
git clone https://github.com/GoogleCloudPlatform/bank-of-anthos.git cd bank-of-anthos/
クラスタを作成します。
gcloud container clusters create-auto CLUSTER_NAME \ --release-channel=CHANNEL_NAME \ --region=COMPUTE_REGION
次のように置き換えます。
CLUSTER_NAME
: 新しいクラスタの名前。CHANNEL_NAME
: リリース チャンネルの名前。
Prometheus をデプロイする
サンプル Helm チャートを使用して Prometheus をインストールします。
helm repo add bitnami https://charts.bitnami.com/bitnami
helm install tutorial bitnami/kube-prometheus \
--version 8.2.2 \
--values extras/prometheus/oss/values.yaml \
--wait
このコマンドを実行すると、Prometheus が次のコンポーネントとともにインストールされます。
- Prometheus Operator: オープンソースの Prometheus をデプロイ、構成します。
- Alertmanager: Prometheus サーバーから送信されたアラートを処理し、それらを Slack などのアプリケーションにルーティングします。
- ブラックボックス エクスポータ: HTTP、HTTPS、DNS、TCP、ICMP、gRPC を使用して Prometheus にエンドポイントをプローブさせます。
Bank of Anthos をデプロイする
Bank of Anthos サンプル アプリケーションをデプロイします。
kubectl apply -f extras/jwt/jwt-secret.yaml
kubectl apply -f kubernetes-manifests
Slack 通知
Slack 通知を設定するには、Slack アプリケーションを作成し、アプリケーションの着信 Webhook を有効にして、Slack ワークスペースにアプリケーションをインストールする必要があります。
Slack アプリケーションの作成
メールアドレスで登録するか、またはワークスペース管理者から送信された招待状を利用して、Slack ワークスペースに参加します。
ワークスペース名と Slack アカウントの認証情報を使用して、Slack にログインします。
-
- [Create an app] ダイアログで [From scratch] をクリックします。
- アプリ名を指定し、Slack ワークスペースを選択します。
- [Create App] をクリックします。
- [Add Features and Features] で、[Incoming Webhooks] をクリックします。
- [Activate Incoming Webhooks] の切り替えボタンをクリックします。
- [Webhook URLs for Your Workspace] セクションで、[Add New Webhook to Workspace] をクリックします。
- 表示された認証ページで、通知を受け取るチャネルを選択します。
- [Allow] をクリックします。
- [Webhook URLs for Your Workspace] セクションに Slack アプリケーションの Webhook が表示されます。後で使用できるように、URL を保存します。
Alertmanager を構成する
Webhook URL を格納する Kubernetes Secret を作成します。
kubectl create secret generic alertmanager-slack-webhook --from-literal webhookURL=SLACK_WEBHOOK_URL
kubectl apply -f extras/prometheus/oss/alertmanagerconfig.yaml
SLACK_WEBHOOK_URL
は、前のセクションの Webhook の URL に置き換えます。
Prometheus を構成する
次のマニフェストを確認します。
このマニフェストでは、Prometheus livenessProbe を記述しています。次のフィールドを使用しています。
spec.jobName
: スクレイピングされた指標に割り当てられたジョブ名。spec.prober.url
: ブラックボックス エクスポータのサービス URL。これには、Helm チャートで定義されているブラックボックス エクスポータのデフォルト ポートが含まれます。spec.prober.path
: 指標収集のパス。spec.targets.staticConfig.labels
: ターゲットからスクレイピングされたすべての指標に割り当てられたラベル。spec.targets.staticConfig.static
: プローブするホストのリスト。
マニフェストをクラスタに適用します。
kubectl apply -f extras/prometheus/oss/probes.yaml
次のマニフェストを確認します。
このマニフェストでは
PrometheusRule
を記述しています。次のフィールドを使用しています。spec.groups.[*].name
: ルールグループの名前。spec.groups.[*].interval
: グループ内のルールが評価される頻度。spec.groups.[*].rules[*].alert
: アラートの名前。spec.groups.[*].rules[*].expr
: 評価する PromQL 式。spec.groups.[*].rules[*].for
: アラートを発生させるまでの時間。spec.groups.[*].rules[*].annotations
: 各アラートに追加するアノテーションのリスト。これはアラートルールでのみ有効です。spec.groups.[*].rules[*].labels
: 追加または上書きするラベル。
マニフェストをクラスタに適用します。
kubectl apply -f extras/prometheus/oss/rules.yaml
停止のシミュレーションを行う
contacts
Deployment をゼロにスケーリングして、停止をシミュレートします。kubectl scale deployment contacts --replicas 0
Slack ワークスペース チャンネルに通知メッセージが表示されます。GKE が Deployment をスケーリングするまでに 5 分ほどかかることがあります。
contacts
Deployment を復元します。kubectl scale deployment contacts --replicas 1
Slack ワークスペース チャンネルにアラート解決通知メッセージが表示されます。GKE が Deployment をスケーリングするまでに 5 分ほどかかることがあります。
クリーンアップ
このチュートリアルで使用したリソースについて、Google Cloud アカウントに課金されないようにするには、リソースを含むプロジェクトを削除するか、プロジェクトを維持して個々のリソースを削除します。
プロジェクトを削除する
Delete a Google Cloud project:
gcloud projects delete PROJECT_ID
リソースを個別に削除する
Kubernetes リソースを削除します。
kubectl delete -f kubernetes-manifests
Prometheus をアンインストールします。
helm uninstall tutorial
GKE クラスタを削除します。
gcloud container clusters delete CLUSTER_NAME --quiet
次のステップ
- Google Cloud Managed Service for Prometheus について学習する。これは、Prometheus に基づくフルマネージドのグローバル指標ソリューションで、すべての Autopilot クラスタにデフォルトでデプロイされます。
- Google Cloud に関するリファレンス アーキテクチャ、図、ベスト プラクティスを確認する。Cloud アーキテクチャ センターをご覧ください。