Ubuntu 24.04LTS の rsyslog でリモート機器の Syslog メッセージを受信する
Ubuntu 24.04LTS はデフォルトで rsyslog サービスが動作していますが、514/UDP や 514/TCP を Listen しておらず、リモート機器から送信された Syslog メッセージは受信しません。 そこで今回は以下の方針で rsyslog を設定する方法をメモしておきます。
- 受信した Syslog メッセージはリモート機器毎に異なるファイルへ保存する
- ログファイルは
/var/log/rsyslog
配下に作成する - リモート機器には Cisco IOS-XE 機器を使う
検証環境¶
対象 | バージョン |
---|---|
Ubuntu | 24.04LTS |
rsyslog | 8.2312.0 |
IOS-XE | 17.12.1 |
rsyslog サーバの設定¶
rsyslog の設定ファイルは /etc/rsyslog.conf
ですが、このファイルから /etc/rsyslog.d/
ディレクトリ配下の .conf
ファイルが読み込まれます ($IncludeConfig /etc/rsyslog.d/*.conf
)。 Syslog メッセージを受信出来るようにするには 514/UDP を受信するように imudp モジュールを有効化します。 但し、デフォルトではローカルホスト (127.0.0.1
または localhost
) からのメッセージもロギングしてしまう為、これらは除外します。
Syslog メッセージを保存するファイル名は $template
で指定します。 %hostname%
には Syslog メッセージを送信したノードのホスト名 (名前解決出来ない場合は IP アドレス) が代入されます。
1 2 3 4 5 6 7 8 9 10 11 |
|
設定ファイルの作成が完了したら変更を反映する為に rsyslog サービスを再起動します。
systemctl restart rsyslog.service
IOS-XE 側の設定¶
IOS-XE 機器側はログのタイムスタンプをローカルの時刻 (JST) へ変更しておきます。 また必要であればローカルのログ用バッファサイズを調整 (拡張) しておきます。
service timestamps debug datetime msec localtime
service timestamps log datetime msec localtime
!
clock timezone JST 9 0
!
logging buffered 131072 debugging
Syslog サーバへログ送信する設定例は以下の通りです。
vrf を利用しない場合¶
logging facility local7
logging trap informational
logging source-interface GigabitEthernet0/0
logging host 10.0.0.1 transport udp port 514
vrf を利用する場合¶
logging facility local7
logging trap informational
logging source-interface GigabitEthernet0/0 vrf management
logging host 10.0.0.1 vrf management transport udp port 514
尚、vrf 指定されているインターフェイスへ logging source-interface
を指定する際に「vrf を省略して設定」しようとすると以下のエラーになりました。
IOX-XE# configure terminal
Enter configuration commands, one per line. End with CNTL/Z.
IOX-XE(config)# logging source-interface GigabitEthernet0/0
Interface GigabitEthernet0/0's vrf management does not match with cfg vrf
rsyslog サーバ側での確認¶
IOS-XE 側から Syslog メッセージを送信後に rsyslog サーバ側を確認するとログファイルが作成されていることが分かります。
# ls /var/log/rsyslog/
10.0.0.101.log 10.0.0.102.log 10.0.0.103.log
ログローテーションの設定¶
ログローテーションさせるには例えば以下のように設定します。 設定後は logrotate -d /etc/logrotate.conf
でドライランを実行して実行内容を確認しておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Linux から Syslog メッセージを送信する¶
「IOS-XE からの Syslog メッセージを rsyslog サーバ側で受信出来ない」などの場合は Linux → Linux へ Syslog メッセージを送信して切り分けを行います。 このようなトラブルシューティングを行うには Linux の logger
コマンドを利用することが出来ます。 logger
コマンドは以下のように利用します。 尚、logger
コマンドはデフォルトで 514/UDP を利用する為、ポートを変更していない場合は明示的にポート指定を行う必要はありません。
タグを指定する場合¶
タグを指定する場合、クライアント側では以下のように実行します。
logger -t "TAG" "MESSAGE" -i -n 10.0.0.1
サーバ側では以下のように記録されました。
# cat /var/log/rsyslog/10.0.0.99.log
2024-08-11T08:08:44.084948+09:00 10.0.0.99 TAG[948] MESSAGE
タグを指定しない場合¶
タグを指定していない場合、クライアント側では以下のように実行します。
logger "MESSAGE" -i -n 10.0.0.1
サーバ側では以下のように記録されました。 タグ部分には「実行したユーザ名」が含まれるようです。
# cat /var/log/rsyslog/10.0.0.99.log
2024-08-11T08:13:02.350590+09:00 10.0.0.99 root[1007] MESSAGE
参考¶
/etc/rsyslog.conf
¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
|
logger コマンドのヘルプ¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
|