8.6. FlowMetric API を使用したカスタムメトリクスの設定
FlowMetric
API を設定して、フローログデータフィールドを Prometheus ラベルとして使用してカスタムメトリクスを作成できます。複数の FlowMetric
リソースをプロジェクトに追加して、複数のダッシュボードビューを表示できます。
手順
-
Web コンソールで、Operators
Installed Operators に移動します。 - NetObserv Operator の Provided APIs 見出しで、FlowMetric を選択します。
- Project: ドロップダウンリストで、Network Observability Operator インスタンスのプロジェクトを選択します。
- Create FlowMetric をクリックします。
次のサンプル設定と同じように
FlowMetric
リソースを設定します。例8.1 クラスターの外部ソースから受信した Ingress バイト数を追跡するメトリクスを生成する
apiVersion: flows.netobserv.io/v1alpha1 kind: FlowMetric metadata: name: flowmetric-cluster-external-ingress-traffic namespace: netobserv 1 spec: metricName: cluster_external_ingress_bytes_total 2 type: Counter 3 valueField: Bytes direction: Ingress 4 labels: [DstK8S_HostName,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType] 5 filters: 6 - field: SrcSubnetLabel matchType: Absence
- 1
FlowMetric
リソースは、FlowCollector
spec.namespace
で定義された namespace (デフォルトではnetobserv
) に作成する必要があります。- 2
- Prometheus メトリクスの名前。Web コンソールでは接頭辞
netobserv-<metricName>
とともに表示されます。 - 3
type
はメトリクスのタイプを指定します。Counter
type
は、バイト数またはパケット数をカウントするのに役立ちます。- 4
- キャプチャーするトラフィックの方向。指定しない場合は、Ingress と Egress の両方がキャプチャーされ、重複したカウントが発生する可能性があります。
- 5
- ラベルは、メトリクスの外観とさまざまなエンティティー間の関係を定義します。また、メトリクスのカーディナリティーも定義します。たとえば、
SrcK8S_Name
はカーディナリティーが高いメトリクスです。 - 6
- リストされた基準に基づいて結果を絞り込みます。この例では、
SrcSubnetLabel
が存在しないフローのみを照合することによって、クラスターの外部トラフィックのみを選択します。これは、(spec.processor.subnetLabels
により) サブネットラベル機能が有効になっていることを前提としています。この機能はデフォルトで有効になっています。
検証
-
Pod が更新されたら、Observe
Metrics に移動します。 -
Expression フィールドにメトリクス名を入力して、対応する結果を表示します。
topk(5, sum(rate(netobserv_cluster_external_ingress_bytes_total{DstK8S_Namespace="my-namespace"}[2m])) by (DstK8S_HostName, DstK8S_OwnerName, DstK8S_OwnerType))
などの式を入力することもできます。
例8.2 クラスター外部 Ingress トラフィックの RTT 遅延を表示する
apiVersion: flows.netobserv.io/v1alpha1 kind: FlowMetric metadata: name: flowmetric-cluster-external-ingress-rtt namespace: netobserv 1 spec: metricName: cluster_external_ingress_rtt_seconds type: Histogram 2 valueField: TimeFlowRttNs direction: Ingress labels: [DstK8S_HostName,DstK8S_Namespace,DstK8S_OwnerName,DstK8S_OwnerType] filters: - field: SrcSubnetLabel matchType: Absence - field: TimeFlowRttNs matchType: Presence divider: "1000000000" 3 buckets: [".001", ".005", ".01", ".02", ".03", ".04", ".05", ".075", ".1", ".25", "1"] 4
- 1
FlowMetric
リソースは、FlowCollector
spec.namespace
で定義された namespace (デフォルトではnetobserv
) に作成する必要があります。- 2
type
はメトリクスのタイプを指定します。Histogram
type
は、遅延値 (TimeFlowRttNs
) に役立ちます。- 3
- ラウンドトリップタイム (RTT) はフロー内でナノ秒単位で提供されるため、秒単位に変換するには除数として 10 億を使用します。これは Prometheus ガイドラインの標準です。
- 4
- カスタムバケットは RTT の精度を指定します。最適な精度は 5 ミリ秒から 250 ミリ秒の範囲です。
検証
-
Pod が更新されたら、Observe
Metrics に移動します。 - Expression フィールドにメトリクス名を入力して、対応する結果を表示できます。
重要
カーディナリティーが高いと、Prometheus のメモリー使用量に影響する可能性があります。特定のラベルのカーディナリティーが高いかどうかは、ネットワークフロー形式のリファレンス で確認できます。