Container insights を使用して Prometheus メトリックを Log Analytics ワークスペースに送信する

この記事では、Container insights で監視されている Kubernetes クラスターから、Log Analytics ワークスペースに Prometheus メトリックを送信する方法について説明します。 この構成を実行する前に、まずはクラスター監視で推奨される方法である Prometheus 用 Azure Monitor マネージド サービスを使用して、クラスターから Prometheus メトリックをスクレイピングする必要があります。 この記事で説明する構成は、これと同じデータを、ログ クエリログ検索アラートを使ってそれを分析できる Log Analytics ワークスペースにも送信する場合にのみ、使用してください。

この構成では、Azure Monitor エージェント用の "監視アドオン" を構成する必要があります (同じアドオンが、Log Analytics ワークスペースにデータを送信するために Container insights で使用されています)。 次の図に示すように、エクスポーターまたはポッドを経由して Prometheus メトリック エンドポイントを公開し、Container insights で使用される Azure Monitor エージェントの監視アドオンを構成する必要があります。

Diagram of container monitoring architecture sending Prometheus metrics to Azure Monitor Logs.

Prometheus のスクレイピングの設定 (ログとして格納されているメトリックの場合)

Prometheus からのメトリックのアクティブなスクレイピングは、次の 2 つの観点のいずれかから実行され、メトリックは構成されたログ分析ワークスペースに送信されます。

  • クラスター全体: ConfigMap セクション [Prometheus data_collection_settings.cluster]で定義されています。
  • ノード全体: ConfigMap セクション [Prometheus data_collection_settings.node]で定義されています。
エンドポイント Scope
ポッド注釈 クラスター全体 prometheus.io/scrape: "true"
prometheus.io/path: "/mymetrics"
prometheus.io/port: "8000"
prometheus.io/scheme: "http"
Kubernetes サービス クラスター全体 http://my-service-dns.my-namespace:9100/metrics
http://metrics-server.kube-system.svc.cluster.local/metrics
URL/エンドポイント ノードごと、またはクラスター全体 (あるいは両方) http://myurl:9101/metrics

URL を指定すると、Container insights によりエンドポイントのみがスクレーピングされます。 Kubernetes サービスが指定されると、クラスター DNS サーバーを使用してサービス名が解決されて IP アドレスが取得されます。 次に、解決されたサービスがスクレイピングされます。

Scope Key データ型 説明
クラスター全体 メトリックのエンドポイントを収集するには、次の 3 つの方法のいずれかを指定します。
urls String コンマ区切りの配列 HTTP エンドポイント (指定された IP アドレスまたは有効な URL パス)。 (例: urls=[$NODE_IP/metrics])。 ($NODE_IP は、Container insights の特定のパラメーターであり、ノードの IP アドレスの代わりに使用できます。すべて大文字である必要があります。)
kubernetes_services String コンマ区切りの配列 kube-state-metrics からメトリックを収集する Kubernetes サービスの配列。 ここでは完全修飾ドメイン名を使用する必要があります。 たとえば、kubernetes_services = ["http://metrics-server.kube-system.svc.cluster.local/metrics",http://my-service-dns.my-namespace.svc.cluster.local:9100/metrics] にします。
monitor_kubernetes_pods Boolean true または false クラスター全体の設定で true に設定すると、Container insights エージェントにより、次の Prometheus 注釈についてクラスター全体の Kubernetes ポッドがスクレイピングされます。
prometheus.io/scrape:
prometheus.io/scheme:
prometheus.io/path:
prometheus.io/port:
prometheus.io/scrape Boolean true または false ポッドのスクレイピングを有効にし、 monitor_kubernetes_podstrueに設定する必要があります。
prometheus.io/scheme String http 既定値は HTTP 経由でのスクレイピングです。
prometheus.io/path String コンマ区切りの配列 メトリックを取り込む HTTP リソース パス。 メトリック パスが /metricsではない場合は、この注釈でそれを定義します。
prometheus.io/port String 9102 収集するポートを指定します。 ポートが設定されていない場合、既定値は 9102 です。
monitor_kubernetes_pods_namespaces String コンマ区切りの配列 Kubernetes ポッドからメトリックをスクレーピングするための名前空間の許可リスト。
たとえば、monitor_kubernetes_pods_namespaces = ["default1", "default2", "default3"] のように指定します。
ノード全体 urls String コンマ区切りの配列 HTTP エンドポイント (指定された IP アドレスまたは有効な URL パス)。 (例: urls=[$NODE_IP/metrics])。 ($NODE_IP は、Container insights の特定のパラメーターであり、ノードの IP アドレスの代わりに使用できます。すべて大文字である必要があります。)
ノード全体またはクラスター全体 interval String 60s 収集間隔の既定値は 1 分 (60 秒) です。 [prometheus_data_collection_settings.node] または [prometheus_data_collection_settings.cluster] に対する収集を、s、m、h などの時間単位に変更できます。
ノード全体またはクラスター全体 fieldpass
fielddrop
String コンマ区切りの配列 リスティングの許可 (fieldpass) および禁止 (fielddrop) を設定することにより、エンドポイントから特定のメトリックを収集する、または収集しないように指定できます。 許可リストを最初に設定する必要があります。

Prometheus スクレイピング構成を指定するように ConfigMaps を構成する (ログとして格納されるメトリックの場合)

クラスター用の ConfigMap 構成ファイルを構成するには、次のステップを実行します。 ConfigMaps はグローバル リストであり、エージェントに適用できる ConfigMap は 1 つだけです。 別の ConfigMaps でコレクションを上書きすることはできません。

  1. テンプレート ConfigMap の YAML ファイルをダウンロードし、container-azm-ms-agentconfig.yaml として保存します。 クラスターに ConfigMap を既にデプロイしてあり、それを新しい構成で更新したい場合は、前に使用した ConfigMap ファイルを編集できます。

  2. Prometheus メトリックをスクレイピングするためにご自分のカスタマイズで ConfigMap YAML ファイルを編集します。

    Kubernetes サービス クラスター全体で収集するには、次の例を使用して ConfigMap ファイルを構成します。

    prometheus-data-collection-settings: |- ​
    # Custom Prometheus metrics data collection settings
    [prometheus_data_collection_settings.cluster] ​
    interval = "1m"  ## Valid time units are s, m, h.
    fieldpass = ["metric_to_pass1", "metric_to_pass12"] ## specify metrics to pass through ​
    fielddrop = ["metric_to_drop"] ## specify metrics to drop from collecting
    kubernetes_services = ["http://my-service-dns.my-namespace:9102/metrics"]
    
  3. kubectl コマンド kubectl apply -f <configmap_yaml_file.yaml> を実行します。

    例: kubectl apply -f container-azm-ms-agentconfig.yaml.

構成の変更が有効になるまでに数分かかる場合があります。 クラスター内のすべての ama-logs ポッドが再起動します。 再起動が完了すると、次のような結果 configmap "container-azm-ms-agentconfig" createdを含むメッセージが表示されます。

構成の確認

クラスターに構成が正常に適用されたことを検証するには、次のコマンドを使って、エージェント ポッドからのログを確認します: kubectl logs ama-logs-fdf58 -n=kube-system

Azure Monitor エージェント ポッドからの構成エラーがある場合は、出力で次の例のようなエラーが示されます。

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

構成変更の適用に関連するエラーも確認できます。 次のオプションを使用して、構成変更および Prometheus メトリックのスクレーピングに関する追加のトラブルシューティングを実行できます。

  • エージェント ポッド ログから。同じ kubectl logs コマンドを使用。

  • ライブ データから。 ライブ データのログでは、次の例のようなエラーが示されます。

    2019-07-08T18:55:00Z E! [inputs.prometheus]: Error in plugin: error making HTTP request to http://invalidurl:1010/metrics: Get http://invalidurl:1010/metrics: dial tcp: lookup invalidurl on 10.0.0.10:53: no such host
    
  • Log Analytics ワークスペースの KubeMonAgentEvents テーブルから。 スクレーピング エラーの場合は "警告" の重大度、構成エラーの場合は "エラー" の重大度で 1 時間ごとにデータが送信されます。 エラーがない場合、テーブルのエントリには "情報" の重大度のデータが含まれ、エラーは報告されません。 Tags プロパティには、エラーが発生したポッドとコンテナー ID に関する詳細情報のほか、直近 1 時間の最初の発生、最後の発生、および発生回数も含まれます。

  • Azure Red Hat OpenShift v3.x および v4.x の場合は、openshift-azure-logging のログ収集が有効になっているかどうかを確認するために、ContainerLog テーブルを検索して Azure Monitor のログを確認します。

エラーがあると Azure Monitor エージェントでファイルを解析できず、再起動されて、既定の構成が使用されます。 Azure Red Hat OpenShift v3.x 以外のクラスターでは、ConfigMap のエラーを修正した後で、次のコマンド kubectl apply -f <configmap_yaml_file.yamlを実行して YAML ファイルを保存し、更新された ConfigMap を適用します。

Azure Red Hat OpenShift v3.x の場合は、コマンド oc edit configmaps container-azm-ms-agentconfig -n openshift-azure-loggingを実行して、更新された ConfigMap を編集して保存します。

Prometheus メトリック データのクエリを実行する

Azure Monitor によってスクレーピングされた Prometheus メトリックと、エージェントによって報告された構成エラーまたはスクレーピング エラーを表示するには、「Prometheus メトリック データのクエリを実行する」を確認してください。

Grafana で Prometheus メトリックを表示する

Container insights では、Grafana ダッシュボードの Log Analytics ワークスペースに格納されているメトリックの表示がサポートされています。 Grafana の ダッシュボード リポジトリからダウンロードできるテンプレートが用意されています。 テンプレートを使用して開始し、それを参照することで、監視対象のクラスターから他のデータをクエリしてカスタム Grafana ダッシュボードで可視化する方法を学ぶことができます。

次のステップ