本文目錄
ESXi 主機的 log 平常大概只有出事時才會去翻,但真的要查的時候,常常主機已經重新開機、log 也已經輪替掉了。把 ESXi 的 log 集中送到 Graylog,除了方便查詢,也能拿來做登入失敗、設定變更這類事件的告警。
這篇整理 ESXi 送 log 到 Graylog 的步驟。要特別注意的是,不同 ESXi 版本的做法不一樣,差別在能不能直接送到 Graylog 的自訂埠,下面會分開說明。
版本差異
Graylog 一般不是以 root 執行,無法監聽 1024 以下的埠,所以 Syslog Input 通常會開在高位埠,本文以 UDP 30514 為例。
問題在 ESXi 端:ESXi 的防火牆預設會擋住對外連線,內建的 syslog 防火牆規則只開放標準埠 UDP 514、TCP 514 與 TCP 1514。能不能送到 30514 這種自訂埠,要看版本,可以參考下圖:

| ESXi 版本 | 自訂埠 | 做法 |
|---|---|---|
| 7.0 Update 3q 以上、8.0 Update 2b 以上 | 支援 | 設定自訂埠後,vmsyslogd 會自動建立動態防火牆規則 |
| 6.x、7.0 Update 3p 以前、8.0 Update 2b 以前 | 不支援 | 送標準埠 514,並在 Graylog 主機把 514 轉到 30514 |
注意:舊版 ESXi 自己建立自訂防火牆規則是官方不支援的做法,Broadcom 的說明是需要原廠夥伴提供的 VIB,所以本文舊版的做法改由 Graylog 主機轉埠處理。
先確認 ESXi 的版本:
esxcli system version get
Graylog 建立 Syslog Input
在 Graylog 進入 System → Inputs,選擇 Syslog UDP,按 Launch new input:
- Title:例如
ESXi Syslog - Bind address:
0.0.0.0 - Port:
30514
儲存後確認 Input 狀態為 Running。如果 Graylog 主機有開防火牆,記得放行 UDP 30514(舊版做法還要放行 UDP 514)。
ESXi 7.0 U3q、8.0 U2b 以上
新版直接把 loghost 指到 Graylog 的自訂埠即可。
使用 esxcli 設定
以 SSH 登入 ESXi,設定送到 Graylog 的 UDP 30514:
esxcli system syslog config set --loghost='udp://192.168.1.50:30514'
套用設定:
esxcli system syslog reload
確認 vmsyslogd 已經自動建立動態防火牆規則:
esxcli network firewall ruleset rule list | grep dynamic
使用 GUI 設定
也可以在 vCenter 設定:選擇 ESXi 主機 → Configure → System → Advanced System Settings → Edit,找到 Syslog.global.logHost,填入 udp://192.168.1.50:30514。
從 GUI 修改進階設定時,syslog 服務會自動重新啟動,不需要另外執行 reload。
ESXi 6.x、7.0 U3p、8.0 U2b 以前
舊版只能送標準埠,所以 ESXi 送 UDP 514,再由 Graylog 主機把 514 轉到 Graylog 監聽的 30514。
ESXi 端
設定送到 Graylog 的 UDP 514:
esxcli system syslog config set --loghost='udp://192.168.1.50:514'
套用設定:
esxcli system syslog reload
開啟 syslog 防火牆規則:
esxcli network firewall ruleset set --ruleset-id=syslog --enabled=true
esxcli network firewall refresh
注意:送標準埠時,新版 ESXi 也一樣要手動開啟 syslog 防火牆規則,自動建立動態規則只針對非標準埠。
Graylog 主機端轉埠
把收到的 UDP 514 轉到 30514。使用 firewalld 的環境:
firewall-cmd --permanent --add-forward-port=port=514:proto=udp:toport=30514
firewall-cmd --reload
使用 iptables 的環境:
iptables -t nat -A PREROUTING -p udp --dport 514 -j REDIRECT --to-ports 30514
iptables 的規則重新開機後會消失,記得用 iptables-persistent 之類的方式保存。
驗證
檢查目前的 syslog 設定:
esxcli system syslog config get
送一筆測試訊息:
esxcli system syslog mark --message="test-to-graylog"
到 Graylog 搜尋 test-to-graylog,有看到這筆訊息就代表設定成功。
如果沒有收到,依序檢查:
- ESXi 的 loghost 設定與埠號是否正確(
esxcli system syslog config get) - 新版是否已自動建立動態防火牆規則;舊版是否已開啟 syslog 防火牆規則
- Graylog 主機的防火牆與轉埠設定
- Graylog Input 是否為 Running
改用 TCP 的話,可以在 ESXi 上用 nc -z 192.168.1.50 30514 測試連線。UDP 是無連線的協定,nc 測不出對方有沒有收到,還是以送測試訊息、到 Graylog 搜尋為準。
注意事項
- 連線中斷後不會自動恢復:ESXi 跟 syslog 伺服器失去連線後,會停止轉送,直到 syslog 服務重新啟動。Graylog 維護或重新開機後,記得在 ESXi 上執行
esxcli system syslog reload。 - UDP 不保證送達:UDP 沒有重送機制,網路忙碌時可能遺失。對完整性有要求的環境,可以改用 TCP(Graylog 建立 Syslog TCP Input,ESXi 的 loghost 改成
tcp://)。 - 多台主機:主機很多時,可以用 vCenter 的 Host Profiles 統一設定
Syslog.global.logHost,避免一台一台設定。
結論
ESXi 送 log 到 Graylog 的指令不多,最容易卡住的是防火牆與埠號:新版 ESXi 送自訂埠會自動開防火牆,舊版則只能送標準埠,要在 Graylog 主機轉埠。
設定完成後,記得送一筆測試訊息確認 Graylog 真的收得到,不要等到出事要查 log 時才發現根本沒送過來。
參考資料
- Broadcom 知識庫:Configuring syslog on VMware vSphere ESXi
https://knowledge.broadcom.com/external/article/318939/configuring-syslog-on-esxi.html - Broadcom 知識庫:How to Configure a Custom Syslog Port on ESXi
https://knowledge.broadcom.com/external/article/384293/how-to-configure-a-custom-syslog-port-on.html - William Lam:Dynamic ESXi firewall ruleset for non-standard syslog ports in vSphere 8.0 Update 2b & 7.0 Update 3p
https://williamlam.com/2024/03/dynamic-esxi-firewall-rulset-for-non-standard-syslog-ports-in-vsphere-8-0-update-2b-7-0-update-3p.html - Graylog 官方文件:Syslog Inputs
https://go2docs.graylog.org/current/getting_in_log_data/syslog_inputs.htm



