HelmおよびPrometheusオペレーターを使用してDigitalOceanKubernetesクラスターモニタリングを設定する方法
序章
トレースとロギングに加えて、モニタリングとアラートはKubernetesの可観測性スタックの重要なコンポーネントです。 Kubernetesクラスタのモニタリングを設定すると、リソースの使用状況を追跡し、アプリケーションエラーを分析およびデバッグできます。
監視システムは通常、メトリックデータと視覚化レイヤーを格納する時系列データベースで構成されます。 さらに、アラートレイヤーはアラートを作成および管理し、必要に応じて統合および外部サービスにアラートを渡します。 最後に、1つ以上のコンポーネントが、この監視スタックによってアラート用に保存、視覚化、および処理されるメトリックデータを生成または公開します。
人気のある監視ソリューションの1つは、オープンソースの Prometheus 、 Grafana 、およびAlertmanagerスタックです。
- Prometheus は、時系列データベースおよび監視ツールであり、メトリックエンドポイントをポーリングし、これらのエンドポイントによって公開されたデータをスクレイピングおよび処理することで機能します。 時系列データクエリ言語であるPromQLを使用してこのデータをクエリできます。
- Grafana は、データの視覚化および分析ツールであり、メトリックデータのダッシュボードとグラフを作成できます。
- Alertmanager は、通常Prometheusと一緒にデプロイされ、スタックのアラートレイヤーを形成し、Prometheusによって生成されたアラートを処理し、それらを重複排除、グループ化して、電子メールやPagerDutyなどの統合にルーティングします。
さらに、kube-state-metricsやnode_exporterなどのツールは、クラスターレベルのKubernetesオブジェクトメトリックと、CPUやメモリ使用量などのマシンレベルのメトリックを公開します。
このモニタリングスタックをKubernetesクラスターに実装することは複雑になる可能性がありますが、幸いなことに、この複雑さの一部はHelmパッケージマネージャーとCoreOSのPrometheusOperatorおよび
このチュートリアルでは、をインストールする方法を示します prometheus-operator
DigitalOceanKubernetesクラスターのヘルムチャート。 チュートリアルが終了するまでに、完全な監視スタックがクラスターにインストールされます。
前提条件
このチュートリアルに従うには、次のものが必要です。
- DigitalOceanKubernetesクラスター。
- The
kubectl
ローカルマシンにインストールされ、クラスターに接続するように構成されたコマンドラインインターフェイス。 インストールと構成の詳細を読むことができますkubectl
公式ドキュメント。 - Helm Package Manager を使用してKubernetesクラスターにソフトウェアをインストールする方法で詳しく説明されているように、ローカルマシンにインストールされた Helm パッケージマネージャー(2.10+)とクラスターにインストールされたTiller。
ステップ1—カスタム値ファイルを作成する
インストールする前に prometheus-operator
ヘルムチャート、DigitalOcean固有の構成パラメーターでチャートのデフォルトの一部をオーバーライドするカスタム値ファイルを作成します。 デフォルトのチャート値のオーバーライドの詳細については、Helmドキュメントの HelmInstallセクションを参照してください。
まず、というファイルを作成して開きます custom-values.yaml
ローカルマシンで nano
またはお気に入りの編集者:
- nano custom-values.yaml
次のカスタム値をコピーして貼り付けると、Prometheus、Grafana、Alertmanangerコンポーネントの永続的なストレージが有効になり、DigitalOceanKubernetesで公開されていないKubernetesコントロールプレーンコンポーネントの監視が無効になります。
# Define persistent storage for Prometheus (PVC)
prometheus:
prometheusSpec:
storageSpec:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: do-block-storage
resources:
requests:
storage: 5Gi
# Define persistent storage for Grafana (PVC)
grafana:
# Set password for Grafana admin user
adminPassword: your_admin_password
persistence:
enabled: true
storageClassName: do-block-storage
accessModes: ["ReadWriteOnce"]
size: 5Gi
# Define persistent storage for Alertmanager (PVC)
alertmanager:
alertmanagerSpec:
storage:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: do-block-storage
resources:
requests:
storage: 5Gi
# Change default node-exporter port
prometheus-node-exporter:
service:
port: 30206
targetPort: 30206
# Disable Etcd metrics
kubeEtcd:
enabled: false
# Disable Controller metrics
kubeControllerManager:
enabled: false
# Disable Scheduler metrics
kubeScheduler:
enabled: false
このファイルでは、チャートにパッケージされているvalues.yamlファイルのデフォルト値の一部をオーバーライドします。
まず、Prometheus、Grafana、Alertmanagerの永続ストレージを有効にして、ポッドの再起動後もデータが保持されるようにします。 舞台裏では、これは 5 Gi
DigitalOcean Block Storage ストレージクラスを使用した、各コンポーネントの永続ボリュームクレーム(PVC)。 モニタリングストレージのニーズに合わせて、これらのPVCのサイズを変更する必要があります。 PVCの詳細については、Kubernetesの公式ドキュメントの永続ボリュームを参照してください。
次に、 your_admin_password を、adminユーザーでGrafanaメトリックダッシュボードにログインするために使用する安全なパスワードに置き換えます。
次に、node-exporter用に別のポートを構成します。 Node-exporterは各Kubernetesノードで実行され、OSとハードウェアの指標をPrometheusに提供します。 DigitalOcean Kubernetesファイアウォールのデフォルトを回避するには、デフォルトのポートを変更する必要があります。これにより、ポート9100はブロックされますが、30000〜32767の範囲のポートは許可されます。 または、node-exporterのカスタムファイアウォールルールを構成することもできます。 方法については、DigitalOceanCloudFirewallsの公式ドキュメントからファイアウォールルールの構成方法を参照してください。
最後に、DigitalOceanKubernetesでメトリクスを公開しない3つのKubernetesコントロールプレーンコンポーネント(Kubernetesスケジューラとコントローラーマネージャー、etcdクラスターデータストア)のメトリクス収集を無効にします。
の設定可能なパラメータの完全なリストを表示するには prometheus-operator
チャートについては、チャートリポジトリのREADMEまたはデフォルト値ファイルのConfigurationセクションを参照してください。
編集が終わったら、ファイルを保存して閉じます。 これで、Helmを使用してチャートをインストールできます。
ステップ2—インストール prometheus-operator
チャート
The prometheus-operator
Helmチャートは、次のモニタリングコンポーネントをDigitalOceanKubernetesクラスターにインストールします。
- Prometheus Operator、Kubernetes Operator で、Prometheusクラスターの構成と管理を可能にします。 Kubernetesオペレーターは、ドメイン固有のロジックを、Kubernetesを使用したアプリケーションのパッケージ化、デプロイ、管理のプロセスに統合します。 Kubernetesオペレーターの詳細については、CoreOSオペレーターの概要を参照してください。 Prometheus Operatorの詳細については、PrometheusOperatorおよびPrometheusOperator GitHubrepoに関するこの紹介記事を参照してください。 PrometheusOperatorはDeploymentとしてインストールされます。
- StatefulSetとしてインストールされたPrometheus。
- Alertmanagerは、Prometheusサーバーから送信されたアラートを処理し、PagerDutyや電子メールなどの統合にルーティングするサービスです。 Alertmanagerの詳細については、PrometheusドキュメントのAlertingを参照してください。 AlertmanagerはStatefulSetとしてインストールされます。
- Grafanaは、Prometheusメトリックのダッシュボードを視覚化および作成できる時系列データ視覚化ツールです。 Grafanaはデプロイメントとしてインストールされます。
- node-exporterは、クラスターノードで実行され、OSとハードウェアのメトリックをPrometheusに提供するPrometheusエクスポーターです。 詳細については、 node-exporter GitHubrepoを参照してください。 node-exporterはDaemonSetとしてインストールされます。
- kube-state-metricsは、Kubernetes APIサーバーをリッスンし、DeploymentsやPodsなどのKubernetesオブジェクトの状態に関する指標を生成するアドオンエージェントです。 詳細については、 kube-state-metrics GitHubrepoを参照してください。 kube-state-metricsはデプロイとしてインストールされます。
デフォルトでは、node-exporter、kube-state-metrics、および上記の他のコンポーネントによって生成されたスクレイピングメトリックとともに、Prometheusは次のコンポーネントからメトリックをスクレイピングするように構成されます。
- kube-apiserver、KubernetesAPIサーバー。
- CoreDNS 、KubernetesクラスターDNSサーバー。
- kubelet 、ノード上のポッドとコンテナを管理するためにkube-apiserverと対話するプライマリノードエージェント。
- cAdvisor は、実行中のコンテナーを検出し、CPU、メモリ、ファイルシステム、およびネットワークの使用状況のメトリックを収集するノードエージェントです。
ローカルマシンに、インストールすることから始めましょう prometheus-operator
ヘルムチャートと上記で作成したカスタム値ファイルの受け渡し:
- helm install --namespace monitoring --name doks-cluster-monitoring -f custom-values.yaml stable/prometheus-operator
ここで実行します helm install
すべてのコンポーネントをにインストールします monitoring
同時に作成する名前空間。 これにより、モニタリングスタックを残りのKubernetesクラスターからきれいに分離できます。 Helmリリースに名前を付けます doks-cluster-monitoring
ステップ1で作成したカスタム値ファイルを渡します。 最後に、インストールすることを指定します prometheus-operator
ヘルムからのチャート stable
ディレクトリ。
次の出力が表示されます。
OutputNAME: doks-cluster-monitoring
LAST DEPLOYED: Mon Apr 22 10:30:42 2019
NAMESPACE: monitoring
STATUS: DEPLOYED
RESOURCES:
==> v1/PersistentVolumeClaim
NAME STATUS VOLUME CAPACITY ACCESS MODES STORAGECLASS AGE
doks-cluster-monitoring-grafana Pending do-block-storage 10s
==> v1/ServiceAccount
NAME SECRETS AGE
doks-cluster-monitoring-grafana 1 10s
doks-cluster-monitoring-kube-state-metrics 1 10s
. . .
==> v1beta1/ClusterRoleBinding
NAME AGE
doks-cluster-monitoring-kube-state-metrics 9s
psp-doks-cluster-monitoring-prometheus-node-exporter 9s
NOTES:
The Prometheus Operator has been installed. Check its status by running:
kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"
Visit https://github.com/coreos/prometheus-operator for instructions on how
to create & configure Alertmanager and Prometheus instances using the Operator.
これは、Prometheus Operator、Prometheus、Grafana、および上記の他のコンポーネントがDigitalOceanKubernetesクラスターに正常にインストールされたことを示します。
のメモに続いて helm install
出力、を使用してリリースのポッドのステータスを確認します kubectl get pods
:
- kubectl --namespace monitoring get pods -l "release=doks-cluster-monitoring"
次のように表示されます。
OutputNAME READY STATUS RESTARTS AGE
doks-cluster-monitoring-grafana-9d7f984c5-hxnw6 2/2 Running 0 3m36s
doks-cluster-monitoring-kube-state-metrics-dd8557f6b-9rl7j 1/1 Running 0 3m36s
doks-cluster-monitoring-pr-operator-9c5b76d78-9kj85 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-2qvxw 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-7brwv 1/1 Running 0 3m36s
doks-cluster-monitoring-prometheus-node-exporter-jhdgz 1/1 Running 0 3m36s
これは、すべての監視コンポーネントが稼働中であり、Grafanaとその事前構成されたダッシュボードを使用してPrometheusメトリックの調査を開始できることを示しています。
ステップ3—Grafanaへのアクセスとメトリクスデータの調査
The prometheus-operator
ヘルムチャートはGrafanaを ClusterIP
サービス。つまり、クラスター内部のIPアドレスを介してのみアクセスできます。 Kubernetesクラスタの外部でGrafanaにアクセスするには、次のいずれかを使用できます。 kubectl patch
所定のサービスを次のような公開タイプに更新します NodePort
また LoadBalancer
、 また kubectl port-forward
ローカルポートをGrafanaポッドポートに転送します。
このチュートリアルでは、ポートを転送しますが、詳細については kubectl patch
およびKubernetesサービスタイプについては、公式のKubernetesドキュメントから kubectlpatchおよびServicesを使用してAPIオブジェクトをインプレースで更新するを参照できます。
実行中のサービスをリストすることから始めます monitoring
名前空間:
- kubectl get svc -n monitoring
次のサービスが表示されます。
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 <none> 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 <none> 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 <none> 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 <none> 30206/TCP 34m
prometheus-operated ClusterIP None <none> 9090/TCP 34m
ローカルポートを転送します 8000
ポートへ 80
の doks-cluster-monitoring-grafana
サービス、順番にポートに転送されます 3000
実行中のGrafanaポッドの これらのサービスポートとポッドポートは、 stable/grafana
ヘルムチャート値ファイル:
- kubectl port-forward -n monitoring svc/doks-cluster-monitoring-grafana 8000:80
次の出力が表示されます。
OutputForwarding from 127.0.0.1:8000 -> 3000
Forwarding from [::1]:8000 -> 3000
これは、ローカルポートが 8000
Grafanaポッドに正常に転送されています。
訪問 http://localhost:8000
Webブラウザで。 次のGrafanaログインページが表示されます。
設定したユーザー名とパスワードとしてadminを入力します custom-values.yaml
. 次に、ログインを押します。
次のホームダッシュボードが表示されます。
左側のナビゲーションバーで、ダッシュボードボタンを選択し、管理をクリックします。
次のダッシュボード管理インターフェイスが表示されます。このインターフェイスには、によってインストールされたダッシュボードが一覧表示されます。 prometheus-operator
ヘルムチャート:
これらのダッシュボードはによって生成されます kubernetes-mixin
、クラスター監視GrafanaダッシュボードとPrometheusアラートの標準化されたセットを作成できるオープンソースプロジェクト。 詳細については、 KubernetesMixinGitHubリポジトリを参照してください。
Kubernetes / Nodes ダッシュボードをクリックして、特定のノードのCPU、メモリ、ディスク、およびネットワークの使用状況を視覚化します。
各ダッシュボードと、それを使用してクラスターのメトリックデータを視覚化する方法を説明することは、このチュートリアルの範囲を超えています。 システムのパフォーマンスを分析するためのUSEメソッドの詳細については、Brendan Greggの使用率の飽和とエラー(USE)メソッドページを参照してください。 GoogleのSREBook は、もう1つの役立つリソースであり、特に第6章:分散システムの監視です。 独自のGrafanaダッシュボードを作成する方法については、Grafanaのはじめにページをご覧ください。
次のステップでは、同様のプロセスに従って、Prometheus監視システムに接続して探索します。
ステップ4—PrometheusとAlertmanagerへのアクセス
Prometheus Podsに接続するには、もう一度使用する必要があります kubectl port-forward
ローカルポートを転送します。 Grafanaの探索が終了したら、を押すことでポートフォワードトンネルを閉じることができます CTRL-C
. または、新しいシェルとポート転送接続を開くこともできます。
実行中のサービスをリストすることから始めます monitoring
名前空間:
- kubectl get svc -n monitoring
次のサービスが表示されます。
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 <none> 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 <none> 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 <none> 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 <none> 30206/TCP 34m
prometheus-operated ClusterIP None <none> 9090/TCP 34m
ローカルポートを転送します 9090
ポートへ 9090
の doks-cluster-monitoring-pr-prometheus
サービス:
- kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-prometheus 9090:9090
次の出力が表示されます。
OutputForwarding 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フィールドに次のように入力します machine_cpu_cores
実行を押します。 メトリックを含む時系列のリストが表示されます machine_cpu_cores
特定のノードのCPUコアの数を報告します。 メトリックラベルで、どのノードがメトリックを生成し、どのジョブがメトリックをスクレイプしたかを確認できます。
最後に、上部のナビゲーションバーで、ステータス、ターゲットの順にクリックして、Prometheusがスクレイプするように構成されているターゲットのリストを表示します。 ステップ2の冒頭で説明した監視エンドポイントのリストに対応するターゲットのリストが表示されます。
Promtheusの詳細と、クラスターメトリックを照会する方法については、公式のPrometheusドキュメントを参照してください。
同様のプロセスに従って、Prometheusによって生成されたアラートを管理するAlertManagerに接続します。 Prometheusの上部ナビゲーションバーにあるアラートをクリックすると、これらのアラートを調べることができます。
Alertmanagerポッドに接続するには、もう一度使用します kubectl port-forward
ローカルポートを転送します。 Prometheusの探索が終了したら、を押すことでポートフォワードトンネルを閉じることができます CTRL-C
. または、新しいシェルとポート転送接続を開くこともできます。
実行中のサービスをリストすることから始めます monitoring
名前空間:
- kubectl get svc -n monitoring
次のサービスが表示されます。
OutputNAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
alertmanager-operated ClusterIP None <none> 9093/TCP,6783/TCP 34m
doks-cluster-monitoring-grafana ClusterIP 10.245.105.130 <none> 80/TCP 34m
doks-cluster-monitoring-kube-state-metrics ClusterIP 10.245.140.151 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-alertmanager ClusterIP 10.245.197.254 <none> 9093/TCP 34m
doks-cluster-monitoring-pr-operator ClusterIP 10.245.14.163 <none> 8080/TCP 34m
doks-cluster-monitoring-pr-prometheus ClusterIP 10.245.201.173 <none> 9090/TCP 34m
doks-cluster-monitoring-prometheus-node-exporter ClusterIP 10.245.72.218 <none> 30206/TCP 34m
prometheus-operated ClusterIP None <none> 9090/TCP 34m
ローカルポートを転送します 9093
ポートへ 9093
の doks-cluster-monitoring-pr-alertmanager
サービス。
- kubectl port-forward -n monitoring svc/doks-cluster-monitoring-pr-alertmanager 9093:9093
次の出力が表示されます。
OutputForwarding from 127.0.0.1:9093 -> 9093
Forwarding from [::1]:9093 -> 9093
これは、ローカルポートが 9093
Alertmanagerポッドに正常に転送されています。
訪問 http://localhost:9093
Webブラウザで。 次のAlertmanagerAlertsページが表示されます。
ここから、アラートの発火とオプションでアラートの消音を調べることができます。 Alertmanagerの詳細については、公式Alertmanagerドキュメントを参照してください。
結論
このチュートリアルでは、Prometheus、Grafana、Alertmanagerのモニタリングスタックを、ダッシュボード、Prometheusルール、アラートの標準セットを使用してDigitalOceanKubernetesクラスターにインストールしました。 これはHelmを使用して行われたため、次を使用できます。 helm upgrade
, helm rollback
、 と helm delete
監視スタックをアップグレード、ロールバック、または削除します。 これらの機能の詳細については、 HelmPackageManagerを使用してKubernetesクラスターにソフトウェアをインストールする方法を参照してください。
The prometheus-operator
グラフは、Helmを使用してクラスターの監視をすばやく起動して実行するのに役立ちます。 Prometheus Operatorを手動でビルド、デプロイ、および構成することをお勧めします。 これを行うには、 プロメテウスオペレーターおよび[kube-prometheus](< https://github.com/coreos/kube-prometheus )GitHubリポジトリ。