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 のサービスの例:
apiVersion: v1
kind: Service
metadata:
name: nginx-ingress-servicemonitor
labels:
app: nginx-ingress-servicemonitor
spec:
ports:
- name: prometheus
protocol: TCP
port: 9113
targetPort: 9113
selector:
app: nginx-ingress
上記は展開の一部となります。 ラベル app: nginx-ingress-servicemonitor は、 Prometheus メトリック スクレイピングのためにserviceMonitorに「接続」します。 以下は、 nginx-ingress-servicemonitorという名前の上記のサービスにリンクするサンプルのserviceMonitorです。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: nginx-ingress-servicemonitor
labels:
app: nginx-ingress-servicemonitor
spec:
selector:
matchLabels:
app: nginx-ingress-servicemonitor
endpoints:
- port: prometheus
serviceMonitorリソースを検索するように構成された Prometheus リソースを作成する必要があります。これにより、Prometheus はメトリックを取得するエンドポイントをすばやく簡単に把握できるようになります。 以下の例では、このリソースは、仕様に基づいて監視する項目を Prometheus に指示します。 以下では、 spec.serviceMonitorSelector.matchLabels: を監視しています。 Prometheus が任意の名前空間でapp.nginx-ingress-servicemonitorと matchLabels を探していることがわかります。 これは、NGINX Ingress Controller の Helm チャートと Helm によってデプロイされるserviceMonitorリソースと一致します。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
labels:
prometheus: prometheus
spec:
replicas: 1
serviceAccountName: prometheus
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
app: nginx-ingress-servicemonitor
resources:
requests:
memory: 500Mi
さまざまな部分を結び付ける図を以下に示します。 図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 コントローラーを自動的に取得してスクレイピングし、メトリックを迅速に提供できるようになります。
apiVersion: monitoring.coreos.com/v1
kind: Prometheus
metadata:
name: prometheus
namespace: default
labels:
prometheus: monitoring
spec:
replicas: 1
serviceAccountName: prometheus
serviceMonitorNamespaceSelector: {}
serviceMonitorSelector:
matchLabels:
app: nginx-ingress-servicemonitor
resources:
requests:
memory: 500Mi
上記の例は基本的な例です。 重要な部分は、指定した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` support was recently added to the NGINX Ingress controller helm chart.
prometheus:
## Expose NGINX or NGINX Plus metrics in the Prometheus format.
create: true
## Configures the port to scrape the metrics.
port: 9113
secret: ""
## Configures the HTTP scheme used.
scheme: http
service:
## Requires prometheus.create=true
create: true
serviceMonitor:
create: true
labels: { app: nginx-ingress-servicemonitor }
上記の値を分解すると次のようになります。
prometheus:
## Expose NGINX or NGINX Plus metrics in the Prometheus format.
create: true
NIC Prometheus エンドポイントを有効にすることを Helm に伝えます。 必要に応じて、ポート、スキーム、シークレットを追加で定義できます。 prometheus.service.createの値を true に設定すると、Helm は NIC ServiceMonitor サービスを自動的に作成します。
service:
## Creates a ClusterIP Service to expose Prometheus metrics internally
## Requires prometheus.create=true
create: true
最後に、 serviceMonitorを作成する必要があります。 これを true に設定し、正しいラベルを追加すると、Prometheus リソースに一致するラベルが作成され、追加されます。
serviceMonitor:
## Creates a serviceMonitor to expose statistics on the kubernetes pods.
create: true
## Kubernetes object labels to attach to the serviceMonitor object.
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 の一部です。 q。"