VMware ESXiでRemote Syslogを設定する方法:Syslogサーバーへのログ集約手順

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

なぜESXiのログをローカルに保存したままにしてはいけないのか?

デフォルトでは、VMware ESXiの各種サービスログ(vmkernel、hostd、vpxa、auth.logなど)はRAMディスクまたはローカルディスク上のScratchディレクトリに記録されます。この領域は通常数百MB程度の容量しかありません。そのため、サーバーの予期せぬ電源断、ハードウェア障害、あるいはパープルスクリーン(PSOD: Purple Screen of Death)が発生した場合、RAM上の一時ログは再起動直後にすべて消滅してしまいます。

ログデータの喪失は、根本原因分析(RCA)の手がかりを失うことを意味します。さらに、8〜10台以上のホストで構成されるクラスタを運用している場合、各ホストに個別にSSH接続してログを確認するのは非常に手間がかかります。Remote Syslogを利用してログを一元集約すれば、障害の早期検知が可能になるだけでなく、PCI-DSSやISO 27001といったセキュリティ監査要件にも適切に対応できます。

転送先ログレシーバーには、Graylog、ELK Stack、Splunk、Rsyslog、あるいはVMware Aria Operations for Logsなど、既存のあらゆる環境を利用可能です。

設定前に準備しておくべきパラメータ

事前にログ受信側システムの基本的なネットワーク情報を確認しておきましょう。

  • Syslog Server: ログ受信サーバーの静的IPアドレスまたはFQDN(例: 192.168.10.50 や syslog.itfromzero.local)。
  • プロトコル & ポート番号 (Port):
    • UDP:514: 高速で軽量ですが、ネットワーク輻輳時やログが急増した際にパケットロスが発生しやすくなります。
    • TCP:514: ログの欠損を防ぐ信頼性の高い通信。本番環境(Production)におすすめです。
    • SSL/TLS:1514: 暗号化通信。セキュリティレベルの高いサブネット間でのログ転送に適しています。
  • アクセス権限: rootアカウント(SSH接続用)、またはvSphere Client / Host Clientの管理者権限。

方法1: esxcliコマンドラインによる設定(最も迅速かつ確実)

CLIは、スクリプトによる一括設定やSSH経由でのオペレーションを行う際に最適な選択肢です。ESXiでSSHを有効化し、以下の4つのステップを順に実行してください。

ステップ1: 現在のSyslog設定を確認する

esxcli system syslog config get

このコマンドを実行すると、Syslogの稼働状態、ローカル保存パス、およびRemote Hostの転送先設定が表示されます。

ステップ2: Syslogサーバーのアドレスを設定する

--loghostパラメータを付与してesxcli system syslog config setコマンドを実行します。指定の標準構文はprotocol://host:portです。

# TCPポート514でログを転送(パケットロス防止のため推奨)
esxcli system syslog config set --loghost='tcp://192.168.10.50:514'

# UDPポート514でログを転送
esxcli system syslog config set --loghost='udp://192.168.10.50:514'

# 2台のサーバーへ同時に転送(プライマリとバックアップ)
esxcli system syslog config set --loghost='tcp://192.168.10.50:514,tcp://192.168.10.51:514'

ステップ3: Syslogサービスをリロードする

ホストを再起動することなく、新しい設定を即座に適用します。

esxcli system syslog reload

ステップ4: Syslogトラフィック用にESXiファイアウォールを開放する

ESXiにはファイアウォールが組み込まれており、デフォルトでは外部送信トラフィックがブロックされています。Syslog用のルールを有効化する必要があります。

# Syslogのアウトバウンドルールを有効化
esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true

# ファイアウォールをリフレッシュして新しいルールを適用
esxcli network firewall refresh

方法2: ESXi Host Client(Web GUI)からの設定手順

ターミナル操作に不慣れな場合は、Web管理画面からマウス操作だけで設定できます。

  1. ブラウザから https://<IP-ESXi>/ui にアクセスして ESXi Host Client にログインします。
  2. 管理(Manage) > システム(System) タブ > 詳細設定(Advanced settings) を選択します。
  3. 右上のフィルターボックスで Syslog.global.logHost を検索します。
  4. 対象のキーを右クリックして オプションの編集(Edit option) を選択し、転送先(例: tcp://192.168.10.50:514)を入力して 保存(Save) をクリックします。
  5. 左メニューの ネットワーク(Networking) > ファイアウォール ルール(Firewall rules) タブへ移動し、syslog ルールを右クリックして 有効化(Enable) を選択します。

ログ転送のテストと動作確認

設定完了後、ログメッセージが宛先サーバーへ正常に届いているかをテストします。

1. ESXiからテストログを送信する

ESXi Shell上で logger コマンドを実行し、テスト用イベントログを生成します。

logger -p user.info "ESXI_SYSLOG_TEST: ホスト esxi-01 から集約サーバーへの送信成功"

2. ログ受信サーバー側での確認

Ubuntu ServerでRsyslogを使用している場合は、受信サーバーのターミナルを開き、送信したテストログをフィルタリングします。

tail -f /var/log/syslog | grep ESXI_SYSLOG_TEST

# ホストごとにログファイルを分割するテンプレートを設定している場合
tail -f /var/log/remote-hosts/esxi-01.log

ターミナル上にESXiのIPアドレスまたはホスト名とともにテスト文字列が表示されれば、ログ転送パイプラインは正常に動作しています。

よくあるトラブルと迅速な対処法

  • サーバー側でログが受信できない: ログ受信サーバーでポート514がLISTEN状態になっているか確認してください(ss -tuln | grep 514)。また、サーバー側のローカルファイアウォール(UFWまたはFirewalld)でインバウンド通信がブロックされていないかも確認します。
  • DNS名前解決のエラー: loghostにドメイン名(例: syslog.corp.net)を指定した場合、ESXi側で正しいDNSサーバーが設定されているか確認してください(esxcli network ip dns server list で確認可能)。ローカルネットワーク環境では静的IPアドレスの指定が最も確実です。
  • 高負荷時のログ欠損: 50〜100台以上のVMが稼働するクラスタでは、ログ流量が毎秒数千行に達することがあります。このような環境下ではUDPプロトコルはパケットロスが発生しやすいため、tcp:// に切り替えてデータの欠損を防ぎましょう。
Share: