{{tag>linux gentoo snmp}} # snmpd のロギングコントロール > error on subcontainer 'ia_addr' insert (-1) このエラー、10年前から google先生の定番ですね。どうやら1つのネットワークインターフェイスに2つ以上のIPアドレスを付与すると、デバッグログに出力されるみたいです。 で、これを syslog から消す方法はワリと見つかるんですが、snmpd 独自のログファイルをどう扱うか……とか `-LS6d` の意味とか、あんまりちゃんとした解説を見たことがないです。というか snmpcmd(5) の man ページも難解極まりない気がするので自分でいろいろ実験してみました。 ## snmpd のロギングオプション snmpd のロギングオプションは `-L` です。この後ろに色々細かい指定を付けるんですが、その付け方について snmpcmd(5) の説明が非常に不親切な気がしますね…… ### syslog 出力の設定 `-Ls` または `-LS` で指定します。 #### -Ls[ud] これは「facility を指定して syslog に出力せよ」という意味のオプションです。`-Lsd` とすると Daemon で、`-Lsu` とすると User で出力されるようです。いずれにしてもこの指定では件の "ia_addr" のエラーが30秒に1回 syslog に出力されて非常に鬱陶しいです。 #### -LS[01234567][ud] ラージ S を指定した場合は「priority と facility を指定して syslog に出力せよ」という意味のオプションになります。priority の指定は snmpcmd(5) の man ページにあるとおりです。 ``` 0 or ! for LOG_EMERG, 1 or a for LOG_ALERT, 2 or c for LOG_CRIT, 3 or e for LOG_ERR, 4 or w for LOG_WARNING, 5 or n for LOG_NOTICE, 6 or i for LOG_INFO, and 7 or d for LOG_DEBUG. Normal output is (or will be!) logged at a priority level of LOG_NOTICE ``` ……実はここで既にひとつ解せない部分(("Normal output is (or will be!) logged at a priority level of LOG\_NOTICE" : 「放っといたら LOG\_NOTICE だよ」(意訳) ってじゃあ件の "ia\_addr" はなぜ `-Lsd` で出力されるんだ……))もあるんですが、ひとまずスモール "s" とラージ "S" の違いはここにあります。 なので `-LS6d` とした場合は「priority:INFO 以上でフィルタして faciryty:Daemon で syslog に出力せよ」という意味になります。ちなみにこの指定はブランクを挟んで `-LS 6d` とした場合や `-LS 6 d` とした場合でも有効に動作するようです。 なので syslog に関しては、件の "ia_addr" の出力は `-LS6d` 以上を指定してあげれば止まります。 ### ログファイル出力の設定 `-Lf` または `-LF` で指定します。この設定は syslog の出力設定と同時に指定できます。 #### -Lf /path/to/logfile ログファイルを指定してログを出力します。syslog 指定の `-Lsd` や `-Lsu` と同様に、priority を指定していないのでこの指定では30秒に1回 "ia_addr" のエラーが出力されます。 #### -LF [01234567] /path/to/logfile priority とログファイルを指定してログを出力します。priority の指定は前述の syslog の指定と同じです。同じですが、1つ決定的に違うのは**このオプションに関してはブランクが必須です**。必ず `-LF 6 /path/to/logfile` のように各オプションをブランクで区切って指定します。このへんの書式が snmpcmd(5) にはまったく記載されていないので、ネットでよく見る `-LS5d` のつもりで `-LF6/path/to/logfile` とか `-LF6 /path/to/file` とかやってハマるんです……ハマりました……ハマりませんか? ## というわけで "ia_addr" のエラーについては…… syslog 出力だけであれば `-LS 5 d` を指定、ログファイル出力なら `-LF 6 /path/to/logfile` か `-LF 5 /path/to/logfile` あたりをお好みで。両方指定するなら `-LS 5 d -LF 6 /path/to/logfile` あたりのオプションが妥当でしょうか? priority に 5 を指定するか 6 を指定するかの違いは、普通に運用してる限りは agent が受けたリクエスト1回ごとにログを出力するか、出力しないかの違いぐらいです。 ## gentoo の場合 gentoo linux の場合は /etc/conf.d/snmpd に…… ``` SNMPD_FLAGS="${SNMPD_FLAGS} -LS 5 d -LF 6 /path/to/logfile" ``` ……あたりを追加するんだと思いますが。実は systemd 経由で snmpd を起動している場合、この設定は**読みません**。 なので、snmpd.service をオーバーライドします。 ``` # systemctl edit snmpd.service ``` を実行して、こんな感じに書いてあげます。 ``` [Service] ExecStart= ExecStart=/usr/sbin/snmpd -f -p /var/run/snmpd.pid -I -smux -LS 5 d -LF 6 /var/log/snmp/net-snmpd.log ```