vmware
syslog-ng
vCenter

VMware 5.1 の vCenter Server Appliance で ログを外部の syslog サーバーに送った話

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 も送り出したいので、不要な文字列をフィルタしながら送出することにする。

概要

手順

  1. root で VCSA に ssh 接続
  2. /etc/syslog-ng/syslog-ng.conf を バックアップを取った後、後述のように編集
  3. syslog-ng -s で ファイルの文法チェック
  4. service syslog reload で サービスの設定再読み込み
  5. logger -p warn -t "MY_TEST" "TEST MESSAGE on `hostname` with logger command" などで テストのログを書き込み
  6. 送り出した先で テストのログが受信できていることを確認

設定内容

  • 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);
};

以上


  1. 標準の設定で /var/log/messages をカバーしている記載もあるが、単純化のため別の source を定義した。