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 サーバ側の受信設定をします。

まず、rsyslog の設定ファイルを編集します。
リモートのサーバからの 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時間ずれています。