Amazon Linux2023上のSNMPサーバのログをvar/log/snmptrap.logに出力させる
背景
はじめに、Amazon Linux2をAL2、Amazon Linux2023をAL2023と書きます。
AL2のEOL対応に伴い、AL2上に構築されているSNMPサーバの更改が必要になりました。また更改にあたっては、AL2023上で構築することになりました。
課題
これまでAL2上のSNMPサーバで設定している統合CloudWatchエージェントの設定ファイルの中で、snmptrapログは「/var/log/snmptrap.log」出力をロググループに保管していますが、AL2023上では同様のパスに出力するのが可能なのか不明なので調査しました。
手順
1. AL2023の構築
セッションマネージャでログインしました。
事前に「AmazonSSMManagedInstanceCore」のポリシーを持つIAMロールをアタッチしておくことが必要になります。
※ネットワーク周りの設定は本書では省略します。
先に、/var/log/snmptrap.logを作成しておいてください。
touch /var/log/snmptrap.log
2. rsyslogインストール
AL2023 では、ロギングシステムパッケージが AL2 から変更されました。AL2023 はデフォルトでは rsyslog をインストールしないため、/var/log/messages のような AL2 にあったテキストベースのログファイルはデフォルトでは使用できません。
そのため、事前に以下コマンドにてrsyslogインストールを実施します。
sudo dnf install -y rsyslog
sudo systemctl enable --now rsyslog
※systemd ジャーナルの置き換え rsyslogについてのAWSドキュメント:
3. SNMPサービスインストール
net-snmp及びnet-snmp-utilsをインストールします。
sudo dnf install -y net-snmp net-snmp-utils
sudo systemctl start snmptrapd
sudo systemctl enablesnmptrapd
sudo systemctl status snmptrapd
4. snmptrapd.conf ファイルの修正
/etc/snmp/snmptrapd.confに以下を追記しすべてのトラップを受け入れるように設定します。
「authCommunity log,execute,net public」は、SNMPコミュニティ public からのトラップを受け入れ、ログに記録します。ここで public は、トラップを送信する際に使用したコミュニティ文字列です。(テストで使用する場合)
authCommunity log,execute,net public
SNMPサービスを再起動します。
sudo systemctl restart snmptrapd
5. /var/log/snmptrap.logへの出力設定を追記
/etc/rsyslog.d/snmptrapd.conf に/var/log/snmptrap.logへの出力設定を入れます。
snmptrapd.confがない場合は、nanoなり、viなりで作成してください。
nano /etc/rsyslog.d/snmptrapd.conf
rsyslogはデフォルトで、/etc/rsyslog.d/ ディレクトリ内の設定ファイルをすべて読み込みます。このディレクトリ内にカスタムの設定ファイルを作成することで、特定のログを個別に管理したり、処理を追加することが可能です。
if$programname== 'snmptrapd'then/var/log/snmptrap.log
& stop
rsyslogを再起動します。
sudo systemctl restart rsyslog
6. フィルタリングが適用されているか確認
rsyslog の設定が適用されているか確認するために、rsyslog が正しく動作しているかを以下のコマンドでチェックします。結果にエラーや警告が表示されていなければOK。
sudo rsyslogd -N1
7. /etc/rsyslog.conf を確認
AL2023では、/etc/rsyslog.conf ファイルの中で、以下の設定が記載されていることを確認します。
# Include all config files in /etc/rsyslog.d/
include(file="/etc/rsyslog.d/*.conf" mode="optional")
8. 最終確認
再度以下のコマンドでログの出力先が /var/log/snmptrap.log に変更されているか確認します。
SNMPトラップをローカルサーバに送信する場合の例
snmptrap -v 2c -c public localhost '' SNMPv2-MIB::coldStart.0
トラップの受信確認
tail -f /var/log/snmptrap.log
結果
無事「/var/log/snmptrap.log」に出力されることを確認しました。
Discussion