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_interval
、scrape_timeout
、external_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-config
configmap のサンプルは、こちらです。
トラブルシューティング
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']