如何將 Nginx Log 傳送到 Kibana 進行管理?
將 Nginx Log 傳送至 Kibana 的核心在於正確配置 Filebeat。這套 Filebeat 設定指南 的三步驟包含:1. 環境準備:建立 Elasticsearch 叢集(地端或 Elastic Cloud);2. 安裝與配置:下載 Filebeat 並啟用 nginx 模組,設定 filebeat.yml 中的 cloud.id 與日誌路徑(如 access.log);3. 資料視覺化:執行 setup 指令將預建儀表板匯入 Kibana。透過這套 Elasticsearch Logging 入門 流程,管理者能實踐高品質的 實時日誌監控,利用關鍵字搜尋與 Highlight 功能快速排除系統故障,提升 DevOps 日誌優化 的整體效率。
本文提供Filebeat****快速設定指南,帶您透過簡單三步驟,輕鬆將Nginx Log傳送至Elasticsearch,並在Kibana中進行即時日誌管理。掌握高品質的 Elastic Observability 流程,您將能有效提升系統的可維護性。
Elastic Logging:日誌管理的斷捨離
為什麼 log 很重要?它是 DevOps 日誌優化 的核心數據來源。然而,在實踐高品質的日誌管理時,我們應具備「斷捨離」的思維。
主要步驟有:
- 建立 Elasticsearch
- 安裝 Filebeat,Elastic Cloud 服務的話第一次建議先加入 Sample Data 試用,常見的 Apache、Nginx、Docker 在教學範例都有
- Kibana 報表
下一篇文章 Filebeat 深入理解 則會深入的去介紹 Log 與 Filebeat 在實際運用上的細節、基礎概念及相關配置教學。
Log 採集策略:為什麼不應該全量採集?
許多團隊初期會試圖採集所有的 Debug Log,這會導致:
- 資源浪費: 儲存與運算成本劇增。
- 資訊噪音: 真正的錯誤訊息被淹沒在海量正常的 Request 中。
建議採取精確的 Log 採集策略:僅採集 Access Log 與 Error Log,並針對特定的關鍵事件(如支付失敗)進行詳細記錄。
建立 Elasticsearch
這邊可以安裝地端的 Elasticsearch 或是選用 ElasticCloud 服務,ElasticCloud 規格挑喜歡的選就可以了,我是選 GCP 位置台灣 IO 優先,重要的是開好之後記得存好帳號跟密碼,之後要打資料到 kibana 的配置檔中會用到。
Elastic Logging 簡介
目前蒐集資料到 Elasticsearch 的方法有兩種
- Logstash: Java Base,還沒跑服務就需要吃資源,可負責處理 Log 格式
- Beats: Go Base,需要資源較少效能較好,可以安裝在 server 上協助傳送資訊到 Elasticsearch 或 Logstash,除了這次要用到的 Filebeat 以外還有一堆很厲害的 beat 系列工具,例如 Metricbeat 收集 system loading 還有 Packetbeat 可以收集網路封包。
為什麼 log 很重要?
- 監測應用程式
- 安全性分析
- 問題排解
解決的痛點:
- 不同的 Log 會有不同的格式
- 需要專業知識才讀得懂
- 有好幾種 log 的來源
- 需要產出不同格式的分析
安裝 Filebeat
目標是透過 Filebeat 幫我們自動打 log 資料到 Elasticsearch,如果是 Windows 官方的 Quick Start 不用試了,因為 system module 跑不起來,所以我們要先停用:
./filebeat modules disable system
接下來就挑選 Nginx 的範例來嘗試,首先當然要下載 nginx,下載解壓縮後到目錄直接 start nginx 然後瀏覽器瀏覽 localhost 先來產生一下 access.log,我的 Log 位置會在 C:\nginx-1.18.0\logs。
Filebeat 的安裝使用步驟如下
- 下載 Filebeat 解壓縮
./filebeat modules enable nginx啟用模組- 找到
filebeat.yml中的 cloud.id 及 cloud.auth 並填入正確資料 - 找到
modules.d\nginx.yml中的var.paths: ["c:\\nginx-1.18.0\\logs\\access.log*"] ./filebeat test config -e看看有沒有打錯- ./filebeat setup
- ./filebeat -e
如果有其他更特殊的 Log,也可以透過直接上傳 log 檔 (CSV, NDJSON, log) 到 kibana,然後人工稍微針對機器學習辨識出來的 Grok Pattern 結果進行編輯即可。
透過剛剛機器學習的模組會幫我們分析 Log 的組成,並且也有幫我們產生 YML 的內容的功能,方便我們去寫剛剛提到的 filebeat.yml。
Kibana 報表:實時監控的威力
Kibana 是 Elastic Observability 的視覺化核心。透過開啟 stream live,您可以體驗到實時日誌監控的威力。
Kibana 就是一個管理的 GUI,載入 Sample web logs 範例資料後就可以看到華麗的 Dashboard,如果看到這裡覺得還是很複雜,如果剛好 Server 又是 Nginx 的也很推薦使用 GoAccess 這套工具。
| Kibana Dashboard | GoAccess Dashboard |
|---|---|
這次目標是看 Log 有沒有進來,所以到 Kibana 選單中 Observability 的 logs,有幾個功能還蠻方便的:
- 關鍵字搜尋
- 關鍵字 highlight
- 時段篩選
接著記得開啟 stream live,並且重複瀏覽幾次 localhost 看看我們剛剛 Nginx Access Log 有沒有自動匯入,如果看到如下圖,就恭喜大大設定成功,完成了這次 Quick Start 的任務。
FAQ:Filebeat 與日誌管理常見問題
Q1:如果 Nginx 日誌存放在自定義路徑,該如何修改 Filebeat 設定?
A:您需要進入 Filebeat 安裝目錄下的 modules.d/nginx.yml 檔案。在該檔案中,找到 var.paths 參數,並將其修改為您的 Nginx Log 實際路徑(例如:["/var/log/custom_nginx/access.log*"])。修改完成後,執行 ./filebeat test config 確保語法無誤,並重啟 Filebeat 服務。
Q2:Filebeat 與 Logstash 在 Nginx 日誌採集上有什麼選擇建議?
A:如果您的需求僅是簡單地將 Nginx Log 傳送到 Elasticsearch 並使用 Kibana 的內建儀表板,Filebeat 設定指南 建議直接使用 Filebeat 模組,因為它極其輕量且配置簡單。如果您需要在傳送前進行複雜的數據清洗、關聯其他資料庫資料或是將數據同時發送至多個目的地,則建議使用 Logstash 作為中間層處理。
Q3:實時日誌監控中的 Stream Live 功能對除錯有什麼幫助?
A:在 實時日誌監控 中,Stream Live 允許您在瀏覽器中像看「跑馬燈」一樣即時檢視流入系統的 Log。這在處理「難以重現」的 Bug 或是在發布新版本後進行冒煙測試 (Smoke Testing) 時非常有用。您可以即時看到使用者點擊產生的請求,並透過 Highlight 功能鎖定狀態碼為 500 或 404 的異常請求。
小編建議在設定完成後,務必觀察 Kibana 選單中 Observability 的 logs 頁面。利用關鍵字 highlight 功能,能讓您在發生系統異常時,秒級定位出問題所在的 API 請求。這種高品質的監控流程,是實現高效開發生活的必經之路。
喜歡這篇文章,請幫忙拍拍手喔 🤣