コンテンツにスキップ

Knative でのメトリクス収集

Knative は、メトリクス収集のためのさまざまな一般的なツールをサポートしています。

Grafana ダッシュボードは、Prometheus で直接収集されたメトリクスで利用可能です。

また、OpenTelemetry をサポートする他のメトリクスプロバイダーに、Knative コンポーネントからメトリクスを受信して配信するように OpenTelemetry コレクターを設定することもできます。

警告

OpenTelemetry コレクターと Prometheus を同時に使用することはできません。デフォルトのメトリクスバックエンドは Prometheus です。Prometheus メトリクスを有効にするには、config-observability Configmap から metrics.backend-destination および metrics.request-metrics-backend-destination キーを削除する必要があります。

Prometheus スタックについて

Prometheus は、時系列メトリクスの収集、集計、アラートを行うためのオープンソースツールです。Prometheus を使用する場合、以下に示す OpenTelemetry コレクターをスクレイピングするために使用することもできます。

Grafana は、データ分析と視覚化のためのオープンソースプラットフォームであり、ユーザーはさまざまなデータソースからのメトリクスを監視および分析するためのカスタマイズ可能なダッシュボードを作成できます。

Prometheus スタック は、Kubernetes マニフェスト、Grafana ダッシュボード、Prometheus ルールの事前構成済みのコレクションで、Prometheus Operator を使用して Prometheus によるエンドツーエンドの Kubernetes クラスター監視を提供するために結合されています。スタックには、デフォルトでいくつかの Prometheus パッケージと Grafana が含まれています。

Prometheus スタックのセットアップ

  1. Prometheus スタックHelm を使用してインストールします。

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    helm install prometheus prometheus-community/kube-prometheus-stack -n default -f values.yaml
    # values.yaml contains at minimum the configuration below
    

    注意

    Helm チャートには以下の値が構成されていることを確認する必要があります。そうしないと、ServiceMonitors/Podmonitors が機能しません。

    kube-state-metrics:
      metricLabelsAllowlist:
        - pods=[*]
        - deployments=[app.kubernetes.io/name,app.kubernetes.io/component,app.kubernetes.io/instance]
    prometheus:
      prometheusSpec:
        serviceMonitorSelectorNilUsesHelmValues: false
        podMonitorSelectorNilUsesHelmValues: false
    

  2. ServiceMonitors/PodMonitors を適用して、Knative からメトリクスを収集します。

    kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/servicemonitor.yaml
    

Prometheus インスタンスへのローカルアクセス

デフォルトでは、Prometheus インスタンスは、prometheus-kube-prometheus-prometheus という名前のプライベートサービスでのみ公開されます。

Web ブラウザーでコンソールにアクセスするには

  1. 次のコマンドを入力します

    kubectl port-forward -n default svc/prometheus-kube-prometheus-prometheus 9090:9090
    
  2. ブラウザから http://localhost:9090 経由でコンソールにアクセスします。

Grafana インスタンスへのローカルアクセス

デフォルトでは、Grafana インスタンスは、prometheus-grafana という名前のプライベートサービスでのみ公開されます。

Web ブラウザーでダッシュボードにアクセスするには

  1. 次のコマンドを入力します

    kubectl port-forward -n default svc/prometheus-grafana 3000:80
    
  2. ブラウザから http://localhost:3000 経由でダッシュボードにアクセスします。

  3. デフォルトの認証情報を使用してログインします

    username: admin
    password: prom-operator
    

Grafana ダッシュボードのインポート

  1. Grafana ダッシュボードは、monitoring リポジトリからインポートできます。

  2. ダッシュボードサイドカーを有効にした Grafana Helm Chart を使用している場合は、次の configmap を適用してダッシュボードをロードできます。

    kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/grafana/dashboards.yaml
    

    注意

    Helm チャートには以下の値が構成されていることを確認する必要があります。そうしないと、ダッシュボードのロードが機能しません。

    grafana:
      sidecar:
        dashboards:
          enabled: true
          searchNamespace: ALL
    
    既存の configmap があり、ダッシュボードのロードが機能しない場合は、searchNamespace: ALL 宣言の後で、helm チャートに labelValue: true 属性を追加します。

OpenTelemetry について

OpenTelemetry は、クラウドネイティブソフトウェア用の CNCF 可観測性フレームワークであり、ツール、API、SDK のコレクションを提供します。

OpenTelemetry を使用して、テレメトリデータを計測、生成、収集、エクスポートできます。このデータには、Knative コンポーネントのパフォーマンスと動作を理解するために分析できるメトリクス、ログ、トレースが含まれます。

OpenTelemetry を使用すると、Knative バイナリをリビルドまたは再構成する必要なく、メトリクスを複数のモニタリングサービスに簡単にエクスポートできます。

コレクターの理解

コレクターは、さまざまな Knative コンポーネントが、モニタリングサービスによって保持および収集されるメトリクスをプッシュできる場所を提供します。

次の例では、ConfigMap と Deployment を使用して、単一のコレクターインスタンスを構成できます。

ヒント

より複雑なデプロイメントの場合は、OpenTelemetry Operator を使用して、これらの手順の一部を自動化できます。

注意

https://github.com/knative-extensions/monitoring/tree/main/grafana にある Grafana ダッシュボードは、OpenTelemetry コレクターからスクレイピングされたメトリクスでは機能しません。

Diagram of components reporting to collector, which is scraped by Prometheus

コレクターのセットアップ

  1. 次のコマンドを入力して、コレクターを実行する名前空間を作成します

    kubectl create namespace metrics
    
    次のステップでは、コレクターの作成に metrics 名前空間を使用します。

  2. 次のコマンドを入力して、コレクターの Deployment、Service、および ConfigMap を作成します

    kubectl apply -f https://raw.githubusercontent.com/knative/docs/main/docs/serving/observability/metrics/collector.yaml
    
  3. 次のコマンドを入力して、Knative Serving および Eventing 名前空間の config-observability ConfigMaps を更新します

    kubectl patch --namespace knative-serving configmap/config-observability \
      --type merge \
      --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.request-metrics-backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}'
    kubectl patch --namespace knative-eventing configmap/config-observability \
      --type merge \
      --patch '{"data":{"metrics.backend-destination":"opencensus","metrics.opencensus-address":"otel-collector.metrics:55678"}}'
    

コレクターのセットアップの確認

  1. 次のコマンドを入力して、コレクターの Prometheus エクスポートポートをロードすることで、メトリクスが転送されていることを確認できます

    kubectl port-forward --namespace metrics deployment/otel-collector 8889
    
  2. エクスポートされたメトリクスを確認するには、http://localhost:8889/metrics をフェッチします。

サイトのトラフィックを把握するために、分析とクッキーを使用しています。当サイトの利用に関する情報は、その目的のために Google と共有されます。 詳細はこちら。