透過 Filebeat 收集 Elastic Stack 中各種服務的細節資訊
本篇學習重點
如何使用 Filebeat 收集 Elastic Stack 的各種 Logs
在 Kibana 中,如何查看經由 Filebeats 收集到的 Elastic Stack Logs
在經過前一篇 Filebeat 的運作原理的介紹後,接下來我們要來說明,如何使用 Filebeat 收集我們 Elastic Stack 之中的各種 Logs。
使用 Filebeat 收集 Elastic Stack 的各種 Logs
首先我們針對 Elastic Stack 的 Logs 進行收集,在說明如何配置 Filebeat 之前,我們先解釋一下我們的 Elastic Stack 情境。
Elastic Stack 情境
在這次示範的情境,我們先使用單純的手動下載安裝,這種方式可以讓我們先專注在 Filebeat 相關的設定之中,不較不會受到其他佈署方式的環境影響。
情境中的 Elastic Stack 有以下這些成員:
Elasticsearch Node * 2: 都是安裝在本機端,並且分別有各自不同的資料夾路徑
/Users/joecwu/Training/elasticsearch-7.14.1-1
/Users/joecwu/Training/elasticsearch-7.14.1-2
Kibana * 1: 安裝於以下路徑
/Users/joecwu/Training/kibana-7.14.1-darwin-x86_64
Logstash * 1: 安裝於以下路徑
/Users/joecwu/Training/logstash-7.14.1
Filebeat * 1: 安裝於以下路徑
/Users/joecwu/Training/beats/filebeat-7.14.1-darwin-x86_64
收集 Elasticsearch Logs
設定 Filebeat 的 Elasticsearch Module
收集 Elasticsearch Logs 時,我們會使用到 Filebeat modules 裡的 Elasticsearch module,因此我們先啟用 Module:
啟用 module 之後,我們到 ./modules.d/
目錄底下,修改 elasticsearch.yml
的設定檔:
這邊可以看到,主要有以下五種 Elasticsearch 會寫的 Logs 需要收集:
server
gc
audit
slowlog
deprecation
因為是專門針對 Elasticsearch 所提供的 module,所以其實在 module 之中,就已經為這些檔案的格式進行解析了,像是 Elasticsearch server log 在遇到有 error 時,stack trace 是有 multi-line
的格式,又或是要將這些 Logs 內容給結構化,整理成 Elastic Common Schema,讓後續查詢及分析能更容易使用,這些都直接在 Elasticsearch module 會直接進行處理。
小提醒 1: 因為在這些 Logs 檔的資訊當中,沒有足夠的 Timezone 的資訊,所以 Filebeat 預設會以主機本機端的 Timezone 來當作處理的依據,所以如果要收集的檔案,他產生時寫入的時區,與運作 Filebeat 的主機的時區是不同的話,可以透過
event.timezone
欄位,來修改成想要要指定的時區,這部份就會可以透過processors
來進行操作。
小提醒 2: 由於我的情境中,是直接使用一台主機安裝兩個 Elasticsearch Nodes,但一般 production 環境中,比較不會這樣安裝,所以配置上應該較少會直接針對二組 Elasticsearch 的路徑來進行設定,最好是透過組態管理的工具,或是容器化的佈署方式,會讓這配置檔+路徑更好管理。
收集 Kibana Logs
啟用 Kibana Logs
Kibana 的 Logs 有兩種:
Kibana 的 Server Log
要收集 Kibana server logs 時,需特別注意到一件事,Kibana 預設不會將 logs 寫到檔案,會是直接在啟動時將 logs 輸出到 stdout
,因此我們會先需要在 Kibana 的設定檔 ./config/kibana.yml
當中,指定 logs 輸出到檔案:
小提醒 1:Kibana 的 log 輸出並沒有支援 log rotate ,所以應該要使用外部的 log rotate 的機制,避免讓 log 檔案無限的長大,吃光硬碟空間。
小提醒 2:Kibana 的 log 其實真的很少會用到,要不要記錄下來並且傳送到 Elasticsearch 可以依照大家自己的 Log 管理規範來拿捏,如果 Kibana 平常只是公司內部運維人員自己使用,或許不一定要寫,但如果是有開放給各單位使用,甚至是外部的使用者,這部份就會建議最好還是記錄下來,至於想保留短一點的時間,可以在進入 Elasticsearch 之後再依需要進行 Log 生命週期的管理。
Kibana 的 Security Audit Log
如果你的 Elasticsearch 是有開啟 Security 的功能時,Kibana 的 xpack.security.enabled
會自動啟用,所以這部份不用特別的調整,不過 Security 相關的 Audit logs 預設不會記錄在檔案之中,這些 Audit logs 就是屬於 Kibana 當中的一些與安全性相關的日誌,例如使用者的登入、哪些人存取哪些資源…等,我們首先要先啟用 Audit logs:
接下來指定 Audit logs appender
的配置設定,這邊是有支援 log rotate的:
在上面的配置,我分別把 Kibana 的 Server Log 產生到 ./logs/kibana.log
這個檔案,另外把 Audit logs 產生到 ./logs/audit.log
並且有指定 log rotate。
相關的 Kibana Audit log 的設定可以參考 官方文件 - Kibana Audit Logging Settings [1]。
設定 Filebeat 的 Kibana Module
有了 Kibana logs 之後,我們要使用到 Filebeat modules 裡的 Kibana module,使用以下指令啟用 Module:
啟用 module 之後,我們到 ./modules.d/
目錄底下,修改 kibana.yml
的設定檔:
這邊就分別針對前面所產生的 Kibana server logs 以及 Audit logs 的路徑進行設定。
收集 Logstash Logs
設定 Filebeat 的 Logstash Module
收集 Elasticsearch Logs 時,我們會使用到 Filebeat modules 裡的 Logstash module,因此我們先啟用 Module:
啟用 module 之後,我們到 ./modules.d/
目錄底下,修改 logstash.yml
的設定檔:
由於 Logstash 運作起來之後,預設會將 Logs 產生到解壓縮目錄下的 ./logs/
裡頭,並且會產生 logstash-plain.log
以及 logstash-slowlog-plain.log
兩種 logs 檔,因此我們同在 module 的設定檔中,設定好這兩種 logs 檔的位置即可。
收集 Filebeat Logs ?
因為我們主要是透過 Filebeat 來收進檔案類型的 Logs,因此如果透過 Filebeat 本身自己收集自己所寫的 Logs,其實會有點奇怪,也就是如果 Filebeat 自己發生狀況時,他的 Error Logs 可能就沒辦法被收集並往 Elasticsearch 傳送,因此如果要收集 Filebeat 的 logs 時,建議也應該透過另外的 Filebeat 來進行收集。
另外 Filebeat 本身的 modules 之中,也沒有提供 beats 的 module,這部份的一種做法,是直接將 beats 的 Logs 透過 stderr
寫到 journald
,並且再透過 Beats 家族中的 Journalbeat 進行收集。[2]
當然如果真的要寫成檔案,還是可以透過以下的方式,在 filebeat.yml
中進行設置:
在 Kibana 中,如何查看經由 Filebeats 收集到的 Elastic Stack Logs
Observability 的 Logs
首先就是可以使用這一系列文章,前面的 13 - Logs - 挖掘系統內部發生的狀況 (1) - Logs 與 Filebeat 的基本介紹 所介紹到的 Observability Logs 的使用方式,來進行檢視我們所收集進入 Elasticsearch 裡的 Logs。
Kibana Stack Monitoring
再來是進入到 Kibana 專門針對 Elastic Stack 所建立的 Stack Monitoring。
這裡面會帶出最近的 Elasticsearch 的 Logs ,進一步的選擇之後,也能自動帶入到 Observability Logs 的畫面之中,並且會自動帶入篩選的條件。
Kibana Dashboards - Logstash
再來就是 Kibana 所建立好的各種 Dashbards,其中有針對經由 Filebeat 所收集的 Logstash 資訊,建立好兩種 Dashboard。
這邊以其中一種 Logstash Logs ECS 為例:
Elastic Security
最後是 Kibana 的 Audit Logs 在 Elastic Security 的 Solution 之中,也有針對這些安全性的資訊,建立好一些檢視的工具,針對 Kibana Hosts 相關的 Audit Logs,也能在 Hosts 當中查看安全性分析的一些結果,進而可以再追縱到原始的 Logs。
其他注意事項
Filebeat 在 7.15 版的時候,使用的依然是舊版的 Elasticsearch Index Template,也就是 _template
這個 endpoint,不是新版的 _index_template
,有時我們要使用收集到的資料時,會要參考特定欄位的 Mapping 的設定,這時如果要查閱 Filebeat 所建立的 Index Template,記得要從 _template
這邊來查詢。
參考資訊
Last updated