GNU/Linux >> Linux の 問題 >  >> Linux

Grafana と Prometheus Kubernetes クラスター モニタリングの活用

Kubernetes クラスターを監視することは、サービスが常に利用可能で実行されていることを確認するために重要です。インターネットで監視システムを探す前に、Grafana と Prometheus Kubernetes クラスターの監視を試してみませんか?

このガイドでは、Prometheus と Grafana のダッシュボードで内部状態の指標を表示して、Kubernetes クラスターを監視する方法を学びます。

リソースを注意深く監視できるように、読み進めてください!

前提条件

  • Docker がインストールされた Linux マシン — このチュートリアルでは、Docker バージョン 20.10.7 を搭載した Ubuntu 20.04 LTS マシンを使用します。 Ubuntu のインストール方法は次のとおりです。
  • 単一ノードの Kubernetes クラスタ。
  • Helm Package Manager がインストールされている — Prometheus オペレーターのデプロイ用。
  • Kubectl コマンドライン インターフェースがインストールされ、クラスターに構成されます。

Kube-Prometheus スタック Helm チャートのデプロイ

Grafana および Prometheus Kubernetes クラスターのモニタリングは、潜在的なパフォーマンスのボトルネック、クラスターの状態、パフォーマンス メトリックに関する情報を提供します。同時に、ネットワークの使用状況、ポッドのリソース使用パターン、およびクラスターで何が起こっているかの概要を視覚化します。

ただし、Grafana と Prometheus を使用して監視システムをセットアップする前に、まず kube-prometheus スタック Helm チャートをデプロイします。スタックには、Prometheus、Grafana、Alertmanager、Prometheus オペレーター、およびその他の監視リソースが含まれています。

1. SSH で Ubuntu 20.04 マシンに接続します (クラウド サーバーで実行している場合) または、ローカルにインストールされた Ubuntu 20.04 マシンにログインして開始します。

2. 次に、kubectl create を実行します。 以下のコマンドで namespace を作成します monitoring という名前 Prometheus および Grafana に関連するすべてのデプロイメント用。

kubectl create namespace monitoring

3. 次の helm repo を実行します (prometheus-community を追加するコマンド ) Helm リポジトリ、および Helm リポジトリを更新します。

# Add prometheus-community repo
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts

# Update helm repo
helm repo update

4. Helm リポジトリを追加したら、helm install を実行します。 以下のコマンドを実行して、kube-prometheus スタックの Helm チャートをデプロイします。 prometheus を置き換えます 希望のリリース名で。

この Helm チャートは、一連のカスタム リソース定義 (CRD) に基づいて動作することにより、完全な Prometheus kubernetes 監視スタックをセットアップします。

helm install prometheus prometheus-community/kube-prometheus-stack --namespace monitoring

デプロイが完了すると、次の出力が得られます。

5. 最後に、次のコマンドを実行して、kube-prometheus スタックのデプロイを確認します。

kubectl get pods -n monitoring

以下の出力は、kube-prometheus スタックのデプロイを示しています。ご覧のとおり、スタック内の各コンポーネントがクラスターで実行されています。

Prometheus インスタンスへのアクセス

Prometheus インスタンスがクラスターに正常にデプロイされ、Kubernetes クラスターを監視する準備がほぼ整いました。しかし、どのようにして Prometheus インスタンスにアクセスするのでしょうか?ローカルポート 9090 を転送します kubectl port-forward を使用して Prometheus サービス経由でクラスターに コマンド。

1. kubectl get を実行します 以下のコマンドを実行して、監視名前空間内のすべてのサービスを表示し、Prometheus サービスを確認します。

kubectl get svc -n monitoring

Prometheus サービスを含む、監視名前空間にデプロイされたすべてのサービスを以下に示します。 Prometheus サービスを使用してポート転送を設定し、Prometheus インスタンスにクラスターの外部からアクセスできるようにします。

2. 次に、以下の kubectl port-forward を実行します ローカル ポート 9090 を転送するコマンド Prometheus サービス (svc/prometheus-kube-prometheus-prometheus) 経由でクラスターに )。

kubectl port-forward svc/prometheus-kube-prometheus-prometheus -n monitoring 9090

ただし、クラウド サーバーで単一ノードの Kubernetes クラスターを実行している場合は、代わりに次のコマンドを実行してください。

kuebctl port-forward --address 0.0.0.0 svc/prometheus-kube-prometheus-prometheus -n monitoring 9090 

kubectl port-forward コマンドをバックグラウンド プロセスとして実行し、端末を解放してさらに使用するには、コマンドの末尾に &記号を追加します。 Ctrl+C キーを押して、ポート転送フォアグラウンド プロセスを停止します (これを行っても、ポート転送バックグラウンド プロセスには影響しません)。

3. お気に入りの Web ブラウザーを開き、以下のいずれかの URL に移動して、Prometheus インスタンスにアクセスします。

  • http://localhost:9090 に移動します ローカルの Ubuntu マシンを使用している場合
  • サーバーの IP アドレスに続いてポート 9090 に移動します (つまり、http://YOUR_SERVER_IP:9090) クラウド サーバーを使用している場合

このチュートリアルでは、Prometheus はクラウド サーバー上で実行されています。

Prometheus サービスが機能する場合、Web ブラウザーに次のページが表示されます。

4. 最後に、端末で Ctrl+C キーを押してポート転送プロセスを閉じます。これを行うと、ブラウザで Prometheus にアクセスできなくなります。

Prometheus Kubernetes クラスタの内部状態指標の表示

Kube-state-metrics (KSM) ツールを使用すると、Kubernetes クラスターの内部状態メトリックを表示できます。 KSM ツールを使用すると、リソースの正常性と使用状況、およびオブジェクトの内部状態を追跡できます。 KSM を介して潜在的に表示できるデータ ポイントの一部は次のとおりです。ノード メトリック、デプロイ メトリック、およびポッド メトリック。

KSM ツールは kube-prometheus スタックにあらかじめパッケージ化されており、残りの監視コンポーネントとともに自動的にデプロイされます。

kube-state-metrics 経由でローカル ポートをクラスタにポート転送します サービス。そうすることで、KSM はクラスターの内部システム メトリクスをスクレイピングし、クエリと値のリストを出力できます。ただし、ポート転送の前に、まず KSM Kubernetes サービスを確認してください。

1. 以下のコマンドを実行して kube-state-metrics を確認します Kubernetes サービス。

kubectl get svc -n monitoring | grep kube-state-metrics

以下に、KSM Kubernetes サービス名 (prometheus-kube-state-metrics) と ClusterIP を示します。次のステップでポート転送を実行するために必要になるため、KSM Kubernetes サービス名を書き留めます。

2. 次に、以下のコマンドを port-forward に実行します prometheus-kube-state-metrics ポート 8080 へのサービス .

kubectl port-forward svc/prometheus-kube-state-metrics -n monitoring 8080 

クラウド プロバイダーがホストする Ubuntu 20.04 マシンでこのチュートリアルに従っている場合は、(–address 0.0.0.0) フラグを kubectl port-forward コマンドに追加します。これにより、サーバーのパブリック IP アドレスを介したローカル ポートへの外部アクセスが許可されます。

3. 最後に、Web ブラウザーで以下のいずれかの URL に移動して、以下に示すように Kube Metrics ページを表示します。

  • http://localhost:8080 に移動します ローカルの Ubuntu マシンを使用している場合
  • サーバーの IP アドレスに続いてポート 8080 に移動します (つまり、http://YOUR_SERVER_IP:8080) クラウド サーバーを使用している場合

メトリクス リンクをクリックして、クラスターの内部状態メトリクスにアクセスします。

クラスターの内部状態のメトリクスは、あなたのものと同様に以下に表示されます。

Prometheus でのクラスターの内部状態メトリックの可視化

kube-prometheus スタック Helm チャートのデプロイ、kube-state-metrics スクレイプ、および Prometheus ジョブ構成を正常に実行しました。その結果、CoreDNS、kube-api サーバー、Prometheus オペレーター、およびその他の Kubernetes コンポーネントが、Prometheus のターゲットとして自動的にセットアップされました。

1. http://localhost:9090/targets または http:// のいずれかに移動します。 Web ブラウザのエンドポイント。これにより、これらのターゲットが適切に構成されていることを確認できます。

エンドポイントにアクセスすると、Prometheus がメトリクスをスクレイピングし、時系列データベース (TSDB) にデータを保存していることも確認できます。

エンドポイントに移動する前に、ステップ 2 の「Prometheus インスタンスへのアクセス」セクションに示されているように、Prometheus をポート転送することを忘れないでください。バックグラウンド プロセスとして実行することもできます。

以下に示すように、さまざまな Kubernetes 内部コンポーネントと監視コンポーネントが Prometheus のターゲットとして構成されています。

2. グラフをクリックします メニューをクリックして、PromQL (Prometheus Query Language) クエリを実行するページに移動します。

3. サンプル PromQL (Prometheus Query Language) を挿入します。 提供された式スペースに以下のクエリを実行し、[実行] をクリックします。 このクエリは、クラスター内の未使用メモリの合計量を返します。

sum((container_memory_usage_bytes{container!="POD",container!=""} - on (namespace,pod,container) avg by (namespace,pod,container)(kube_pod_container_resource_requests{resource="memory"})) * -1 >0 ) / (1024*1024*1024)

4. ステップ 3 で実行された PromQL クエリの結果をグラフ形式で表示するには、Graph をクリックします。 .このグラフには、一定時間ごとのクラスター内の未使用メモリの合計量が表示されます。

すべてが正しく設定されると、サンプル クラスタ メトリックは次のグラフのようになります。

Grafana ダッシュボードへのアクセス

Graph だけで立ち往生しているため、Prometheus の視覚化機能が制限されていることに気付いたかもしれません。 オプション。 Prometheus は、ジョブとして構成されたターゲットからメトリックをスクレイピングし、それらのメトリックを集約して、Ubuntu マシンのローカルの TSDB に格納するのに最適です。しかし、標準的なリソース監視に関して言えば、Prometheus と Grafana は素晴らしいコンビです。

Prometheus は、ノード エクスポータ、CoreDNS などのサーバー コンポーネントによってエクスポートされたメトリックを集約します。一方、可視化が得意な Grafana は、Prometheus からこれらのメトリックを受け取り、多数の可視化オプションを介して表示します。

kube-prometheus スタック ヘルムのデプロイ中に、Grafana は自動的にインストールおよび構成されているため、クラスターで Grafana へのアクセスを構成できます。

Grafana ダッシュボードにアクセスするには、まず、デフォルトで Kubernetes クラスターに自動的に作成されるシークレットとして保存されているユーザー名とパスワードをフェッチする必要があります。

1. 次の kubectl を実行します secret として保存されたデータを表示するコマンド Kubernetes クラスター (prometheus-grafana ) YAML 形式 (-o yaml) )。

kubectl get secret -n monitoring prometheus-grafana -o yaml

以下に示すように、Grafana ダッシュボードにアクセスするためのユーザー名とパスワードは base64 でエンコードされています。 の値を書き留めます。 管理者パスワードと管理者ユーザー 次のステップでそれらをデコードする必要があるためです。

2. 次に、以下の各コマンドを --decode に実行します 両方のシークレット (admin-passwordadmin-user )。 YOUR_USERNAME を置き換えます 、および YOUR_PASSWORD admin-password で と admin-user ステップ 1 で書き留めたシークレット値。

セキュリティ上の理由により、このチュートリアルには各コマンドの出力がありません。

# Decode and print the username
echo YOUR_USERNAME | base64 --decode
# Decode and print the password
echo YOUR_PASSWORD | base64 --decode

3. kubectl を実行します 以下のコマンドを port-forward3000 のローカル ポートに Grafana ポート 80 をバインドすることにより ポート 3000 へ .これにより、ブラウザーで Grafana の Web UI にアクセスできるようになります。

kubectl port-forward svc/prometheus-grafana -n monitoring 3000:80

クラウド プロバイダがホストする Ubuntu 20.04 マシンを使用している場合は、–address 0.0.0.0 フラグを追加してください。

4. 最後に、ブラウザで、マシンのセットアップに応じて、以下のいずれかのエンドポイントに移動します。

  • http://localhost:3000 (ローカル)
  • またはhttp://:3000 (雲)

提供されたスペースのユーザー名とパスワードに、admin-user と admin-password のデコードされたシークレット値を入力してください。

ログインすると、以下に示すように、Grafana ダッシュボードが表示されます。

Grafana の操作

デフォルトでは、Kube-Prometheus スタックは、Prometheus で構成されたターゲットごとにいくつかの事前構成されたダッシュボードを使用して Grafana をデプロイします。これらの事前構成されたダッシュボードを使用すると、Prometheus によって集計された各メトリックを視覚化するためにダッシュボードを手動で設定する必要がなくなります。

ダッシュボード アイコンをクリック —> 参照 ブラウザは、ダッシュボードのリストが表示されるページにリダイレクトします (ステップ 2)。

以下の事前構成されたダッシュボードのいずれかをクリックして、ビジュアル コンピューティング リソースを表示します。ただし、このチュートリアルでは、Kubernetes / Compute Resources / Namespace (Pods) をクリックします。

以下は、使用可能な名前空間のいずれかで Pod によるコンピューティング リソースの使用状況を視覚化するための事前構成されたダッシュボードのサンプルです。

このチュートリアルでは、データ ソース プロメテウスに設定されました と名前空間 可視化は監視に設定されています .

結論

このチュートリアルでは、Helm を使用して Prometheus オペレーターをデプロイする方法を学び、クラスターの内部状態メトリクスを表示して Kubernetes クラスターを監視しました。また、Grafana を構成し、Grafana ダッシュボードを構成してクラスター メトリックを表示しました。

この時点で、完全に機能する Kubernetes クラスターの監視が既に完了しています。ただし、リアルタイム アラートを受信するように Slack で Alertmanager を構成するなど、この新たに発見された知識を個人的に改善することができます。


Linux
  1. Ansibleを使用してPrometheusでシステム監視を設定する方法

  2. 最初のポッドをKubernetesクラスターにデプロイする方法

  3. ランチャーを使用してKubernetesクラスターをセットアップする

  1. Kubernetesとは何ですか?完全ガイド

  2. PrometheusとGrafanaを使用してLinuxサーバーを監視する

  3. PrometheusとZabbix:ネットワーク監視ツールの比較

  1. GrafanaPrometheusダッシュボードチュートリアル

  2. RHEL 8にKubernetes(k8s)クラスターをインストールする方法

  3. Kubeadmを使用してHAでKubernetes(k8s)クラスターをセットアップする方法