開発者ドキュメント

DigitalOceanでPrometheus、Grafana、Alertmanagerを使用してKubernetesモニタリングスタックを設定する方法

ステータス:非推奨

この記事は廃止され、メンテナンスされなくなりました。

理由

このチュートリアルの手順は引き続き機能しますが、保守が不必要に困難になる構成が生成されます。

代わりに参照してください

この記事は参照として役立つ場合がありますが、ベストプラクティスに従わない場合があります。 最新の記事を使用することを強くお勧めします。

序章

トレースとロギングに加えて、モニタリングとアラートはKubernetesの可観測性スタックの重要なコンポーネントです。 DigitalOcean Kubernetesクラスターのモニタリングを設定すると、リソースの使用状況を追跡し、アプリケーションエラーを分析およびデバッグできます。

監視システムは通常、メトリックデータと視覚化レイヤーを格納する時系列データベースで構成されます。 さらに、アラートレイヤーはアラートを作成および管理し、必要に応じて統合および外部サービスにアラートを渡します。 最後に、1つ以上のコンポーネントが、スタックによるアラート用に保存、視覚化、および処理されるメトリックデータを生成または公開します。

人気のあるモニタリングソリューションの1つは、オープンソースの Prometheus Grafana Alertmanager スタックで、kube-state-metricsおよびと一緒にデプロイされます。 X174X] node_exporter は、クラスターレベルのKubernetesオブジェクトメトリックと、CPUやメモリ使用量などのマシンレベルのメトリックを公開します。

このモニタリングスタックをKubernetesクラスターにロールアウトするには、個々のコンポーネント、マニフェスト、Prometheusメトリック、およびGrafanaダッシュボードを構成する必要があります。これには時間がかかる場合があります。 DigitalOcean CommunityDeveloperEducationチームによってリリースされたDigitalOceanKubernetes Cluster Monitoring Quickstart には、Prometheus-Grafana-Alertmanagerクラスターモニタリングスタックの完全に定義されたマニフェスト、および事前構成されたアラートとGrafanaダッシュボードのセットが含まれています。 これは、迅速に立ち上げて実行するのに役立ち、可観測性スタックを構築するための強固な基盤を形成します。

このチュートリアルでは、この事前構成されたスタックをDigitalOcean Kubernetesにデプロイし、Prometheus、Grafana、およびAlertmanagerインターフェースにアクセスして、カスタマイズする方法を説明します。

前提条件

開始する前に、 DigitalOcean Kubernetesクラスターを利用でき、ローカル開発環境に次のツールがインストールされている必要があります。

<$>[注] ノート: Cluster Monitoring Quickstartは、DigitalOceanKubernetesクラスターでのみテストされています。 クイックスタートを他のKubernetesクラスタで使用するには、マニフェストファイルにいくつかの変更が必要になる場合があります。 <$>

ステップ1—GitHubリポジトリのクローンを作成して環境変数を構成する

まず、gitを使用してDigitalOcean Kubernetes Cluster MonitoringGitHubリポジトリをローカルマシンに複製します。

  1. git clone https://github.com/do-community/doks-monitoring.git

次に、リポジトリに移動します。

  1. cd doks-monitoring

次のディレクトリ構造が表示されます。

  1. ls
Output
LICENSE README.md changes.txt manifest

The manifest ディレクトリには、サービスアカウント Deployment StatefulSets ConfigMaps など、すべてのモニタリングスタックコンポーネントのKubernetesマニフェストが含まれています。 これらのマニフェストファイルとその構成方法の詳細については、監視スタックの構成に進んでください。

物事を稼働させたいだけの場合は、まず APP_INSTANCE_NAMENAMESPACE 環境変数。スタックのコンポーネントの一意の名前を構成し、スタックがデプロイされる名前空間を構成するために使用されます。

  1. export APP_INSTANCE_NAME=sammy-cluster-monitoring
  2. export NAMESPACE=default

このチュートリアルでは、 APP_INSTANCE_NAMEsammy-cluster-monitoring、これにより、すべてのモニタリングスタックのKubernetesオブジェクト名が付加されます。 監視スタックの代わりに、一意の説明プレフィックスを使用する必要があります。 また、名前空間をに設定します default. 監視スタックを名前空間otherにデプロイする場合 default、最初にクラスターで作成するようにしてください。

  1. kubectl create namespace "$NAMESPACE"

次の出力が表示されます。

Output
namespace/sammy created

この場合、 NAMESPACE 環境変数がに設定されました sammy. チュートリアルの残りの部分では、次のように想定します。 NAMESPACE に設定されています default.

今、使用します base64 base64へのコマンド-安全なGrafanaパスワードをエンコードします。 選択したパスワードを必ず置き換えてください your_grafana_password:

  1. export GRAFANA_GENERATED_PASSWORD="$(echo -n 'your_grafana_password' | base64)"

macOSを使用している場合は、 openssl base64 デフォルトでインストールされるコマンド。

この時点で、スタックのKubernetesマニフェストを取得し、必要な環境変数を構成したので、構成された変数をKubernetesマニフェストファイルに置き換えて、Kubernetesクラスターにスタックを作成する準備が整いました。

ステップ2—監視スタックの作成

DigitalOcean Kubernetes Monitoring Quickstartリポジトリには、次のモニタリング、スクレイピング、および視覚化コンポーネントのマニフェストが含まれています。

デフォルトでは、node-exporter、kube-state-metrics、および上記の他のコンポーネントによって生成されたスクレイピングメトリックとともに、Prometheusは次のコンポーネントからメトリックをスクレイピングするように構成されます。

これらのコンポーネントの構成とPrometheusスクレイピングジョブの詳細については、監視スタックの構成に進んでください。 ここで、前の手順で定義した環境変数をリポジトリのマニフェストファイルに置き換え、個々のマニフェストを単一のマスターファイルに連結します。

使用することから始めます awkenvsubst 記入するには APP_INSTANCE_NAME, NAMESPACE、 と GRAFANA_GENERATED_PASSWORD リポジトリのマニフェストファイルの変数。 変数値に代入した後、ファイルは結合され、と呼ばれるマスターマニフェストファイルに保存されます。 sammy-cluster-monitoring_manifest.yaml.

  1. awk 'FNR==1 {print "---"}{print}' manifest/* \
  2. | envsubst '$APP_INSTANCE_NAME $NAMESPACE $GRAFANA_GENERATED_PASSWORD' \
  3. > "${APP_INSTANCE_NAME}_manifest.yaml"

監視スタックへの変更を追跡し、以前のバージョンにロールバックできるように、このファイルをバージョン管理に保存することを検討する必要があります。 これを行う場合は、必ずスクラブしてください admin-password Grafanaパスワードをバージョン管理にチェックインしないように、ファイルから変数を取得します。

マスターマニフェストファイルを生成したので、次を使用します kubectl apply -f マニフェストを適用し、構成したネームスペースにスタックを作成するには、次のようにします。

  1. kubectl apply -f "${APP_INSTANCE_NAME}_manifest.yaml" --namespace "${NAMESPACE}"

次のような出力が表示されます。

Output
serviceaccount/alertmanager created configmap/sammy-cluster-monitoring-alertmanager-config created service/sammy-cluster-monitoring-alertmanager-operated created service/sammy-cluster-monitoring-alertmanager created . . . clusterrolebinding.rbac.authorization.k8s.io/prometheus created configmap/sammy-cluster-monitoring-prometheus-config created service/sammy-cluster-monitoring-prometheus created statefulset.apps/sammy-cluster-monitoring-prometheus created

を使用してスタックのデプロイの進行状況を追跡できます kubectl get all. すべてのスタックコンポーネントが RUNNING、GrafanaWebインターフェースを介して事前構成されたGrafanaダッシュボードにアクセスできます。

ステップ3—Grafanaへのアクセスとメトリクスデータの調査

GrafanaサービスマニフェストはGrafanaを ClusterIP サービス。つまり、クラスター内部のIPアドレスを介してのみアクセスできます。 Kubernetesクラスタの外部でGrafanaにアクセスするには、次のいずれかを使用できます。 kubectl patch インプレースでサービスを次のような公開タイプに更新するには NodePort また LoadBalancer、 また kubectl port-forward ローカルポートをGrafanaポッドポートに転送します。 このチュートリアルではポートを転送するので、ローカルポートを転送してGrafanaサービスにアクセスするに進んでください。 Grafanaを外部に公開することに関する次のセクションは、参照用に含まれています。

ロードバランサーを使用したGrafanaサービスの公開(オプション)

外部パブリックIPを使用してGrafana用のDigitalOceanロードバランサーを作成する場合は、 kubectl patch 既存のGrafanaサービスをインプレースで更新するには LoadBalancer サービスの種類:

  1. kubectl patch svc "$APP_INSTANCE_NAME-grafana" \
  2. --namespace "$NAMESPACE" \
  3. -p '{"spec": {"type": "LoadBalancer"}}'

kubectl patch このコマンドを使用すると、Kubernetesオブジェクトをインプレースで更新して、オブジェクトを再デプロイせずに変更を加えることができます。 マスターマニフェストファイルを直接変更して、 type: LoadBalancer Grafanaサービス仕様のパラメーター。 詳細については kubectl patch およびKubernetesサービスタイプについては、公式のKubernetesドキュメントの kubectlpatchおよびServicesリソースを使用してAPIオブジェクトをインプレースで更新するを参照できます。

上記のコマンドを実行すると、次のように表示されます。

Output
service/sammy-cluster-monitoring-grafana patched

ロードバランサーを作成してパブリックIPを割り当てるには、数分かかる場合があります。 次のコマンドを使用して進行状況を追跡できます。 -w 変更を監視するフラグ:

  1. kubectl get service "$APP_INSTANCE_NAME-grafana" -w

DigitalOceanロードバランサーが作成され、外部IPアドレスが割り当てられたら、次のコマンドを使用してその外部IPをフェッチできます。

  1. SERVICE_IP=$(kubectl get svc $APP_INSTANCE_NAME-grafana \
  2. --namespace $NAMESPACE \
  3. --output jsonpath='{.status.loadBalancer.ingress[0].ip}')
  4. echo "http://${SERVICE_IP}/"

これで、に移動してGrafanaUIにアクセスできます。 http://SERVICE_IP/.

Grafanaサービスにアクセスするためのローカルポートの転送

Grafanaサービスを外部に公開したくない場合は、ローカルポートを転送することもできます 3000 を使用して、クラスターに直接Grafanaポッドに kubectl port-forward.

  1. kubectl port-forward --namespace ${NAMESPACE} ${APP_INSTANCE_NAME}-grafana-0 3000

次の出力が表示されます。

Output
Forwarding from 127.0.0.1:3000 -> 3000 Forwarding from [::1]:3000 -> 3000

これにより、ローカルポートが転送されます 3000containerPort 3000 Grafanaポッドの sammy-cluster-monitoring-grafana-0. ポートをKubernetesクラスターに転送する方法の詳細については、ポート転送を使用してクラスター内のアプリケーションにアクセスするを参照してください。

訪問 http://localhost:3000 Webブラウザで。 次のGrafanaログインページが表示されます。

ログインするには、デフォルトのユーザー名を使用します admin (変更していない場合 admin-user パラメータ)、および手順1で設定したパスワード。

次のホームダッシュボードが表示されます。

左側のナビゲーションバーで、ダッシュボードボタンを選択し、管理をクリックします。

Dashboards-configmap.yamlマニフェストで構成されたダッシュボードを一覧表示する次のダッシュボード管理インターフェイスが表示されます。

これらのダッシュボードはによって生成されます kubernetes-mixin、クラスター監視GrafanaダッシュボードとPrometheusアラートの標準化されたセットを作成できるオープンソースプロジェクト。 詳細については、kubernetes-mixinGitHubリポジトリを参照してください。

Kubernetes / Nodes ダッシュボードをクリックして、特定のノードのCPU、メモリ、ディスク、およびネットワークの使用状況を視覚化します。

これらのダッシュボードの使用方法の説明はこのチュートリアルの範囲外ですが、詳細については次のリソースを参照してください。

次のステップでは、同様のプロセスに従って、Prometheus監視システムに接続して探索します。

ステップ4—PrometheusとAlertmanagerへのアクセス

Prometheus Podsに接続するには、次を使用できます。 kubectl port-forward ローカルポートを転送します。 Grafanaの探索が終了したら、を押すことでポートフォワードトンネルを閉じることができます CTRL-C. または、新しいシェルを開いて、新しいポートフォワード接続を作成することもできます。

実行中のポッドをリストすることから始めます default 名前空間:

  1. kubectl get pod -n default

次のポッドが表示されます。

Output
sammy-cluster-monitoring-alertmanager-0 1/1 Running 0 17m sammy-cluster-monitoring-alertmanager-1 1/1 Running 0 15m sammy-cluster-monitoring-grafana-0 1/1 Running 0 16m sammy-cluster-monitoring-kube-state-metrics-d68bb884-gmgxt 2/2 Running 0 16m sammy-cluster-monitoring-node-exporter-7hvb7 1/1 Running 0 16m sammy-cluster-monitoring-node-exporter-c2rvj 1/1 Running 0 16m sammy-cluster-monitoring-node-exporter-w8j74 1/1 Running 0 16m sammy-cluster-monitoring-prometheus-0 1/1 Running 0 16m sammy-cluster-monitoring-prometheus-1 1/1 Running 0 16m

ローカルポートを転送します 9090 ポートへ 9090sammy-cluster-monitoring-prometheus-0 ポッド:

  1. kubectl port-forward --namespace ${NAMESPACE} sammy-cluster-monitoring-prometheus-0 9090

次の出力が表示されます。

Output
Forwarding from 127.0.0.1:9090 -> 9090 Forwarding from [::1]:9090 -> 9090

これは、ローカルポートが 9090 PrometheusPodに正常に転送されています。

訪問 http://localhost:9090 Webブラウザで。 次のPrometheusGraphページが表示されます。

ここから、Prometheusクエリ言語であるPromQLを使用して、データベースに保存されている時系列メトリックを選択して集計できます。 PromQLの詳細については、公式のPrometheusドキュメントから QueryingPrometheusを参照してください。

Expressionフィールドに次のように入力します kubelet_node_name 実行を押します。 メトリックを含む時系列のリストが表示されます kubelet_node_name これは、Kubernetesクラスター内のノードを報告します。 メトリックラベルで、どのノードがメトリックを生成し、どのジョブがメトリックをスクレイプしたかを確認できます。

最後に、上部のナビゲーションバーで、ステータスターゲットの順にクリックして、Prometheusがスクレイプするように構成されているターゲットのリストを表示します。 ステップ2の冒頭で説明した監視エンドポイントのリストに対応するターゲットのリストが表示されます。

Prometheusの詳細と、クラスターメトリックを照会する方法については、公式のPrometheusドキュメントを参照してください。

Prometheusによって生成されたアラートを管理するAlertmanagerに接続するには、Prometheusへの接続に使用したのと同様のプロセスに従います。 。 一般に、Prometheusの上部ナビゲーションバーにある Alerts をクリックすると、AlertmanagerAlertsを調べることができます。

Alertmanagerポッドに接続するには、もう一度使用します kubectl port-forward ローカルポートを転送します。 Prometheusの探索が終了したら、を押すことでポートフォワードトンネルを閉じることができます CTRL-Cまたは、新しいシェルを開いて新しい接続を作成します。 .

ローカルポートを転送します 9093 ポートへ 9093sammy-cluster-monitoring-alertmanager-0 ポッド:

  1. kubectl port-forward --namespace ${NAMESPACE} sammy-cluster-monitoring-alertmanager-0 9093

次の出力が表示されます。

Output
Forwarding from 127.0.0.1:9093 -> 9093 Forwarding from [::1]:9093 -> 9093

これは、ローカルポートが 9093 Alertmanagerポッドに正常に転送されています。

訪問 http://localhost:9093 Webブラウザで。 次のAlertmanagerAlertsページが表示されます。

ここから、アラートの発火とオプションでアラートの消音を調べることができます。 Alertmanagerの詳細については、公式Alertmanagerドキュメントを参照してください。

次のステップでは、いくつかの監視スタックコンポーネントをオプションで構成およびスケーリングする方法を学習します。

手順6—監視スタックの構成(オプション)

DigitalOcean Kubernetes Cluster Monitoringクイックスタートリポジトリに含まれるマニフェストは、さまざまなコンテナイメージ、さまざまな数のポッドレプリカ、さまざまなポート、およびカスタマイズされた構成ファイルを使用するように変更できます。

このステップでは、各マニフェストの目的の概要を説明し、マスターマニフェストファイルを変更してPrometheusを最大3つのレプリカにスケーリングする方法を示します。

開始するには、に移動します manifests リポジトリ内のサブディレクトリ、およびディレクトリの内容を一覧表示します。

  1. cd manifest
  2. ls
Output
alertmanager-0serviceaccount.yaml alertmanager-configmap.yaml alertmanager-operated-service.yaml alertmanager-service.yaml . . . node-exporter-ds.yaml prometheus-0serviceaccount.yaml prometheus-configmap.yaml prometheus-service.yaml prometheus-statefulset.yaml

ここには、さまざまな監視スタックコンポーネントのマニフェストがあります。 マニフェストの特定のパラメーターの詳細については、リンクをクリックして、YAMLファイル全体に含まれているコメントを参照してください。

Alertmanager

Grafana

kube-state-metrics

ノードエクスポーター

###プロメテウス

例:プロメテウスのスケーリング

監視スタックを変更する方法を示すために、Prometheusレプリカの数を2から3にスケーリングします。

を開きます sammy-cluster-monitoring_manifest.yaml 選択したエディターを使用したマスターマニフェストファイル:

  1. nano sammy-cluster-monitoring_manifest.yaml

マニフェストのPrometheusStatefulSetセクションまで下にスクロールします。

Output
. . . apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: sammy-cluster-monitoring-prometheus labels: &Labels k8s-app: prometheus app.kubernetes.io/name: sammy-cluster-monitoring app.kubernetes.io/component: prometheus spec: serviceName: "sammy-cluster-monitoring-prometheus" replicas: 2 podManagementPolicy: "Parallel" updateStrategy: type: "RollingUpdate" selector: matchLabels: *Labels template: metadata: labels: *Labels spec: . . .

レプリカの数を2から3に変更します。

Output
. . . apiVersion: apps/v1beta2 kind: StatefulSet metadata: name: sammy-cluster-monitoring-prometheus labels: &Labels k8s-app: prometheus app.kubernetes.io/name: sammy-cluster-monitoring app.kubernetes.io/component: prometheus spec: serviceName: "sammy-cluster-monitoring-prometheus" replicas: 3 podManagementPolicy: "Parallel" updateStrategy: type: "RollingUpdate" selector: matchLabels: *Labels template: metadata: labels: *Labels spec: . . .

完了したら、ファイルを保存して閉じます。

を使用して変更を適用します kubectl apply -f:

  1. kubectl apply -f sammy-cluster-monitoring_manifest.yaml --namespace default

を使用して進行状況を追跡できます kubectl get pods. これと同じ手法を使用して、Kubernetesパラメーターの多くとこの可観測性スタックの構成の多くを更新できます。

結論

このチュートリアルでは、Prometheus、Grafana、Alertmanagerのモニタリングスタックを、ダッシュボード、Prometheusルール、アラートの標準セットを使用してDigitalOceanKubernetesクラスターにインストールしました。

HelmKubernetesパッケージマネージャーを使用してこのモニタリングスタックをデプロイすることもできます。 詳細については、HelmとPrometheusを使用したDigitalOceanKubernetesクラスタモニタリングの設定方法を参照してください。 同様のスタックを起動して実行する別の方法は、現在ベータ版のDigitalOcean Marketplace KubernetesMonitoringStackソリューションを使用することです。

DigitalOcean Kubernetes Cluster Monitoringクイックスタートリポジトリは、GoogleCloudPlatformのクリックしてデプロイするPrometheusソリューションに大きく基づいて変更されています。 元のリポジトリからの変更と変更の完全なマニフェストは、クイックスタートリポジトリのchanges.mdファイルにあります。

モバイルバージョンを終了