コンテンツにスキップ

SFLOW テーブル

概要

sFlow サンプリングのグローバル設定 / per-port セッション設定 / コレクタ宛先を定義する 3 つの container を含む。hsflowd (sflowd container) と sflowmgrdCONFIG_DB を購読する1

データフロー (自動生成)

flowchart LR
  CDB[("CONFIG_DB<br/>SFLOW")]
  DM["sflowmgrd"]
  CDB --> DM
  APPDB[("APP_DB<br/>APP_SFLOW_TABLE")]
  DM --> APPDB
  SYNCD["syncd"]
  APPDB --> SYNCD
  SAI["SAI<br/>sai_samplepacket_api"]
  SYNCD --> SAI

凡例

CONFIG_DB から SAI までの典型経路を docs/reference/config-db-orch-map.md から機械生成したミニ図。詳細・例外は本ページ本文と対応表を参照。

key / 構造

SFLOW|global               # グローバル
SFLOW_SESSION|<port>       # per-port 設定 (port = 'all' でグローバル既定)
SFLOW_COLLECTOR|<name>     # コレクタ

SFLOW (global)

フィールド 既定 説明
admin_state up/down down sFlow 全体の有効化
polling_interval uint16 (0 または 5..300) 20 カウンタ収集間隔 [秒]
agent_id union leafref / Vlan pattern - agent ID として使う interface
sample_direction enum rx/tx/both rx サンプリング方向

SFLOW_SESSION (per-port)

フィールド 既定 説明
admin_state up/down up port ごとの sFlow 有効化
sample_rate uint32 (256..8388608) - 1/N パケットサンプリング (port != 'all' 限定)
sample_direction enum rx/tx/both rx 方向

key の portPORT.name または 'all' (全ポート既定)。

SFLOW_COLLECTOR

フィールド 既定 必須 説明
collector_ip ip-address - yes コレクタの IPv4 / IPv6
collector_port inet:port-number 6343 no UDP ポート
collector_vrf string mgmt/default - no コレクタへ到達する VRF

最大 2 コレクタ (max-elements 2)。collector_vrf = 'mgmt'MGMT_VRF_CONFIG.vrf_global.mgmtVrfEnabled = 'true' のときのみ許容 (must)。

購読者

  • sflowmgrd (docker-sflow): CONFIG_DBhsflowd 設定生成
  • hsflowd: sampling / counter export 実体

関連 CONFIG_DB / YANG / CLI

  • 関連 CONFIG_DB: PORTPORTCHANNELMGMT_PORTMGMT_VRF_CONFIG
  • 関連 CLI: config sflow enable/disable/polling-interval/agent-id/collector/interface
  • 関連 YANG: sonic-sflow

関連リファレンス

引用元

関連 Topics

運用ヒント

典型値

  • key 形式: SFLOW|globalSFLOW_SESSION|<port>SFLOW_COLLECTOR|<name>
  • admin_state: up
  • polling_interval: 20(秒)。
  • agent_id: Loopback0 等。

よくある誤設定

  • agent_id を management IF にすると collector 側で device 識別が混乱。

確認コマンド

sonic-db-cli CONFIG_DB hgetall 'SFLOW|global'
show sflow

値依存挙動マトリクス

グローバル admin_state 値別挙動

挙動
up sFlow 全体有効化(m_gEnable = true)。per-port 設定と AND で各ポートのサンプリングを制御。
down sFlow 全体無効化(デフォルト)。isPortEnabled() が常に false になり per-port admin_state=up でも全ポート停止。

per-port admin_state 値別挙動

挙動
up ポートごとの有効化。グローバル admin_state=up のときのみ実際に有効。
down ポートごとの無効化。admin == "up" チェック失敗でサンプリング停止。

sample_direction 値別挙動(グローバル / per-port 共通)

挙動
rx 受信パケットのみサンプリング(デフォルト m_gDirection = "rx")。
tx 送信パケットのみサンプリング。
both 送受信両方サンプリング。

collector_vrf 値別挙動

挙動
mgmt MGMT_VRF_CONFIG.vrf_global.mgmtVrfEnabled = 'true' のときのみ YANG must 制約で許容。
default デフォルト VRF 経由でコレクタに送信。

例外条件・特殊挙動

  • PORT_TABLE consumer 未初期化: sflowmgr 起動時に PORT_TABLE の consumer が見つからない場合 SWSS_LOG_ERROR("Consumer object for PORT_TABLE not found") を出す。per-port サンプリングレートの解決ができなくなる。2
  • hsflowd サービス制御失敗: service hsflowd restart/stop が失敗した場合 SWSS_LOG_ERROR("Command failed with rc %d") を出す。CONFIG_DB の状態と実際のサービス状態がずれる。2
  • ポート名が map に未登録: per-port のサンプリングレート算出時に PORT_TABLE に存在しないポートを指定すると SWSS_LOG_ERROR("%s not found in port configuration map")ERROR_SPEED を返す。2
  • SAI sample packet session 作成失敗: sai_samplepacket_api->create_samplepacket() が失敗した場合 SWSS_LOG_ERROR("Failed to create sample packet session") → sFlow セッションが有効化されない。2
  • 既存セッションのクリーンアップ失敗: レート変更時に古いセッションの destroy に失敗すると複数レートのセッションが ASIC に残留する可能性がある。2
  • グローバル無効はローカル設定を上書き: isPortEnabled()m_gEnable && (m_intfAllConf || ...) で判定するため、グローバル sflow が無効なら per-port 設定に関わらず全ポートで sFlow は停止する。2