跳到主要內容
節省工具箱Jason Tools
技術文章

ESXi 送 Log 到 Graylog 設定步驟

Jason Cheng 發布 瀏覽 1 次
ESXi 送 Log 到 Graylog 設定步驟
本文目錄
  1. 版本差異
  2. Graylog 建立 Syslog Input
  3. ESXi 7.0 U3q、8.0 U2b 以上
  4. ESXi 6.x、7.0 U3p、8.0 U2b 以前
  5. 驗證
  6. 注意事項
  7. 結論
  8. 參考資料

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 依版本選擇送 Log 到 Graylog 的做法
ESXi 依版本選擇送 Log 到 Graylog 的做法
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 時才發現根本沒送過來。

參考資料

Jason Cheng

Jason Cheng

企業開源技術顧問,專注架構規劃與實務導入

關於作者 →

延伸閱讀