Azure Monitor での Prometheus メトリックのカスタム構成ファイルの作成と検証

Azure Monitor Prometheus エージェントが既定でスクレイピングする既定のスクレイプ ターゲットに加えて、次の手順で構成マップを使用してエージェントにさらにスクレイプ構成を提供します。 Azure Monitor Prometheus エージェントは、スクレープ構成のオペレーター CRD を理解または処理しませんが、代わりに Prometheus 構成で定義されているネイティブの Prometheus 構成を使用します。

カスタム ターゲット スクレイピングに使用できる 3 つの configmap は次のとおりです。

  • ama-metrics-prometheus-config (推奨) - この名前の configmap が作成されると、クラスターで実行されている Azure Monitor メトリック レプリカ ポッドから、その名前で定義されたジョブがスクレイピングされます。
  • ama-metrics-prometheus-config-node (詳細) - この名前の configmap が作成されると、クラスターで実行されている各 Linux デーモンセット ポッドから、その名前で定義されたジョブがスクレイピングされます。 詳細については、高度な設定に関するページをご覧ください。
  • ama-metrics-prometheus-config-node-windows (詳細) - この名前の configmap が作成されると、各 windows デーモンセットから、その名前で定義されたジョブがスクレイピングされます。 詳細については、高度な設定に関するページをご覧ください。

Prometheus 構成ファイルの作成

Prometheus のスクレイピング構成ジョブを簡単に作成する方法の 1 つは次のとおりです。

  • 手順:1 構成ファイル (yaml) を使用してスクレイピング ジョブを作成または定義する
  • 手順:2 カスタム ツール (この記事で説明) を使用してスクレイピング構成ファイルを検証し、その構成ファイルを configmap に変換する
  • 手順:3 スクレイピング構成ファイルを構成マップとしてクラスターにデプロイする。

この方法を使用すると、yaml 構成 (非常にスペースに依存する) をより簡単に作成できます。また、構成マップ内でスクレイピング構成を直接作成することで意図しないスペースを追加することがありません。

prometheus-config という名前の Prometheus スクレイプ構成ファイルを作成します。 詳細については、Prometheus のスクレイプ設定の作成の詳細を説明する「設定のヒントと例」を参照してください。 また、Prometheus.ioのスクレーピング構成リファレンスも参照できます。 構成ファイルには、scrape_configs セクションの下にスクレープ設定が一覧表示され、必要に応じてグローバル セクションを使用してグローバル scrape_intervalscrape_timeoutexternal_labels を設定できます。

ヒント

グローバル セクションへの変更は、デフォルトの構成とカスタム構成に影響します。

Prometheus のスクレープ構成ファイルのサンプルをここに示します。

global:
  scrape_interval: 30s
scrape_configs:
- job_name: my_static_config
  scrape_interval: 60s
  static_configs:
    - targets: ['my-static-service.svc.cluster.local:1234']

- job_name: prometheus_example_app
  scheme: http
  kubernetes_sd_configs:
    - role: service
  relabel_configs:
    - source_labels: [__meta_kubernetes_service_name]
      action: keep
      regex: "prometheus-example-service"

スクレーピング構成ファイルを検証する

エージェントは、このカスタム promconfigvalidator ツールを使用して、構成マップを介して指定された Prometheus 構成を検証します。 構成が有効でない場合、指定されたカスタム構成はアドオン エージェントによって拒否されます。 Prometheus 構成ファイルを作成したら、エージェントが使用するコンフィグマップを作成する前に、オプションでpromconfigvalidatorツールを使用してコンフィグレーションを検証できます。

promconfigvalidator ツールは、Azure Monitor メトリック アドオン ポッドに含まれ出荷されます。 クラスター内の kube-system 名前空間内の ama-metrics-node-* ポッドのいずれか使用して、検証用のツールをダウンロードできます。 kubectl cp を使用して、次のようにツールとその構成をダウンロードします。

for podname in $(kubectl get pods -l rsName=ama-metrics -n=kube-system -o json | jq -r '.items[].metadata.name'); do kubectl cp -n=kube-system "${podname}":/opt/promconfigvalidator ./promconfigvalidator;  kubectl cp -n=kube-system "${podname}":/opt/microsoft/otelcollector/collector-config-template.yml ./collector-config-template.yml; chmod 500 promconfigvalidator; done

実行可能ファイルと yaml をコピーした後、作成した Prometheus 構成ファイルのパスを見つけます。 次に、コマンドで <config path> を置き換えて、次のコマンドで検証コントロールを実行します。

./promconfigvalidator/promconfigvalidator --config "<config path>" --otelTemplate "./promconfigvalidator/collector-config-template.yml"

バリデーターを実行すると、省略可能な merged-otel-config.yaml パラメーターでパスが指定されていない場合にマージされた構成ファイル output が生成されます。 この自動生成されマージされたファイルは、ツールの検証とデバッグの目的でのみ使用されるため、メトリック コレクター エージェントの設定として使用しないでください。

configmap として構成ファイルをデプロイする

カスタムの Prometheus 構成ファイルは、kube-system 名前空間のメトリック アドオン configmap ama-metrics-prometheus-config (または) ama-metrics-prometheus-config-node (または) ama-metrics-prometheus-config-node-windows の中の prometheus-config という名前のフィールドとして使用されます。 上記で作成したスクレイピング構成ファイルから構成マップを作成するには、Prometheus 構成ファイルの名前を prometheus-config (ファイル拡張子なし) に変更し、カスタム スクレイピング ジョブの構成用に作成する configmap に応じて、次のコマンドを 1 つ以上実行します。

例 - replicsset で使用する configmap を作成する

kubectl create configmap ama-metrics-prometheus-config --from-file=prometheus-config -n kube-system

これにより、kube-system 名前空間に ama-metrics-prometheus-config という名前の configmap が作成されます。 Azure Monitor メトリック レプリカ ポッドが 30 から 60 秒で再起動し、新しい構成が適用されます。構成の検証、処理、またはマージに問題があるかどうかを確認するには、ama-metrics レプリカ ポッドを確認します

例 - linux デーモンセットで使用する configmap を作成する

kubectl create configmap ama-metrics-prometheus-config-node --from-file=prometheus-config -n kube-system

これにより、kube-system 名前空間に ama-metrics-prometheus-config-node という名前の configmap が作成されます。 すべての Azure Monitor メトリック Linux デーモンセット ポッドが 30 から 60 秒で再起動し、新しい構成が適用されます。構成の検証、処理、またはマージに問題があるかどうかを確認するには、ama-metrics-node linux デーモンセット ポッドを確認します

例 - windows デーモンセットで使用する configmap を作成する

kubectl create configmap ama-metrics-prometheus-config-node-windows --from-file=prometheus-config -n kube-system

これにより、kube-system 名前空間に ama-metrics-prometheus-config-node-windows という名前の configmap が作成されます。 すべての Azure Monitor メトリック Windows デーモンセット ポッドが 30 から 60 秒で再起動し、新しい構成が適用されます。構成の検証、処理、またはマージに問題があるかどうかを確認するには、ama-metrics-win-node windows デーモンセット ポッドを確認します

ファイル名は、configmap 設定名として使用されるため、次のコマンドを実行する前に、Prometheus 設定ファイルの名前が prometheus-config であることを確認してください。

これにより、kube-system 名前空間に ama-metrics-prometheus-config という名前の configmap が作成されます。 Azure Monitor メトリック ポッドが再起動し、新しい構成が適用されます。構成の検証、処理、またはマージに問題があるかどうかを確認するには、ama-metrics ポッドを確認します。

ama-metrics-prometheus-configconfigmap のサンプルは、こちらです。

トラブルシューティング

kube-system 名前空間に configmap (ama-metrics-prometheus-config または ama-metrics-prometheus-config-node) が正常に作成されたのに、カスタム ターゲットがスクレイピングされているのが表示されない場合は、"kubectl ログ" を使用して、ama-metrics-prometheus-config configmap のレプリカ ポッド ログまたは ama-metrics-prometheus-config-node configmap の デーモンセット ポッド ログでエラーの有無を確認し、プレフィックス prometheus-config-merger の付いた "既定およびカスタムの Prometheus 構成のマージの開始" に関するセクションでエラーがないことを確認します

Note

高度な設定: デーモンセットのカスタム Prometheus スクレイピング ジョブを構成する

ama-metrics レプリカ ポッドでは、カスタム Prometheus 構成を使用して、指定されたターゲットをスクレイピングします。 ノードおよびポッドの数が多く、スクレイピングするメトリックが大量であるクラスターの場合、該当するカスタム スクレイピング ターゲットの一部を、単一 ama-metrics レプリカ ポッドから ama-metrics デーモンセット ポッドにオフロードできます。

レプリカセットの configmap と同様に、ama-metrics-prometheus-config-node configmapを作成して、各ノードで静的スクレイピングを構成することができます。 スクレイピング構成は 1 つのノードのみを対象とする必要があり、サービス検出/ポッド注釈を使用することはできません。 そうしなければ、各ノードはすべてのターゲットをスクレイピングしようとし、Kubernetes API サーバーに対して多くの呼び出しを行うことになります。

カスタム スクレイピング ターゲットは、ターゲットに static_configs を使用し、$NODE_IP 環境変数を使用して、スクレイピングするポートを指定することにより、同じ形式に従うことができます。 デーモンセットの各ポッドは、この構成を取得し、メトリックをスクレイピングし、それらをそのノードに送信します。

例:- 次の node-exporter 構成は、デーモンセット ポッドの既定のターゲットの 1 つです。 これは、$NODE_IP 環境変数を使用します。この変数は、すべての ama-metrics アドオン コンテナーでノードの特定のポートをターゲットにするように既に設定されています。

- job_name: nodesample
  scrape_interval: 30s
  scheme: http
  metrics_path: /metrics
  relabel_configs:
  - source_labels: [__metrics_path__]
    regex: (.*)
    target_label: metrics_path
  - source_labels: [__address__]
    replacement: '$NODE_NAME'
    target_label: instance
  static_configs:
  - targets: ['$NODE_IP:9100']

次のステップ