Topics で読み物として読む
この HLD は実装詳細を含みます。機能の概念・設定・運用を読み物として読みたい場合は Topics 09 章: Telemetry / SNMP / ログ を参照。
裏取りステータス: Code-verified(基本構成のみ)
現行 master の sonic-host-services/scripts/hostcfgd:1848 に MemoryStatisticsCfg クラスがあり MEMORY_STATISTICS テーブル監視と SIGHUP 連携が実装。sonic-utilities/config/memory_statistics.py と show/memory_statistics.py で CLI が整備、sonic-yang-models の sonic-memory-statistics.yang も存在。memorystatsd デーモン名そのものは別ファイル名で実装されている可能性あり(verified at: 2026-05-09)。
メモリ統計収集(memorystatsd と MEMORY_STATISTICS テーブル)¶
概要¶
OS レベルの メモリ使用量(total / used / free / available / cached / shared / buffers) を SONiC ネイティブで定期サンプリングし、CLI から履歴クエリできるようにする機能。サードパーティ監視ツールへの依存を減らす目的1。
新規デーモン memorystatsd がデータを収集し、圧縮ログとして保持する。hostcfgd が CONFIG_DB の設定変化を監視して SIGHUP で再ロードする。デフォルトは無効(リソース節約のため)1。
動作仕様¶
構成要素¶
flowchart LR
CLI[config memory-stats] --> CDB[(CONFIG_DB MEMORY_STATISTICS)]
CDB --> HC[hostcfgd]
HC -->|SIGHUP| MD[memorystatsd]
MD --> LOG[圧縮ログファイル]
SHOW[show memory-stats] --> LOG
SHOW --> CDB
- memorystatsd: psutil でメモリ統計を取り、ログに書く。
SIGHUPで設定再読込、SIGTERMで graceful shutdown。 - hostcfgd: CONFIG_DB の
MEMORY_STATISTICSテーブル変更を購読し、デーモンにSIGHUPを送る。 - 再起動時の挙動: クラッシュや再起動時は 設定ファイルの default に戻る。runtime に CONFIG_DB から反映された値は永続化されない(次回起動では再度 hostcfgd が同期する)1。
サンプリングと保持¶
| Parameter | Default | Range |
|---|---|---|
enabled |
false |
bool |
sampling_interval (分) |
5 | 3–15 |
retention_period (日) |
15 | 1–30 |
データ収集は disable 時にも常時動くわけではない。enable された期間のみ収集され、retention_period を超えたデータはローテートされる。
CLI 出力例¶
admin@sonic:~$ show memory-stats
Memory Statistics:
Codes: M - minutes, H - hours, D - days
Report Generated: 2024-12-04 15:49:52
Analysis Period: From 2024-11-19 15:49:52 to 2024-12-04 15:49:52
Interval: 2 Days
Metric Current High Low ...
total_memory 15.29GB 15.29GB 15.29GB ...
used_memory 8.87GB 9.35GB 8.15GB ...
free_memory 943.92MB 906.28MB 500.00MB ...
available_memory 4.78GB 4.74GB 4.35GB ...
--from / --to で期間指定、--select で特定メトリクスのみ表示できる1。
設定¶
関連する CONFIG_DB¶
MEMORY_STATISTICS|memory_statistics
enabled = "true" | "false" ; default false
sampling_interval = 3..15 (分) ; default 5
retention_period = 1..30 (日) ; default 15
関連する CLI¶
| Command | 用途 |
|---|---|
config memory-stats enable / disable |
機能の ON/OFF |
config memory-stats sampling-interval <minutes> |
サンプリング間隔 |
config memory-stats retention-period <days> |
保持期間 |
show memory-stats [--from ... --to ... --select ...] |
統計表示 |
show memory-stats config |
現在の設定表示 |
関連する YANG¶
sonic-memory-statistics モジュールが新規追加される。enabled (boolean) / sampling_interval (uint8 range 3..15, units minutes) / retention_period (uint8 range 1..30, units days)1。
設定例¶
sudo config memory-stats enable
sudo config memory-stats sampling-interval 3
sudo config memory-stats retention-period 30
show memory-stats config
制限事項¶
memorystatsdは再起動時に必ず default 設定に戻り、その後 hostcfgd 経由で CONFIG_DB の値を SIGHUP で適用する設計。enabledが CONFIG_DB でtrueでも、デーモン起動直後は無効状態を経由する。- メモリメトリクスは OS レベルの全体値 のみで、個別プロセス・コンテナ単位の統計は対象外(Future Work で言及)1。
- アラート / 閾値通知は HLD では Future Work として明記。
干渉する機能¶
- hostcfgd: 既存のホスト設定デーモンに
MEMORY_STATISTICSテーブル監視と SIGHUP 送信ロジックが追加される。他テーブルへの影響は無い。 show techsupport: ログファイルがディスク上にあるため、tech-support 取得時に圧縮ログが含まれるはず(HLD には明記なし)。- Warm/Fast boot: 影響なし(HLD で明記)1。
トラブルシューティング¶
show memory-statsが空 →config memory-stats enableで有効化されているかと、デーモンが動いているかをsystemctl status memorystatsdで確認。- 設定変更が反映されない →
hostcfgdのログで SIGHUP 送信が走っているか確認。 - データが断片化している →
retention_periodを超えた古いデータがローテートで消えている可能性。
コマンド例¶
メモリ統計デーモンの動作を確認する。
show memory-stats
show memory-stats config
redis-cli -n 6 keys 'MEMORY_STATISTICS|*'
docker ps | grep -i memory-stats