iT邦幫忙

2021 iThome 鐵人賽

DAY 13
1
DevOps

喬叔帶你上手 Elastic Stack - 探索與實踐 Observability系列 第 13

13 - Logs - 挖掘系統內部發生的狀況 (1/4) - Logs 與 Filebeat 的基本介紹

Logs - 挖掘系統內部發生的狀況 系列文章


本篇學習重點

  • Logs 在 Observability 中的基本介紹
  • Filebeat 的簡介,以及如何用 Filebeat 來收集 Logs 資料

Observability Logs 的基本介紹

Logs 在 Observability 扮演的角色

Google Cloud Architecture Center - DevOps Guides [1] 對針 Observability 這個詞的定義中,描述到:

Observability is tooling or a technical solution that allows teams to actively debug their system. Observability is based on exploring properties and patterns not defined in advance.

有提到一個重點,就是『非事先定義』,Observability 也就是擁有能夠探索未事先定義的屬性與模式的能力,我們在先前介紹的 UptimeMetrics 的部份,其實都是需要事先定義,就算是 Elastic 已經做好很多預設的 Integration 以及 Dashboard,但也都是先定義好的,如果沒有定義的部份,也就不會被收集到。

而 Observability 當中的 Logs 與 APM,就擁有較多可以觀察到『非事先定義』部份的能力,針對 Logs 的部份,源頭當然還是需要系統、應用程式端、或是服務端,有記錄足夠資訊的日誌,而這些日誌,將會讓我們擁有『當發現系統有異常時,能夠進一步深入挖掘系統內部運作的情況,並且提供分析核心原因及找到解決方案』的能力。

Observability 中的 Logs 提供了什麼樣的能力

即時監控不斷產生的 Logs - Streaming

就好比我們在 *nix 環境中常會針對日誌檔使用的指令 tail -f,能讓我們查看最新不斷產生的日誌內容,Logs 也提供了 Streaming 的功能,在 Kibana > Observability > Logs 當中,我們可以啟用 Stream live 的按鈕,就可以讓我們即時的查看分散在多台主機的系統、服務、應用程式,所最新產生的日誌內容。

13-Kibana-O11y-Logs-stream

在這個 Logs Streaming 的功能之中,由於資訊量很大,所以 Logs 同時也有提供一些能力,能協助我們找到或是關注在我們所需要的資料上:

  • 使用 KQL (Kibana Query Language) 定義篩選的規則

  • 使用 Highlights 在結果當中以顏色突顯、也會在右方的時間軸上呈現出哪些時間有發生
    13-Kibana-O11t-Stream-Highlight

  • 在查詢到指定某一條 log 時,能透過 View in Context 的方式來檢視,也就是可以快速的翻查這行 log 的前、後的 logs,這個功能非常的實用。

13-Kibana-O11t-Stream-view-in-context

使用 Machine Learning 來協助分析 Logs

這部份在 Observability 的 Logs 之中,預設在選單上就有列出兩個功能,都是透過 Machine Learning 來協助做到二個類型的處理:

  • Anomalies 異常
  • Categories 分類

透過機器學習的方式,能針對指定 Logs 的時間啟始點、針對哪些 Index,建立 Machine Learning 的 Job。

13-Kibana-Create-ML-Job

在進入這兩個功能的檢視畫面時,就可以發現 Elastic 已經貼心的幫我們建立好這些基本的學習規則,可以直接查看當下發現的結果。

13-Kibana-Create-Anomalies

進一步可以從 Anomaly Explorer 查看異常分析的內容。

13-Kibana-Create-Anomaly-Explorer

甚至可以查看異常判斷的原因。

13-Kibana-Create-Anomaly-Reason

Filebeat 基本介紹

要使用上述介紹到 Elastic 在 Kibana 提供的 Observability Logs 的這些基本能力之前,我們要先將 Logs 收集到 Elasticsearch 之中,Elastic Stack 中負責收集 Logs 資訊的主要角色,就是 Filebeat,如同先前介紹的 Metricbeat 和 Heartbeat 一樣,Filebeat 也是 Beats 家族中的一員,所以也是從 libbeat 所發展出來,並且是針對檔案類型的 Logs 進行收集的工具。

Filebeat 的主要運作架構

如下圖所示,Filebeat 主要是針對機器上的各種檔案,並且會使命必達的負責將指定的目錄中的檔案有新增的 logs,收集起來並且往後傳遞,可以直接送到 Elasticsearch 或是送到 Logstash 進行 ETL (Etract, Transform, Load) 的處理,又或是送到 Kafka 或 Redis 的 Queue 之中,再透過其他的工具進行後續的處理。

13-Filebeat-Architecture

Filebeat 的安裝方式

安裝的方式如同其他 Beats 家族成員相似,以下是使用最簡單的安裝步驟來做介紹,其實與官方的 Quick start 的文件差不多,先大約知道將 Metricbeat 運作起來的流程為何,我將會以 MacOS 為例。

  1. 下載,並解壓縮 Filebeat。
curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.0-darwin-x86_64.tar.gz
tar xzvf filebeat-7.15.0-darwin-x86_64.tar.gz
  1. 在解壓縮目錄下的 filebeat.yml 指定 Elasticsearch 的位置
output.elasticsearch:
  hosts: ["myEShost:9200"]
  username: "filebeat_internal"
  password: "YOUR_PASSWORD" 
  1. 啟動要安裝的模組
./filebeat modules enable {module_name}

Filebeat 提供了非常多內建的模組 (modules),像是 ElasticsearchApacheNginxMySQLPostgreSQLRedisMongoDB...等,詳細可以查看 官方文件 Filebeat Modules [2]。

另外針對啟動的模組,通常都會要調整這些模組的 config 檔,檔案的路徑就在 ./modules.d/ 裡面,檔名就會是 module 的名字,副檔名為 .yml

  1. 安裝 Filebeat 內建的 Kibana Dashboard,以及 Elasticsearch 的 Index Template。
./filebeat setup -e
  1. 啟動 Filebeat
./filebeat -d

若是要以 root 執行,要記得把 config 的擁有者也改成 root

sudo chown root filebeat.yml 
sudo chown root modules.d/system.yml 
sudo ./filebeat -e

接下來就可以到 Kibana 查看 Filebeat 所發送的資料,有沒有成功的進入到 Elasticsearch了。

參考資料

  1. Google Cloud Architecture Center - DevOps Guides
  2. 官方文件 Filebeat Modules

上一篇
12 - Metrics - 觀察系統的健康指標 (6/6) - 使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇
下一篇
14 - Logs - 挖掘系統內部發生的狀況 (2/4) - 使用 Filebeat 應該要了解的設計細節與原理
系列文
喬叔帶你上手 Elastic Stack - 探索與實踐 Observability31

尚未有邦友留言

立即登入留言