config snmp / snmpagentaddress / snmptrap サブコマンド¶
概要¶
SNMP 関連の CLI は 3 つの独立したトップレベルグループ に分かれている: config snmp、config snmpagentaddress、config snmptrap。すべて config/main.py 内に直接定義されており、snmpd.conf を再生成するために各操作後に systemctl restart snmp が走る1。
config snmp ......SNMP/SNMP_COMMUNITY/SNMP_USERテーブルへの contact / location / community / user 操作config snmpagentaddress ...... snmpd の bind IP:Port:VRF をSNMP_AGENT_ADDRESS_CONFIGに登録config snmptrap ...... v1/v2/v3 の trap 送信先をSNMP_TRAP_CONFIGに登録
コマンド一覧¶
config snmp ...¶
| コマンド | 用途 |
|---|---|
config snmp community add <community> <RO\|RW> |
community string 追加 |
config snmp community del <community> |
community string 削除 |
config snmp community replace <current> <new> |
community 置換(type は維持) |
config snmp contact add <name> <email> |
コンタクト追加(1 件まで) |
config snmp contact del <name> |
コンタクト削除 |
config snmp contact modify <name> <email> |
コンタクト変更 |
config snmp location add <location...> |
ロケーション追加(nargs=-1 でスペース許可) |
config snmp location del <location...> |
ロケーション削除 |
config snmp location modify <location...> |
ロケーション変更 |
config snmp user add <user> <type> <RO\|RW> [<auth_type> <auth_pw> [<enc_type> <enc_pw>]] |
SNMPv3 user 追加 |
config snmp user del <user> |
user 削除 |
config snmpagentaddress ...¶
| コマンド | 用途 |
|---|---|
config snmpagentaddress add <ip> [-p PORT] [-v VRF] |
snmpd 待ち受け IP:Port を登録 |
config snmpagentaddress del <ip> [-p PORT] [-v VRF] |
同上を削除 |
config snmptrap ...¶
| コマンド | 用途 |
|---|---|
config snmptrap modify <1\|2\|3> <serverip> [-p PORT] [-v VRF] [-c COMMUNITY] |
trap 送信先を設定/上書き(version 単位) |
config snmptrap del <1\|2\|3> |
当該 version の trap 設定を削除 |
各コマンドの詳細¶
config snmp community add <community> <RO|RW>¶
動作:
community文字列は最大 32 文字、@:を含まないこと(snmp_community_secret_check)。string_typeはRO/RWの 2 値。- 既存と重複なら sys.exit(3)、その後
set_entry('SNMP_COMMUNITY', community, {'TYPE': string_type})。 - 完了後に
systemctl reset-failed+systemctl restart snmp.service。
📋 検証エビデンス: sonic-net/sonic-utilities/config/main.py#L4372-L4403 (sha: 39732bceb8bdefe706518ab40623bbbba6ff33b9)
出典:
sonic-net/sonic-utilities/config/main.py#L4372-L4403 (sha: 39732bceb8bdefe706518ab40623bbbba6ff33b9)
抜粋:
config snmp user add <user> <type> <RO|RW> [<auth_type> <auth_pw> [<enc_type> <enc_pw>]]¶
引数(SnmpUserError 列挙で網羅):
<user>... 32 文字以下、@:不可<type>...noAuthNoPriv/AuthNoPriv/Priv(小文字でも入力可、内部正規化)<RO|RW>... 権限<auth_type>...MD5/SHA/HMAC-SHA-2(type がnoAuthNoPriv以外で必須)<auth_pw>... 8 文字以上 64 文字以下、@:不可<enc_type>...DES/AES(type がPrivのときに必須)<enc_pw>...auth_pwと同じ複雑性ルール
動作:
組合せ違反は SnmpUserError の対応する exit code で終了する(TypeNoAuthNoPrivOrAuthNoPrivOrPrivCheckFailure = 2、AuthPasswordMissing = 7 など 14 種)。問題なければ SNMP_USER|<user> に SNMP_USER_TYPE / SNMP_USER_PERMISSION / SNMP_USER_AUTH_TYPE / SNMP_USER_AUTH_PASSWORD / SNMP_USER_ENCRYPTION_TYPE / SNMP_USER_ENCRYPTION_PASSWORD の 6 フィールドを書く。
config snmp contact add <name> <email>¶
SNMP|CONTACT に {name: email} を set_entry で書く。name はキーとして使われるため、既に CONTACT が存在すると失敗(modify を使えと案内)2。
config snmp location add <location...>¶
location は nargs=-1(複数引数を空白で連結)。SNMP|LOCATION の Location フィールドに格納。1 件しか持てない(既存があれば Location already exists)。
config snmpagentaddress add <ip> [-p PORT] [-v VRF]¶
動作:
- IP は
is_ipaddressで検証。リンクローカルは<ip>%<zone>形式 (fe80::1%eth0等) 可。 - ManagementVRF が
MGMT_VRF_CONFIG.mgmtVrfEnabled = "true"のとき、-v必須。 - 当該 IP がローカルインターフェイスに付与されているか
netifacesで確認。 SNMP_AGENT_ADDRESS_CONFIGの key は<ip>|<port>|<vrf>形式。同一 ip:port のエントリが既存なら追加せず警告。- 書き込み後に
systemctl restart snmp。
config snmptrap modify <ver> <serverip> [-p PORT] [-v VRF] [-c COMMUNITY]¶
SNMP_TRAP_CONFIG の固定キー v1TrapDest / v2TrapDest / v3TrapDest の DestIp / DestPort / vrf / Community を mod_entry で更新する。デフォルト: port=162、vrf=None、community=public。
関連する CONFIG_DB¶
| テーブル | key | 主なフィールド |
|---|---|---|
SNMP |
CONTACT / LOCATION |
<name>: <email> / Location: <str> |
SNMP_COMMUNITY |
<community> |
TYPE (RO/RW) |
SNMP_USER |
<user> |
SNMP_USER_TYPE / SNMP_USER_PERMISSION / SNMP_USER_AUTH_TYPE / SNMP_USER_AUTH_PASSWORD / SNMP_USER_ENCRYPTION_TYPE / SNMP_USER_ENCRYPTION_PASSWORD |
SNMP_AGENT_ADDRESS_CONFIG |
<ip>\|<port>\|<vrf> |
(空 dict) |
SNMP_TRAP_CONFIG |
v1TrapDest / v2TrapDest / v3TrapDest |
DestIp / DestPort / vrf / Community |
MGMT_VRF_CONFIG |
vrf_global |
mgmtVrfEnabled(参照のみ) |
副作用¶
ほぼすべてのコマンドが完了直前に systemctl reset-failed snmp.service + systemctl restart snmp.service を実行する。即座に snmpd 再起動が走るため、本番ではバッチ的にまとめて発行する運用が望ましい。
連続操作で SNMP コンテナが落ちる (issue #4514)
config snmptrap del に続けてすぐ config snmptrap modify を実行すると、systemd の start rate limit に達して snmp サービスが起動失敗する。操作の間に少なくとも 5 秒の待機を入れること。コンテナが停止した場合は systemctl reset-failed snmp.service && systemctl start snmp.service で回復できる。
関連リファレンス¶
- CONFIG_DB:
SNMP/SNMP_COMMUNITY/SNMP_USER/SNMP_AGENT_ADDRESS_CONFIG/SNMP_TRAP_CONFIG/MGMT_VRF_CONFIG
引用元¶
実行例¶
典型的な使い方¶
よくある引数の組み合わせ¶
# location / contact メタ情報
sudo config snmp location add "Tokyo DC1 Rack-A12"
sudo config snmp contact add netops netops@example.com
# SNMPv3 user 追加
sudo config snmp user add snmpadmin priv RW AES MD5 authpass privpass
期待される出力 (抜粋)¶
データフロー (自動生成)¶
flowchart LR
CLI["config snmp"]
SC["sonic-cfggen<br/>(config CLI のみ)"]
CLI --> SC
CDB0[("CONFIG_DB<br/>SNMP")]
SC --> CDB0
DM0["snmp-config"]
CDB0 --> DM0
CDB1[("CONFIG_DB<br/>SNMP_COMMUNITY")]
SC --> CDB1
DM1["snmp-config"]
CDB1 --> DM1
CDB2[("CONFIG_DB<br/>SNMP_USER")]
SC --> CDB2
DM2["snmp-config"]
CDB2 --> DM2
CDB3[("CONFIG_DB<br/>SNMP_AGENT_ADDRESS_CONFIG")]
SC --> CDB3
DM3["snmp-config"]
CDB3 --> DM3
凡例
config 系 (CLI → CONFIG_DB → daemon) のミニ図。テーブル → daemon 対応は docs/reference/config-db-orch-map.md から機械生成。
関連 Topics¶
運用ヒント¶
典型的な利用シーン¶
- community / user / target host を追加して NMS から監視させる。
- v3 移行時の auth/priv 鍵切り替え。
よくある落とし穴¶
- ACL で SNMP ポート (UDP 161) を許可していないと外から見えない(CTRLPLANE ACL)。
config snmp community addの type はRO/RW。RW を不用意に開けない。
関連する show / debug¶
関連 CLI コマンド¶
show flowcnt— show flowcnt-trap / flowcnt-route サブコマンドshow snmpagentaddress— show snmpagentaddress サブコマンドshow snmptrap— show snmptrap サブコマンドshow techsupport— show techsupport コマンドconfig mirror session— config mirror_session サブコマンド
-
config snmp系の各コマンドがclicommon.run_command(['systemctl', 'restart', 'snmp.service'], ...)を呼ぶ。config/main.pyL4399-L4403, L4427-L4431 など。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/config/main.py#L4399 ↩ -
add_contactはCONTACTキーが既存ならUse sudo config snmp contact modify insteadで sys.exit(1)。https://github.com/sonic-net/sonic-utilities/blob/39732bceb8bdefe706518ab40623bbbba6ff33b9/config/main.py#L4471 ↩