ESXi からSyslogを飛ばしてみます。
今回は、rsyslogサーバ(Oracle Linux 6.2) に対して、UDPでSyslogを飛ばしてみます。
参考
ESXi 5.0におけるsyslogの構成
http://kb.vmware.com/kb/2014699
Syslogサーバは、こんな感じです。
デフォルトで入っているrsyslogを使用しています。
[root@oel62 ~]# cat /etc/oracle-release
Oracle Linux Server release 6.2
[root@oel62 ~]# rsyslogd -v
rsyslogd 4.6.2, compiled with:
FEATURE_REGEXP: Yes
FEATURE_LARGEFILE: No
FEATURE_NETZIP (message compression): Yes
GSSAPI Kerberos 5 support: Yes
FEATURE_DEBUG (debug build, slow code): No
Atomic operations supported: Yes
Runtime Instrumentation (slow code): No
See http://www.rsyslog.com for more information.
ちなみに、今回は Syslogサーバ側のファイアウォールはすべて無効にしてあります。
[root@oel62 ~]# iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
ESXi 5.0 からSyslogを飛ばします。(ESXi 5.1 でもやり方は同じです。)
~ # vmware -v
VMware ESXi 5.0.0 build-623860
1. まず、Syslogサーバ側の受信設定をします。
設定ファイルを編集します。
リモートのサーバからのUDPの514番ポートにむけたSyslogを受信できるように、
設定ファイル(/etc/rsyslog.conf)から、下記のコメントを外します。
[root@oel62 ~]# vi /etc/rsyslog.conf
# Provides UDP syslog reception
#$ModLoad imudp.so
#$UDPServerRun 514
↓(コメント「#」を削除する。)
# Provides UDP syslog reception
$ModLoad imudp.so
$UDPServerRun 514
そして、rsyslogのデーモンを再起動です。
[root@oel62 ~]# service rsyslog restart
システムロガーを停止中: [ OK ]
システムロガーを起動中: -r option only supported in compatibility modes 0 to 2 - ignored
[ OK ]
2. ESXi で、Syslogに対するファイアウォール解放します。
これをしないと、ESXiからの送信もブロックされてしまいます。
まず、現状の設定を確認。
~ # esxcli network firewall ruleset list | grep syslog
syslog false
ちなみに、ファイアウォールのルールはこんな感じです。
~ # esxcli network firewall ruleset rule list | grep syslog
syslog Outbound UDP Dst 514 514
syslog Outbound TCP Dst 514 514
syslog Outbound TCP Dst 1514 1514
ファイアウォールを開放します。
~ # esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true
Syslog転送が許可されました。
~ # esxcli network firewall ruleset list | grep syslog
syslog true
3. つぎは、ESXi 側で、Syslogの転送設定をします。
デフォルトの設定状態を確認しておきます。
~ # esxcli system syslog config get
Default Rotation Size: 1024
Default Rotations: 8
Log Output: /scratch/log
Log To Unique Subdirectory: false
Remote Host: <none>
設定を変更します。
UDPプロトコルで、192.168.0.192 のSyslogサーバにログを転送します。
デフォルトなので 514番ポートにむけて転送することになります。
~ # esxcli system syslog config set --loghost="udp://192.168.0.192"
確認すると、転送先のSyslogサーバが設定されています。
~ # esxcli system syslog config get
Default Rotation Size: 1024
Default Rotations: 8
Log Output: /scratch/log
Log To Unique Subdirectory: false
Remote Host: udp://192.168.0.192
ESXi側で、Syslogサービスを再読み込みするとログ転送が開始されます。
~ # esxcli system syslog reload
4. 転送されたログを確認します。
ESXiは絶えずログ転送しているので、成功していればすぐわかりますが、
あえてテストメッセージを送ってみます。
Syslogサーバは、デフォルトの /var/log/messages ファイルにログを出力します。
(ESXi側)
~ # esxcli system syslog mark --message="SyslogTest `date`"; date
Thu Nov 29 14:52:29 UTC 2012
(Syslogサーバ側)
[root@oel62 ~]# date
2012年 11月 29日 木曜日23:51:10 JST
[root@oel62 ~]# grep SyslogTest /var/log/messages
Nov 29 14:52:25 esx01.local shell[853546]: esxcli system syslog mark --message="SyslogTest `date`"; date
Nov 29 14:52:26 esx01.local mark: SyslogTest Thu Nov 29 14:52:25 UTC 2012
実行したテストコマンド自体と、テストメッセージがSyslogサーバで受信できてました。
ESXiは、UTC(世界協定時)で動作するため、
基本的にJST(日本時間)から マイナス9時間表示になってしまいます。
Syslogサーバ自体の時間がちょっとずれているのでアレですが・・・
Syslogは、送信したメッセージにタイムスタンプ情報を持っているため、
受信したログの時刻が、Syslogサーバ自体の時刻とは マイナス9時間ずれています。