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マイル
さまざまな部分を結び付ける図を以下に示します。 図1: サービスとモニターオブジェクトの関係
完全なデプロイメントをインストールするには、 prometheus-community/kube-prometheus-stack を
使用します。 これにより、prometheus、prometheus-operator、Grafana がインストールされます。 また、分離のためにこれを監視名前空間にインストールすることを指定します。 helm でインストールする方法は次のとおりです: helm install metrics01 prometheus-community/kube-prometheus-stack -n monitoring --create-namespace
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 チャートを使用します。
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 ダッシュボードにすぐに表示されます。
図2: Prometheus サービス検出
図3: プロメテウスターゲット
図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 コンテンツにリダイレクトされます。"