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

クラスタ監視クイックスタートKubernetesマニフェストを入手してください!

前書き

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

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

人気のある監視ソリューションの1つは、オープンソースのhttps://prometheus.io/[Prometheus]、https://grafana.com/[Grafana]、およびhttps://github.com/prometheus/alertmanager[Alertmanager]スタックです。 kube-state-metricsおよびhttps://github.com/prometheus/node_exporter[node_exporter]と一緒にデプロイして、クラスターレベルのKubernetesオブジェクトメトリックを公開します。 CPUやメモリの使用量などのマシンレベルのメトリック。

Kubernetesクラスターでこの監視スタックを展開するには、個々のコンポーネント、マニフェスト、Prometheusメトリック、およびGrafanaダッシュボードを構成する必要がありますが、これには時間がかかる場合があります。 DigitalOcean Community Developer Educationチームによってリリースされたhttps://github.com/do-community/doks-monitoring[DigitalOcean Kubernetes Cluster Monitoring Quickstart]には、Prometheus-Grafana-Alertmanagerクラスター監視スタックの完全に定義されたマニフェストも含まれています。事前設定されたアラートとGrafanaダッシュボードのセットとして。 すぐに立ち上げて実行するのに役立ち、観測性スタックを構築するための強固な基盤を形成します。

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

前提条件

開始する前に、https://www.digitalocean.com/docs/kubernetes/quickstart/ [DigitalOcean Kubernetes cluster]が利用可能であること、およびローカル開発環境に次のツールがインストールされている必要があります。

  • ローカルマシンにインストールされ、クラスターに接続するように設定されたコマンドラインインターフェース「+ kubectl 」。 ` kubectl +`のインストールと設定の詳細については、https://kubernetes.io/docs/tasks/tools/install-kubectl/ [公式ドキュメント]をご覧ください。

  • ローカルマシンにインストールされているhttps://git-scm.com/book/en/v2/Getting-Started-Installing-Git[git]バージョン管理システム。 Ubuntu 18.04にgitをインストールする方法については、https://www.digitalocean.com/community/tutorials/how-to-install-git-on-ubuntu-18-04 [Ubuntu 18.04にGitをインストールする方法]を参照してください。

  • ローカルマシンにインストールされているCoreutils base64ツール。 Linuxマシンを使用している場合は、ほとんどの場合既にインストールされています。 OS Xを使用している場合、デフォルトでインストールされる `+ openssl base64 +`を使用できます。

手順1-GitHubリポジトリの複製と環境変数の構成

開始するには、gitを使用してDigitalOcean Kubernetes Cluster Monitoring GitHub repositoryをローカルマシンにクローンします。

git clone [email protected]:do-community/doks-monitoring.git

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

cd doks-monitoring

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

ls
OutputLICENSE
README.md
changes.txt
manifest

`+ manifest +`ディレクトリには、https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/ [サービスアカウント]、https:/など、すべての監視スタックコンポーネントのKubernetesマニフェストが含まれています。 /kubernetes.io/docs/concepts/workloads/controllers/deployment/[Deployments]、https://kubernetes.io/docs/concepts/workloads/controllers/statefulset/[StatefulSets]、https://kubernetes.io/docs / tasks / configure-pod-container / configure-pod-configmap / [ConfigMaps]など これらのマニフェストファイルとその構成方法の詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-に進んでください。 stack-on-digitalocean-kubernetes#step-6-%E2%80%94-configuring-the-monitoring-stack-optional [監視スタックの設定]。

起動して実行したいだけの場合は、 `+ APP_INSTANCE_NAME `および ` NAMESPACE +`環境変数を設定することから始めます。これらの変数は、スタックのコンポーネントに一意の名前を設定し、https://kubernetes.ioを設定するために使用されますスタックがデプロイされる/ docs / concepts / overview / working-with-objects / namespaces / [Namespace]:

export APP_INSTANCE_NAME=
export NAMESPACE=

このチュートリアルでは、「+ APP_INSTANCE_NAME 」を「 sammy-cluster-monitoring 」に設定します。これにより、すべての監視スタックKubernetesオブジェクト名が追加されます。 監視スタックの一意の説明的なプレフィックスに置き換える必要があります。 また、ネームスペースを「 default 」に設定します。 モニタリングスタックを「 default +」以外のネームスペースにデプロイする場合は、必ずクラスターで作成してください:

kubectl create namespace "$NAMESPACE"

次のような出力が表示されるはずです。

Outputnamespace/ created

この場合、 `+ NAMESPACE `環境変数は ` sammy `に設定されました。 チュートリアルの残りの部分では、 ` NAMESPACE `が ` default +`に設定されていると仮定します。

ここで、 `+ base64 `コマンドを使用して、安全なGrafanaパスワードをbase64エンコードします。 `+`を選択したパスワードに置き換えてください:

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

macOSを使用している場合は、デフォルトでインストールされる `+ openssl base64 +`コマンドに置き換えることができます。

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

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

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

  • * Prometheus *は、時系列データベースおよび監視ツールであり、メトリックエンドポイントをポーリングし、これらのエンドポイントによって公開されたデータをスクレイピングおよび処理します。 PromQL、時系列データクエリ言語を使用して、このデータをクエリできます。 Prometheusは、https://kubernetes.io/docs/concepts/storage/persistentを使用する2つのレプリカを持つhttps://kubernetes.io/docs/concepts/workloads/controllers/statefulset/[StatefulSet]としてクラスターにデプロイされます。 -volumes / [Persistent Volumes] with DigitalOcean Block Storage。 さらに、事前設定されたPrometheusアラート、ルール、およびジョブのセットは、https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/ [ConfigMap]として保存されます。 これらの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-stack-on-digitalocean-にスキップしてください監視スタックの構成のkubernetes#prometheus [Prometheus]セクション。

  • * Alertmanager *は、通常Prometheusと一緒にデプロイされ、スタックのアラートレイヤーを形成し、Prometheusによって生成されたアラートを処理し、重複排除、グループ化、電子メールやhttps://www.pagerduty.com/[PagerDuty]などの統合にルーティングします。 Alertmanagerは、2つのレプリカを持つStatefulSetとしてインストールされます。 Alertmanagerの詳細については、Prometheusのドキュメントのhttps://prometheus.io/docs/practices/alerting/[Alerting]を参照してください。

  • * Grafana *は、メトリックデータのダッシュボードとグラフを作成できるデータ視覚化および分析ツールです。 Grafanaは、1つのレプリカを持つStatefulSetとしてインストールされます。 さらに、https://github.com/kubernetes-monitoring/kubernetes-mixin [kubernetes-mixin]によって生成された事前設定済みのダッシュボードのセットがConfigMapとして保存されます。

  • * kube-state-metrics *は、Kubernetes APIサーバーをリッスンし、展開やポッドなどのKubernetesオブジェクトの状態に関するメトリックを生成するアドオンエージェントです。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとして提供され、Prometheusによって消費されます。 kube-state-metricsは、1つのレプリカを持つ自動スケーラブルhttps://kubernetes.io/docs/concepts/workloads/controllers/deployment/[Deployment]としてインストールされます。

  • * node-exporter *、クラスターノード上で実行され、OSやCPUやメモリ使用量などのハードウェアメトリックをPrometheusに提供するPrometheusエクスポーター。 これらのメトリックは、HTTPエンドポイントでプレーンテキストとしても提供され、Prometheusによって消費されます。 node-exporterはhttps://kubernetes.io/docs/concepts/workloads/controllers/daemonset/[DaemonSet]としてインストールされます。

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

  • kube-apiserver、https://kubernetes.io/docs/reference/command-line-tools-reference/kube-apiserver/ [Kubernetes APIサーバー]。

  • kubelet、kube-apiserverと対話してノード上のポッドとコンテナーを管理するプライマリノードエージェント。

  • cAdvisor、実行中のコンテナを検出し、CPU、メモリ、ファイルシステム、およびネットワーク使用量のメトリックを収集するノードエージェント。

これらのコンポーネントの構成とプロメテウススクレイピングジョブの詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-stackに進んでください。 -on-digitalocean-kubernetes#step-6-%E2%80%94-configuring-the-monitoring-stack-optional [監視スタックの設定]。 ここで、前の手順で定義した環境変数をリポジトリのマニフェストファイルに置き換え、個々のマニフェストを単一のマスターファイルに連結します。

まず、リポジトリのマニフェストファイル内の変数「+ APP_INSTANCE_NAME 」、「 NAMESPACE 」、および「 GRAFANA_GENERATED_PASSWORD 」を埋めるために、「 awk 」と「 envsubst 」を使用します。 変数値に置き換えた後、ファイルは結合され、 ` _manifest.yaml +`というマスターマニフェストファイルに保存されます。

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

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

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

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

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

Outputserviceaccount/alertmanager created
configmap/-alertmanager-config created
service/-alertmanager-operated created
service/-alertmanager created

. . .

clusterrolebinding.rbac.authorization.k8s.io/prometheus created
configmap/-prometheus-config created
service/-prometheus created
statefulset.apps/-prometheus created

`+ kubectl get all `を使用して、スタックの展開の進行状況を追跡できます。 すべてのスタックコンポーネントが「 RUNNING +」になると、Grafana Webインターフェースを介して事前設定されたGrafanaダッシュボードにアクセスできます。

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

Grafana ServiceマニフェストはGrafanaを「+ ClusterIP 」サービスとして公開します。つまり、クラスター内部IPアドレスを介してのみアクセスできます。 Kubernetesクラスターの外部でGrafanaにアクセスするには、 ` kubectl patch `を使用して、インプレースサービスを ` NodePort `や ` LoadBalancer `、または ` kubectl port-forward +`のようなパブリック向けのタイプに更新します。ローカルポートをGrafana Podポートに転送します。 このチュートリアルではポートを転送するため、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-stackにスキップできます。 -on-digitalocean-kubernetes#forwarding-a-local-port-to-access-the-grafana-service [Grafanaサービスにアクセスするためのローカルポートの転送]。 Grafanaを外部に公開することに関する次のセクションは、参照目的で含まれています。

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

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

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

kubectlの `+ patch `コマンドを使用すると、Kubernetesオブジェクトをインプレースで更新して、オブジェクトを再デプロイせずに変更を加えることができます。 マスターマニフェストファイルを直接変更して、https://github.com/do-community/doks-monitoring/blob/master/manifest/grafana-service.yaml#L9に ` type:LoadBalancer `パラメーターを追加することもできます。 [Grafanaサービス仕様]。 ` kubectl patch +`およびKubernetesサービスタイプの詳細については、https://kubernetes.io/docs/tasks/run-application/update-api-object-kubectl-patch/ [所定の場所にAPIオブジェクトを更新する]を参照してください。公式Kubernetesドキュメントのkubectl patchの使用およびhttps://kubernetes.io/docs/concepts/services-networking/service/[Services]リソース。

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

Outputservice/-grafana patched

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

kubectl get service "$APP_INSTANCE_NAME-grafana" -w

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

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

`+ http:/// +`に移動してGrafana UIにアクセスできるようになりました。

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

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

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

次のような出力が表示されるはずです。

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

これにより、ローカルポート「3000」がGrafana Pod「-grafana-0 +」の「 containerPort 」「 3000+」に転送されます。 ポートをKubernetesクラスターに転送する方法の詳細については、https://kubernetes.io/docs/tasks/access-application-cluster/port-forward-access-application-cluster/ [ポート転送を使用してクラスター内のアプリケーションにアクセスする]。

Webブラウザで `+ http:// localhost:3000 +`にアクセスします。 次のGrafanaログインページが表示されます。

image:https://assets.digitalocean.com/articles/doks_helm_monitoring/grafana_login.png [Grafanaログインページ]

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

次の*ホームダッシュボード*に移動します。

image:https://assets.digitalocean.com/articles/doks_helm_monitoring/grafana_home.png [Grafanaホームページ]

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

image:https://assets.digitalocean.com/articles/doks_helm_monitoring/grafana_dashboard.png [Grafanaダッシュボードタブ]

次のダッシュボード管理インターフェイスが表示され、https://github.com/do-community/doks-monitoring/blob/master/manifest/dashboards-configmap.yaml [`+ dashboards -configmap.yaml + `]マニフェスト:

image:https://assets.digitalocean.com/articles/doks_helm_monitoring/grafana_dashboard_list.png [Grafanaダッシュボードリスト]

これらのダッシュボードは、GrafanaダッシュボードとPrometheusアラートを監視する標準化されたクラスターセットを作成できるオープンソースプロジェクトである `+ kubernetes-mixin +`によって生成されます。 詳細については、https://github.com/kubernetes-monitoring/kubernetes-mixin [kubernetes-mixin GitHub repo]をご覧ください。

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

image:https://assets.digitalocean.com/articles/doks_helm_monitoring/grafana_nodes_dash.png [Grafana Nodes Dashboard]

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

  • システムのパフォーマンスを分析するためのUSEメソッドの詳細については、Brendan Greggのhttp://www.brendangregg.com/usemethod.html[Utilization Saturation and Errors(USE)Method]ページを参照してください。

  • Googleのhttps://landing.google.com/sre/books/[SRE Book]は、別の役立つリソースです。特に第6章:https://landing.google.com/sre/sre-book/chapters/monitoring-distributed -systems / [分散システムの監視]。

  • 独自のGrafanaダッシュボードを作成する方法については、Grafanaのhttps://grafana.com/docs/guides/getting_started/ [スタートガイド]ページをご覧ください。

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

ステップ4-PrometheusおよびAlertmanagerへのアクセス

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

`+ default +`名前空間で実行中のPodをリストすることから始めます:

kubectl get pod -n

次のポッドが表示されるはずです。

Outputsammy-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」を「+ -prometheus-0 」ポッドのポート「+9090」に転送します。

kubectl port-forward --namespace ${NAMESPACE} -prometheus-0 9090

次のような出力が表示されるはずです。

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

これは、ローカルポート「9090」がプロメテウスポッドに正常に転送されていることを示しています。

Webブラウザで `+ http:// localhost:9090 +`にアクセスします。 次のプロメテウス*グラフ*ページが表示されます。

image:https://assets.digitalocean.com/articles/doks_monitoring_quickstart/prometheus.png [プロメテウスグラフページ]

ここから、Prometheusクエリ言語であるPromQLを使用して、データベースに保存されている時系列メトリックを選択および集計できます。 PromQLの詳細については、公式のPrometheusドキュメントのhttps://prometheus.io/docs/prometheus/latest/querying/basics/[Querying Prometheus]を参照してください。

  • Expression *フィールドに「+ kubelet_node_name 」と入力し、* Execute *を押します。 Kubernetesクラスター内のノードを報告するメトリック「 kubelet_node_name +」を含む時系列のリストが表示されます。 メトリックラベルで、メトリックを生成したノードとメトリックをスクレイピングしたジョブを確認できます。

image:https://assets.digitalocean.com/articles/doks_monitoring_quickstart/prometheus_results.png [プロメテウスクエリ結果]

最後に、上部のナビゲーションバーで[ステータス]をクリックしてから[ターゲット]をクリックして、Prometheusがスクレイプするように構成されているターゲットのリストを表示します。 https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanagerの冒頭に記載されている監視エンドポイントのリストに対応するターゲットのリストが表示されるはずです。 -monitoring-stack-on-digitalocean-kubernetes#step-2-%E2%80%94-creating-the-monitoring-stack [ステップ2]。

Prometheusの詳細とクラスターメトリックのクエリ方法については、公式のhttps://prometheus.io/docs/introduction/overview/[Prometheus docs]をご覧ください。

Prometheusによって生成されたアラートを管理するAlertmanagerに接続するには、Prometheusへの接続に使用したプロセスと同様のプロセスに従います。 。一般に、Prometheus上部ナビゲーションバーの[アラート]をクリックして、アラートマネージャーアラートを確認できます。

Alertmanagerポッドに接続するには、 `+ kubectl port-forward `を使用してローカルポートを転送します。 プロメテウスの探索を終えたら、「 CTRL-C +」を押すか、新しいシェルを開いてポートフォワードトンネルを閉じて、新しい接続を作成できます。 .

ローカルポート「9093」を「+ -alertmanager-0 」ポッドのポート「+9093」に転送します。

kubectl port-forward --namespace ${NAMESPACE} -alertmanager-0 9093

次のような出力が表示されるはずです。

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

これは、ローカルポート「9093」がAlertmanagerポッドに正常に転送されていることを示しています。

Webブラウザで `+ http:// localhost:9093 +`にアクセスします。 次のAlertmanager * Alerts *ページが表示されます。

image:https://assets.digitalocean.com/articles/doks_monitoring_quickstart/alertmanager.png [アラートマネージャーアラートページ]

ここから、アラートの発動とオプションでそれらのサイレンシングを探索できます。 Alertmanagerの詳細については、https://prometheus.io/docs/alerting/alertmanager/ [Alertmanagerの公式ドキュメント]を参照してください。

次のステップでは、監視スタックコンポーネントの一部をオプションで設定およびスケーリングする方法を学習します。

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

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

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

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

cd manifest
ls
Outputalertmanager-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ファイル全体に含まれるコメントを参照してください。

アラートマネージャー

グラファナ

キューブ状態メトリック

ノードエクスポーター

プロメテウス

  • https://github.com/do-community/doks-monitoring/blob/master/manifest/prometheus-0serviceaccount.yaml [+ prometheus-0serviceaccount.yaml +]:プロメテウスサービスアカウント、ClusterRole、およびClusterRoleBinding。

  • https://github.com/do-community/doks-monitoring/blob/master/manifest/prometheus-configmap.yaml [+ prometheus-configmap.yaml +]:3つの構成ファイルを含むConfigMap:

  • + alerts.yaml ++ kubernetes-mixin +(Grafanaダッシュボードの生成にも使用された)によって生成された事前設定済みのアラートセットが含まれています。 アラートルールの設定の詳細については、Prometheusドキュメントのhttps://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/[Alerting Rules]を参照してください。

  • + prometheus.yaml +:プロメテウスのメイン設定ファイル。 Prometheusは、https://www.digitalocean.com/community/tutorials/how-to-set-up-a-prometheus-grafana-and-alertmanager-monitoring-stack-の先頭にリストされているすべてのコンポーネントをスクレイピングするように事前構成されています。 on-digitalocean-kubernetes#step-2-%E2%80%94-creating-the-monitoring-stack [ステップ2]。 Prometheusの構成はこの記事の範囲を超えていますが、詳細については、公式のPrometheus docsのhttps://prometheus.io/docs/prometheus/latest/configuration/configuration/[Configuration]を参照してください。

  • + rules.yaml +:Prometheusが頻繁に必要な、または計算コストの高い式を計算し、その結果を新しい時系列のセットとして保存できるようにするPrometheus記録ルールのセット。 これらは `+ kubernetes-mixin +`によっても生成され、それらの設定はこの記事の範囲を超えています。 詳細については、公式のPrometheusドキュメントのhttps://prometheus.io/docs/prometheus/latest/configuration/recording_rules/#recording-rules[Recording Rules]を参照してください。

  • https://github.com/do-community/doks-monitoring/blob/master/manifest/prometheus-service.yaml [+ prometheus-service.yaml +]:Prometheus StatefulSetを公開するサービス。

  • https://github.com/do-community/doks-monitoring/blob/master/manifest/prometheus-statefulset.yaml [+ prometheus-statefulset.yaml +]:2つのレプリカで構成されたPrometheus StatefulSet。 このパラメーターは、ニーズに応じてスケーリングできます。

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

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

選択したエディターを使用して、 `+ _manifest.yaml +`マスターマニフェストファイルを開きます。

nano _manifest.yaml

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

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:
 podManagementPolicy: "Parallel"
 updateStrategy:
   type: "RollingUpdate"
 selector:
   matchLabels: *Labels
 template:
   metadata:
     labels: *Labels
   spec:
. . .

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

`+ kubectl apply -f +`を使用して変更を適用します。

kubectl apply -f _manifest.yaml --namespace default

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

結論

このチュートリアルでは、ダッシュボード、Prometheusルール、およびアラートの標準セットを使用して、Prometheus、Grafana、Alertmanagerの監視スタックをDigitalOcean Kubernetesクラスターにインストールしました。

Helm Kubernetesパッケージマネージャーを使用して、この監視スタックを展開することもできます。 詳細については、https://www.digitalocean.com/community/tutorials/how-to-set-up-digitalocean-kubernetes-cluster-monitoring-with-helm-and-prometheus-operator [DigitalOceanのセットアップ方法]を参照してください。 HelmとPrometheusを使用したKubernetesクラスター監視]。 同様のスタックを起動して実行する別の方法は、現在ベータ版であるDigitalOcean Marketplace Kubernetes Monitoring Stack solutionを使用することです。

DigitalOcean Kubernetes Cluster Monitoring Quickstartリポジトリは、Google Cloud Platformのhttps://github.com/GoogleCloudPlatform/click-to-deploy/tree/master/k8s/prometheus[click-to-deploy Prometheusソリューション]に大きく基づいており、そこから変更されています。 元のリポジトリからの変更と変更の完全なマニフェストは、クイックスタートリポジトリのhttps://github.com/do-community/doks-monitoring/blob/master/changes.md [`+ changes.md +`ファイル]にあります。 。

Related