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 スタックのセットアップ¶
-
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
-
ServiceMonitors/PodMonitors を適用して、Knative からメトリクスを収集します。
kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/servicemonitor.yaml
Prometheus インスタンスへのローカルアクセス¶
デフォルトでは、Prometheus インスタンスは、prometheus-kube-prometheus-prometheus
という名前のプライベートサービスでのみ公開されます。
Web ブラウザーでコンソールにアクセスするには
-
次のコマンドを入力します
kubectl port-forward -n default svc/prometheus-kube-prometheus-prometheus 9090:9090
-
ブラウザから
http://localhost:9090
経由でコンソールにアクセスします。
Grafana インスタンスへのローカルアクセス¶
デフォルトでは、Grafana インスタンスは、prometheus-grafana
という名前のプライベートサービスでのみ公開されます。
Web ブラウザーでダッシュボードにアクセスするには
-
次のコマンドを入力します
kubectl port-forward -n default svc/prometheus-grafana 3000:80
-
ブラウザから
http://localhost:3000
経由でダッシュボードにアクセスします。 -
デフォルトの認証情報を使用してログインします
username: admin password: prom-operator
Grafana ダッシュボードのインポート¶
-
Grafana ダッシュボードは、
monitoring
リポジトリからインポートできます。 -
ダッシュボードサイドカーを有効にした Grafana Helm Chart を使用している場合は、次の configmap を適用してダッシュボードをロードできます。
kubectl apply -f https://raw.githubusercontent.com/knative-extensions/monitoring/main/grafana/dashboards.yaml
注意
Helm チャートには以下の値が構成されていることを確認する必要があります。そうしないと、ダッシュボードのロードが機能しません。
既存の configmap があり、ダッシュボードのロードが機能しない場合は、grafana: sidecar: dashboards: enabled: true searchNamespace: ALL
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 コレクターからスクレイピングされたメトリクスでは機能しません。
コレクターのセットアップ¶
-
次のコマンドを入力して、コレクターを実行する名前空間を作成します
次のステップでは、コレクターの作成にkubectl create namespace metrics
metrics
名前空間を使用します。 -
次のコマンドを入力して、コレクターの Deployment、Service、および ConfigMap を作成します
kubectl apply -f https://raw.githubusercontent.com/knative/docs/main/docs/serving/observability/metrics/collector.yaml
-
次のコマンドを入力して、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"}}'
コレクターのセットアップの確認¶
-
次のコマンドを入力して、コレクターの Prometheus エクスポートポートをロードすることで、メトリクスが転送されていることを確認できます
kubectl port-forward --namespace metrics deployment/otel-collector 8889
-
エクスポートされたメトリクスを確認するには、
http://localhost:8889/metrics
をフェッチします。