VMware 5.1 の vCenter Server Appliance で ログを外部の syslog サーバーに送った話
このエントリは
- VMware 6 __より前__の VMware vCenter Server Appliance (VCSA) は、標準/GUI で syslog にログを送り出す設定ができない。
- が、VMware 5.1 でも、VCSA に内蔵している syslog-ng に設定を追加して 送り出すための設定情報があった(後述:英語)。 それを参考に設定してみた記録である。
- なお /var/log/messages も送り出したいので、不要な文字列をフィルタしながら送出することにする。
概要
手順
- root で VCSA に ssh 接続
- /etc/syslog-ng/syslog-ng.conf を バックアップを取った後、後述のように編集
-
syslog-ng -s
で ファイルの文法チェック -
service syslog reload
で サービスの設定再読み込み -
logger -p warn -t "MY_TEST" "TEST MESSAGE on `hostname` with logger command"
などで テストのログを書き込み - 送り出した先で テストのログが受信できていることを確認
設定内容
- VCSA の syslog-ng に、vCenter Server の出力するログファイル群を監視させて、外部に送り出させる。
- 一緒に VCSA の OS 部分のログ /var/log/messages も同様に送り出す。1
- 設定のうち、 /var/log/messages 分については、下記のように 除外用のフィルタ定義を行っている。
-
"/cron"
‥‥‥ 頻発している crond 関連の出力 -
" lsassd"
‥‥ ActiveDirectory 関連のログ (当該環境では未使用) (1文字目のl
の前に 半角スペースを含む) -
"Log statistics;"
‥‥ 定期的に syslog-ng が出力する情報
注意点
- 受け側 (当方では rsyslog だった) では、__全てのログが なぜか kern.emerg 扱い__になってしまい、facility と level が消えてしまった。未解決 だが受容した。
参照情報:
設定内容
編集箇所:
-
syslog-ng.conf
の末尾に 下記を追記した
/etc/syslog-ng/syslog-ng.conf
###
### LOCAL SETTINGS
###
# Please check syntax with this command before restart service..
# syslog-ng -s
#### see also: http://www.virtuallyghetto.com/2012/08/forwarding-vcenter-server-logs-to.html
#### see also: https://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2078751
# vpxd source log
source vpxd {
file("/var/log/vmware/vpx/vpxd.log" follow_freq(1) flags(no-parse));
file("/var/log/vmware/vpx/vpxd-alert.log" follow_freq(1) flags(no-parse));
file("/var/log/vmware/vpx/vws.log" follow_freq(1) flags(no-parse));
file("/var/log/vmware/vpx/vmware-vpxd.log" follow_freq(1) flags(no-parse));
file("/var/log/vmware/vpx/inventoryservice/ds.log" follow_freq(1) flags(no-parse));
};
source local_messages {
file("/var/log/messages" follow_freq(1) flags(no-parse));
};
# filter low-level
## messages 内で不要なエントリを除外するフィルタ
filter f_notneed_str1 { not match("/cron") and not match(" lsassd") and not match("Log statistics;"); } ;
## レベルを絞るフィルタ
filter f_remote_error { level( err..emerg) ; } ;
filter f_remote_warning { level( warning..emerg) ; } ;
filter f_remote_notice { level( notice..emerg) ; } ;
# Remote Syslog Host
destination remote_syslog {
# udp("[他のsyslogサーバIP]" port (514));
tcp("[他のsyslogサーバIP]" port (514));
};
# Log vCenter Server vpxd to remote log server
log {
source(vpxd);
filter(f_remote_warning);
destination(remote_syslog);
};
# Log vCenter Server's /var/log/messages to remote log server, with some filterring
log {
source(local_messages);
filter(f_remote_warning);
filter(f_notneed_str1);
destination(remote_syslog);
};
以上
-
標準の設定で /var/log/messages をカバーしている記載もあるが、単純化のため別の source を定義した。 ↩