裏取りステータス: Code-verified
rsyslog-config.service / rsyslog-config.sh(sonic-buildimage/files/image_config/rsyslog/)が CONFIG_DB の SYSLOG_SERVER / SYSLOG_CONFIG を読み rsyslog テンプレを再生成。YANG: sonic-yang-models/yang-models/sonic-syslog.yang に SYSLOG_SERVER / SYSLOG_CONFIG が定義(source IP / VRF / port / severity / message_format 等)。config syslog / show syslog CLI は sonic-utilities に存在。HLD の主要構造(rsyslog omfwd + source IP + VRF binding + IP_FREEBIND)は実装に反映。
Syslog Source IP¶
なぜ Source IP / VRF が必要か¶
SONiC の syslog forwarding に source IP / VRF / port / protocol / filter / severity を設定できるようにする HLD(2022, v0.2 で大幅拡張)1。security / 識別、Mgmt VRF 利用時の到達性確保が動機。
rsyslogd の omfwd 出力モジュール 機能を流用し、CONFIG_DB → rsyslog-config daemon → /etc/rsyslog.conf 生成の経路を通す。
スコープ1:
- In: UDP の source IP 設定
- Out: TCP の source IP 設定
アーキテクチャ¶
flowchart LR
USER[(CONFIG_DB<br/>SYSLOG_CONFIG / SYSLOG_SERVER)] --> AGENT[rsyslog-config]
AGENT -->|/etc/rsyslog.conf 生成| RSYSLOG[rsyslogd<br/>omfwd]
RSYSLOG -->|UDP / TCP| SRV[remote syslog server]
KERN[Linux IP_FREEBIND] --> RSYSLOG
CONFIG_DB¶
SYSLOG_CONFIG|GLOBAL:
format = standard | welf
severity = notice | info | warning | ...
welf_firewall_name = <name>
SYSLOG_SERVER|<server>:
source = <ip> # UDP のみ(HLD scope)
port = 514
protocol = udp | tcp
vrf = <vrf-name> # 省略時 default
filter = <regex>
severity = <level>
omfwd マッピング¶
| omfwd | 役割 | default |
|---|---|---|
target |
宛先 | none |
address |
local IP bind(UDP 限定, SSIP の本質) | none |
port |
UDP/TCP port | 514 |
protocol |
udp / tcp | udp |
device |
bind device(VRF) | none |
ipfreebind |
IP_FREEBIND option | 2 |
filter |
regex | none |
priority |
severity 以上 | notice |
IP_FREEBIND: source IP が「まだ up していない interface の IP」や「dynamic IP」でも bind 失敗で daemon が落ちないように既定 2 で有効化1。
VRF / Source の 4 組合せ¶
| VRF | source | 挙動 |
|---|---|---|
| unset | unset | 既定(main routing table) |
| unset | set | source IP のみ指定 |
| set | unset | VRF device に bind |
| set | set | VRF + source IP(典型的な mgmt-vrf 運用) |
設定変更フロー¶
sequenceDiagram
participant U as user
participant CDB as CONFIG_DB
participant AGENT as rsyslog-config
participant FILE as /etc/rsyslog.conf
participant R as rsyslogd
U->>CDB: config syslog add ...
CDB->>AGENT: notify
AGENT->>FILE: 再生成
AGENT->>R: SIGHUP / restart
R->>R: omfwd で送信
DB schema は既存表記を変えず、新フィールドを足すだけ。SSIP を使わなければ既存挙動と完全互換1。
CLI / 設定例¶
config syslog add <server> --source <ip> --port 514 --proto udp \
--vrf mgmt --filter "<regex>" --severity info
config syslog del <server>
config syslog global format welf --welf-firewall-name <name>
config syslog global severity warning
show syslog
show syslog global
Warm/Fast boot 時は CONFIG_DB 永続化のため特別対応不要1。
制限事項¶
- TCP の source IP 指定は非対応1
- regex filter は rsyslog 側仕様に依存
address設定の瞬間に rsyslog 再起動 → 過渡的 syslog drop の可能性あり
干渉する機能¶
VRF / Mgmt VRF(device と組み合わせ)/ rsyslog テンプレート(format=welf 等)/ IP_FREEBIND。
トラブルシューティング¶
- syslog が届かない →
/etc/rsyslog.confと rsyslogd ログで bind error 確認 - VRF 経由が出ない →
deviceフィールドと VRF master device の存在確認
# syslog source IP / VRF の確認
sonic-db-cli CONFIG_DB hgetall "SYSLOG_SERVER|<server-ip>"
docker exec syslog cat /etc/rsyslog.conf | grep -E "Device|Address|Target"
journalctl -u rsyslog -n 100 | grep -iE "bind|error"
ip vrf list
関連 Topics¶
- 09-telemetry-snmp: ログ / 監視周辺
- 15-security-aaa: 監査ログ運用