ブログ | NGINX

すぐに使用できるメトリクス用の Prometheus オペレーターを備えた F5 NGINX Ingress コントローラー

NGINX-F5 水平黒タイプ RGB の一部
ジェイソン・ウィリアムズ サムネイル
ジェイソン・ウィリアムズ
2024年4月3日公開

F5 NGINX のNGINX Ingress Controller と Prometheus オペレーターServiceMonitor CRD を組み合わせると、Helm を使用して NGINX Ingress Controller デプロイメントからのメトリックの収集がはるかに簡単かつ高速になります。 NGINX Ingress Controller の Helm チャートは、既存の Prometheus および prometheus-operator インフラストラクチャをすぐに活用する機能をサポートするようになりました。これにより、NIC をデプロイし、 Prometheus ServiceMonitor を活用してすぐに使用できるメトリックを取得できるようになりました。 この記事では、 ServiceMonitorとは何か、ServiceMonitor をインストールする方法、NGINX Ingress Controller Helm チャートを使用してこれらの特定の設定を定義する方法について説明します。

プロメテウス サービスモニター

Prometheus ServiceMonitor カスタム リソース定義 (CRD) を使用すると、動的なサービス セットを監視する方法を宣言的に定義できます。 監視対象のサービスは、Kubernetes ラベル セレクターを使用して定義されます。 これにより、組織はメトリックの公開方法を規定する規則を導入できるようになります。 これらの規則に従うと、新しいサービスが自動的に検出され、Prometheus はシステムを再構成する必要なくメトリックの収集を開始します。 ServiceMonitor はPrometheus Operator の一部です。 これらのリソースは、Prometheus によってスクレイピングされる監視ターゲットを記述および管理します。 Prometheus リソースは、ServiceMonitor セレクターフィールドを使用してServiceMonitorに接続します。 Prometheus は、スクレイピング対象としてマークされたターゲットを簡単に識別できます。 これにより、Kubernetes クラスター内のServiceMonitorリソースを活用して、NGINX Ingress Controller などのソリューションを監視するための制御と柔軟性が向上します。 作業を簡単にし、NGINX Ingress Controller にすぐに使用できるメトリクスを提供するために、最近、Helm チャートにPrometheus ServiceMonitor を使用する機能を追加しました。 これにより、NGINX Ingress Controller をデプロイした直後に Prometheus のメトリックを有効にしてスクレイピングを開始することが非常に簡単になります。 この機能を使用するには、 ServiceMonitor が「アタッチ」するメトリック収集用に特別に作成された 2 番目のサービスを追加する必要があります。 これにより、Prometheus オペレーターは、(メタデータ内のラベルを使用して) どのサービスを監視すべきかを知ることができるため、何をどこでスクレイピングするかがわかります。 デプロイメントまたは Helm ファイルの一部である場合の NGINX Ingress Controller のサービスの例:


apiバージョン: v1
種類: サービス
メタデータ:
名前: nginx-ingress-servicemonitor
ラベル:
アプリ: nginx-ingress-servicemonitor
仕様:
ポート:
-名前: prometheus
プロトコル: TCP
ポート: 9113
ターゲットポート: 9113
セレクター:
アプリ: nginx-ingress

上記は展開の一部となります。 ラベル app: nginx-ingress-servicemonitor は、 Prometheus メトリック スクレイピングのためにserviceMonitorに「接続」します。 以下は、 nginx-ingress-servicemonitorという名前の上記のサービスにリンクするサンプルのserviceMonitorです。


apiバージョン: monitoring.coreos.com/v1
種類: ServiceMonitor
メタデータ:
名前: nginx-ingress-servicemonitor
ラベル:
アプリ: nginx-ingress-servicemonitor
仕様:
セレクター:
matchLabels:
アプリ: nginx-ingress-servicemonitor
エンドポイント:
- ポート: prometheus

serviceMonitorリソースを検索するように構成された Prometheus リソースを作成する必要があります。これにより、Prometheus はメトリックを取得するエンドポイントをすばやく簡単に把握できるようになります。 以下の例では、このリソースは、仕様に基づいて監視する項目を Prometheus に指示します。 以下では、 spec.serviceMonitorSelector.matchLabels: を監視しています。 Prometheus が任意の名前空間でapp.nginx-ingress-servicemonitorと matchLabels を探していることがわかります。 これは、NGINX Ingress Controller の Helm チャートと Helm によってデプロイされるserviceMonitorリソースと一致します。


apiバージョン: monitoring.coreos.com/v1
種類: Prometheus
メタデータ:
名前: prometheus
ラベル:
prometheus: prometheus
仕様:
レプリカ: 1
serviceAccountName: prometheus
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
app: nginx-ingress-servicemonitor
resources:
request:
memory: 500マイル

さまざまな部分を結び付ける図を以下に示します。 ServiceMonitor ダイアグラム 図1: サービスとモニターオブジェクトの関係

Prometheus、prometheus-operator、Grafanaのインストール

完全なデプロイメントをインストールするには、 prometheus-community/kube-prometheus-stack を使用します。 これにより、prometheus、prometheus-operator、Grafana がインストールされます。 また、分離のためにこれを監視名前空間にインストールすることを指定します。 helm でインストールする方法は次のとおりです: helm install metrics01 prometheus-community/kube-prometheus-stack -n monitoring --create-namespace

Prometheusリソースを作成してインストールする

Prometheus と Prometheus CRD がクラスターにインストールされると、Prometheus リソースを作成できます。 これを事前にデプロイすることで、Helm チャートで使用するラベルを Prometheus セットアップに「事前準備」することができます。 このアプローチにより、Prometheus が自動的に NGINX Ingress Controller を探し始め、メトリックを収集できるようになります。 NGINX Ingress Controller をインストールする前に、Prometheus リソースがデプロイされます。 これにより、 prometheus-operator はデプロイ後に NGINX Ingress コントローラーを自動的に取得してスクレイピングし、メトリックを迅速に提供できるようになります。


apiバージョン: monitoring.coreos.com/v1
種類: Prometheus
メタデータ:
名前: prometheus
名前空間: default
ラベル:
prometheus: 監視
仕様:
レプリカ: 1
serviceAccountName: prometheus
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
app: nginx-ingress-servicemonitor
resources:
request:
memory: 500マイル

上記の例は基本的な例です。 重要な部分は、指定したspec.serviceMonitorSelector.matchLabels値です。 この値は、Helm チャートを使用して NGINX Ingress コントローラーをデプロイするときに使用します。 Prometheus メトリックをすぐに提供したいと考えています。 これを行うには、NGINX Ingress Controller Helm チャートを使用します。

NGINX Ingress コントローラー helm values.yaml の変更

Helm チャートのvalues.yamlファイルを確認できます。 Prometheus を有効にし、必要なサービスを作成し、 serviceMonitorリソースを作成するために必要な部分が含まれているため、注目したい Prometheus セクションがあります。 Prometheus セクションの下に、いくつかの設定が表示されます: prometheus.service prometheus.serviceMonitor上記の両方の設定を有効にして、Helm チャートを使用するときに必要なサービスと serviceMonitor を生成します。 ここでは、サービスを有効にし、 serviceMonitorを有効にし、 serviceMonitorセクションでラベルを定義する特定のセクションを示します。


`servicemonitor` サポートが最近、NGINX Ingress コントローラーの Helm チャートに追加されました。
prometheus:
## NGINX または NGINX Plus メトリックを Prometheus 形式で公開します。
create: true

## メトリックをスクレイピングするポートを構成します。
port: 9113

secret: ""

## 使用する HTTP スキームを設定します。
scheme: http

service:
## prometheus.create=true が必要です
create: true

serviceMonitor:
create: true
labels: { app: nginx-ingress-servicemonitor } 

上記の値を分解すると次のようになります。


prometheus:
## NGINX または NGINX Plus メトリックを Prometheus 形式で公開します。
create: true

NIC Prometheus エンドポイントを有効にすることを Helm に伝えます。 必要に応じて、ポート、スキーム、シークレットを追加で定義できます。 prometheus.service.createの値を true に設定すると、Helm は NIC ServiceMonitor サービスを自動的に作成します。


service:
## ClusterIP サービスを作成して Prometheus メトリックを内部的に公開します
## prometheus.create=true が必要です
create: true

最後に、 serviceMonitorを作成する必要があります。 これを true に設定し、正しいラベルを追加すると、Prometheus リソースに一致するラベルが作成され、追加されます。


serviceMonitor:
## Kubernetes ポッドの統計情報を公開するための serviceMonitor を作成します。
create: true
## serviceMonitor オブジェクトに添付する Kubernetes オブジェクト ラベル。
labels: { app: nginx-ingress-servicemonitor } 

ラベルはサービスの名前にリンクします。ラベル: { app: nginx-ingress-servicemointor }まとめると次のようになります。 Prometheus を有効にすると、NIC の Prometheus エクスポーター機能が公開されます。サービス オブジェクトを定義します。これにより、Prometheus ServiceMonitor は NIC Prometheus エクスポーター エンドポイントを検出します。 serviceMonitor オブジェクトを定義します。 これは、Prometheus ServiceMonitor にこれを監視するように指示します。

これで、 helmを使用して NGINX Ingress Controller をインストールできます。

values.yaml を変更したら、NGINX Ingress コントローラーのインストールに進むことができます。 helm install nic01 -n nginx-ingress --create-namespace -f values.yaml 。 NGINX Ingress Controller をデプロイしたら、Prometheus ダッシュボードを開いてステータス メニューに移動できます。 そこから、ターゲットとサービス検出ビューに移動できます。 Prometheus は新しい ServiceMonitor リソースを見つけると、エンドポイントのスクレイピングを開始し、メトリックを収集します。これらのメトリックは、Prometheus ダッシュボードにすぐに表示されます。

Prometheus サービス検出 図2: Prometheus サービス検出

プロメテウスターゲット 図3: プロメテウスターゲット

Prometheus NGINX クエリ 図4: Prometheus NGINX クエリ

helm や Prometheus などのネイティブ Kubernetes ツールを使用すると、NGINX Ingress Controller によって、デプロイメントの開始時にメトリックを収集することがはるかに簡単になり、「すぐに使用できるメトリック」が提供されることがわかります。 インストールに関する参考資料はこちら プロメテウスオペレーター: https://プロメテウス-オペレーター.dev/ https://github.com/prometheus-operator/prometheus-operator


「このブログ投稿には、入手できなくなった製品やサポートされなくなった製品が参照されている場合があります。 利用可能な F5 NGINX 製品およびソリューションに関する最新情報については、 NGINX 製品ファミリーをご覧ください。 NGINX は現在 F5 の一部です。 以前の NGINX.com リンクはすべて、F5.com の同様の NGINX コンテンツにリダイレクトされます。"