以前にポストした、ESXi Syslog の JST での受信について試してみました。

 

この設定を、実際に試してみようと思います。

図解 ESXi のsyslogを日本標準時(JST)受信する方法

 

ESXi の Syslog を日本時間(JST)で出力してみます。

今回も、rsyslog を使用します。説明中の Syslog サーバ は rsyslog のことです。

ESXi 5.0 を使っていますが、ESXi 5.1 でも変わりません。

 


1.  まず、ESXi の Syslog を、Syslog サーバに転送しておきます。

 

手順については、こちらを参考にしてください

ESXi 5.x で Syslog 転送。rsyslogで受信。

 

ESXi 側で設定したSyslog 設定の戻し方は、こちらです。

ESXi 5.x Syslog 設定のリセットコマンド

 

 

2.Syslog サーバ側のログフォーマットの設定を変更してみます。

 

rsyslog の設定ファイルを編集します。

[root@oel62 ~]# vi /etc/rsyslog.conf

下記3行を、ファイルの末尾に追記します。
※実際に運用する環境では、もっと設定のカスタマイズが必要です。

$template TsTest1, "%timestamp%, %msg%\n"
$template LogFileName1,"/var/log/%hostname%/%programname%_%$year%_%$month%_%$day%.log"
*.* ?LogFileName1;TsTest1


Syslog サーバ再起動時のエラー抑止のため、下記のファイルも編集しておきます。

[root@oel62 ~]# vi /etc/sysconfig/rsyslog

 

変更箇所は下記の1行です。

 

SYSLOGD_OPTIONS="-c 4 -r"
↓(「-r」を削除)
SYSLOGD_OPTIONS="-c 4"

 

3. Syslog サーバ(rsyslog)を再起動します。

 

[root@oel62 ~]# service rsyslog restart
システムロガーを停止中:                                    [  OK  ]
システムロガーを起動中:                                    [  OK  ]

 

rsyslog を再起動して少し待つと、今回のサンプルでは、

/var/log/<ESXiのホスト名>

ディレクトリに

プログラム名_年_月_日.log」 というログファイルができます。

[root@oel62 esxi01.local]# pwd
/var/log/esxi01.local

[root@oel62 esxi01.local]# ls
Hostd_2012_12_03.log    Vpxa_2012_12_03.log    vmkernel_2012_12_03.log

 

 

4.  ESXi 側で、テストメッセージを出力します。

 

★テスト1

ESXi 側での時刻をログに表示するため、`date` を入れています。

赤いタイムスタンプが、ESXi 側でSyslog送付時にコマンドで取得したタイムスタンプです。

一方、

青いタイムスタンプが、Syslogによって出力されたタイムスタンプです。

(ESXi 側でテストメッセージを送信)

~ # esxcli system syslog mark --message="TestMsg01 `date`"


(Syslogサーバ側)
[root@oel62 esxi01.local]# ls
Hostd_2012_12_03.log  Vpxa_2012_12_03.log  mark_2012_12_03.log 

shell_2012_12_03.log  vmkernel_2012_12_03.log

 

[root@oel62 esxi01.local]# cat mark_2012_12_03.log
Dec  2 22:46:22,  TestMsg01 Sun Dec  2 22:46:20 UTC 2012


★テスト2

ログが発生した時刻ではなく、Syslog サーバが受信した時刻を出力します。

テスト1の設定ファイルの、下記(赤字)を変更ます。

 

$template TsTest1, "%timegenerated%, %msg%\n"
$template LogFileName1,"/var/log/%hostname%/%programname%_%$year%_%$month%_%$day%.log"
*.* ?LogFileName1;TsTest1

 

Syslog サーバ側でファイル編集後に rsyslogd を再起動し、
ESXi 側からログ出力のテストをします。

~ # esxcli system syslog mark --message="TestMsg02 `date`"


★テスト3

受信したログを、RFC3339 形式で時刻を出力します。

テスト2 とは、ログファイルの出力フォーマットが変更されます。

テスト1の設定ファイルの、下記(赤字)を変更ます。

$template TsTest1, "%timegenerated:::date-rfc3339%, %msg%\n"
$template LogFileName1,"/var/log/%hostname%/%programname%_%$year%_%$month%_%$day%.log"
*.* ?LogFileName1;TsTest1

 

Syslogサーバ側でファイル編集後にrsyslogdを再起動し、
ESXi側からログ出力のテストをします。

~ # esxcli system syslog mark --message="TestMsg03 `date`"

 

5. 結果確認

 

ログファイルへの出力結果を見てみます。

[root@oel62 esxi01.local]# cat mark_2012_12_03.log
Dec  2 22:46:22,  TestMsg01 Sun Dec  2 22:46:20 UTC 2012  ★テスト1の出力
Dec  3 07:48:05,  TestMsg02 Sun Dec  2 22:48:55 UTC 2012  ★テスト2の出力
2012-12-03T07:50:11.564731+09:00,  TestMsg03 Sun Dec  2 22:51:01 UTC 2012  ★テスト3の出力

 

JST で出力できました。

上記の例では、

 

日本時間だと、12/3 07:48

協定世界時だと、12/2 22:48

ぐらいとなっています。

 

TestMsg02、TestMsg03 として出力したログは、先頭のタイムスタンプが日本時間になっています。