喬叔的 Elastic Stack 專業教育訓練
  • 喬叔的 Elastic Stack 專業教育訓練
  • 🧑關於喬叔 (Joe Wu)
  • Elastic 課程公開班
    • 🎯Elasticsearch 基礎實務班
      • 💯學員課後回饋
    • 🆕Elasticsearch 進階運維班
      • 💯學員課後回饋
    • Elasticsearch 進階開發班
    • Elastic Stack 基礎實務班
    • Elastic Observability 基礎實務班
    • 📩課程許願池
  • 技術分享
    • 📗喬叔帶你上手 Elastic Stack
      • 前言
      • Elastic Cloud 如何建立 Deployment
        • ES Node 的種類
        • 配置的選擇
      • Index 建立前你該知道的
        • ES Index 如何被建立
        • ES 的超前佈署 - Dynamic Mapping
        • ES 的超前佈署 - Index Template
        • ES Index 的別名 (Alias)
        • 管理你的 Index - Kibana Index
      • 管理 Index 的 Best Practices
        • Shard 的數量與 Rollover & Shrink API
        • 三溫暖架構 - Hot Warm Cold Architecture
        • Index Lifecycle Management (ILM)
        • Rollup
        • Transform
        • Snapshot Lifecycle Management (SLM)
        • 總結
      • Elastic Cloud 比免費版還多的功能
        • Elastic Stack 的方案比較與銷售方式
        • Centralized Beats Management
        • Centralized Pipeline Management
        • Watcher
        • Elasticsearch Token Service
        • Multi-stack monitoring & Automatic stack issue alerts
      • 向 App Search 學習怎麼用 Elasticsearch
        • 揭開 App Search 的面紗
        • Engine 的 Index Settings 篇
        • Engine 的 Mapping 篇
        • Engine 的 Search 基礎剖析篇
        • Engine 的 Search 進階剖析篇
      • Elasticsearch 的優化技巧
        • Indexing 索引效能優化
        • Searching 搜尋效能優化
        • Index 的儲存空間最佳化
        • Shard 的最佳化管理
      • 完賽心得
    • 📘喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
      • 前言 & 淺談 Observability
      • Elastic 的 Observability 解決方案
      • Uptime - 掌握系統的生命徵象
        • 我們要觀測的生命徵象是什麼?
        • 使用 Heartbeat 收集系統生命徵象數據
        • 透過 Kibana 觀看心電圖及設定警報
        • 使用合成監控 (Synthetics Monitor) 從使用者情境驗證服務的運作狀態
      • Metrics - 觀察系統的健康指標
        • Metrics 與 Metricbeat 的基本介紹
        • 使用 Metricbeat 掌握 Elastic Stack 的健康狀態
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Host 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Docker 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 Kubernetes 篇
        • 使用 Metricbeat 掌握 Infrastructure 的健康狀態 AWS 篇
      • Logs - 挖掘系統內部發生的狀況
        • Logs 與 Filebeat 的基本介紹
        • 使用 Filebeat 應該要了解的設計細節與原理
        • 透過 Filebeat 收集 Elastic Stack 中各種服務的細節資訊
        • 透過 Filebeat 收集 Infrastructure 中各種服務的細節資訊
      • Traces - 觀察應用程式的效能瓶頸
        • Elastic APM 基本介紹
        • 使用 APM-Integratoin-Testing 建立 Elastic APM 的模擬環境
        • 如何在 Kibana 使用 APM UI
        • 使用 APM Server 來收集 APM 數據
        • 透過 APM Agents 收集並傳送後端服務運作的記錄
        • 透過真實使用者監控 (RUM, Real User Monitoring) 來改善使用者體驗
      • 建立結構化的 Log
        • Elastic Common Schema 結構化 Log 的規範
        • Elasticsearch Ingest Pipeline 資料 Index 前的轉換好幫手
          • 基本介紹
          • 各種常用的 Processor
          • Enrich 資料與例外處理
      • 有效的使用 Observability 的資料
        • 透過 Machine Learning 發現異常的問題
        • 使用 Kibana Alerts 主動通知異常狀況
        • 資料的生命週期管理
        • 使用 Elastic Observability 追縱及觀察問題的心得
      • 完賽心得
    • 😀Elasticsearch 技術分享小品
      • 🤖Elastic 與 AI
        • Elasticsearch Inference API 讓我們直接在 ES 裡運用 OpenAI Completion API
    • 🎥線上分享
      • 喬叔 Elasticsearch Index 管理與效能優化技巧
      • Elastic Certification 認證經驗分享
    • 🛠️workshop
      • 如何在 Elasticsearch 實現敏捷的資料建模與管理 @ DevOpsDays 2023
        • 工作坊實作內容
      • Elastic Observability 實作體驗坊 @ DevOpsDays 2022
        • 行前準備
        • 工作坊實作內容
      • 當 Elasticsearch 搜尋引擎遇上 AI @ HelloWordDevConference 2024
        • 投影片
        • Elasticsearch 環境準備
        • Google Colab 環境準備
        • 工作坊操作說明
        • ElasticSearch Relevance Engine (ESRE)
    • ⬆️Elastic Stack 版本升級記錄
      • 🔍Elasticsearch
  • 其他專業服務
    • 👩‍🎓企業包班 | 企業內訓
    • 👨‍💼顧問服務
    • 🈺專案合作
    • 🧩Elastic 授權代理
  • 相關連結
    • Facebook 粉絲頁
Powered by GitBook
On this page
  • 本篇學習重點
  • 使用 Filebeat 收集 Elastic Stack 的各種 Logs
  • Elastic Stack 情境
  • 收集 Elasticsearch Logs
  • 收集 Kibana Logs
  • 收集 Logstash Logs
  • 收集 Filebeat Logs ?
  • 在 Kibana 中,如何查看經由 Filebeats 收集到的 Elastic Stack Logs
  • Observability 的 Logs
  • Kibana Stack Monitoring
  • Kibana Dashboards - Logstash
  • Elastic Security
  • 其他注意事項
  • 參考資訊
  1. 技術分享
  2. 喬叔帶你上手 Elastic Stack - 探索與實踐 Observability 系列
  3. Logs - 挖掘系統內部發生的狀況

透過 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:

./filebeat modules enable elasticsearch

啟用 module 之後,我們到 ./modules.d/ 目錄底下,修改 elasticsearch.yml 的設定檔:

# Module: elasticsearch
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.x/filebeat-module-elasticsearch.html

- module: elasticsearch
  # Server log
  server:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/*_server.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/*_server.json

  gc:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/gc.log.[0-9]*
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/gc.log
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/gc.log.[0-9]*
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/gc.log

  audit:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/*_audit.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/*_audit.json

  slowlog:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/*_index_search_slowlog.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/*_index_indexing_slowlog.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/*_index_search_slowlog.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/*_index_indexing_slowlog.json

  deprecation:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/elasticsearch-7.14.1-1/logs/*_deprecation.json
      - /Users/joecwu/Training/elasticsearch-7.14.1-2/logs/*_deprecation.json

這邊可以看到,主要有以下五種 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 有兩種:

  1. Kibana 的 Server Log

要收集 Kibana server logs 時,需特別注意到一件事,Kibana 預設不會將 logs 寫到檔案,會是直接在啟動時將 logs 輸出到 stdout,因此我們會先需要在 Kibana 的設定檔 ./config/kibana.yml 當中,指定 logs 輸出到檔案:

logging.dest: ./logs/kibana.log

小提醒 1:Kibana 的 log 輸出並沒有支援 log rotate ,所以應該要使用外部的 log rotate 的機制,避免讓 log 檔案無限的長大,吃光硬碟空間。

小提醒 2:Kibana 的 log 其實真的很少會用到,要不要記錄下來並且傳送到 Elasticsearch 可以依照大家自己的 Log 管理規範來拿捏,如果 Kibana 平常只是公司內部運維人員自己使用,或許不一定要寫,但如果是有開放給各單位使用,甚至是外部的使用者,這部份就會建議最好還是記錄下來,至於想保留短一點的時間,可以在進入 Elasticsearch 之後再依需要進行 Log 生命週期的管理。

  1. Kibana 的 Security Audit Log

如果你的 Elasticsearch 是有開啟 Security 的功能時,Kibana 的 xpack.security.enabled 會自動啟用,所以這部份不用特別的調整,不過 Security 相關的 Audit logs 預設不會記錄在檔案之中,這些 Audit logs 就是屬於 Kibana 當中的一些與安全性相關的日誌,例如使用者的登入、哪些人存取哪些資源…等,我們首先要先啟用 Audit logs:

xpack.security.audit.enabled: true

接下來指定 Audit logs appender 的配置設定,這邊是有支援 log rotate的:

xpack.security.audit.appender: 
  type: rolling-file
  fileName: ./logs/audit.log
  policy:
    type: time-interval
    interval: 24h 
  strategy:
    type: numeric
    max: 10 
  layout:
    type: json

在上面的配置,我分別把 Kibana 的 Server Log 產生到 ./logs/kibana.log 這個檔案,另外把 Audit logs 產生到 ./logs/audit.log 並且有指定 log rotate。

設定 Filebeat 的 Kibana Module

有了 Kibana logs 之後,我們要使用到 Filebeat modules 裡的 Kibana module,使用以下指令啟用 Module:

./filebeat modules enable kibana

啟用 module 之後,我們到 ./modules.d/ 目錄底下,修改 kibana.yml 的設定檔:

# Module: kibana
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.x/filebeat-module-kibana.html

- module: kibana
  # Server logs
  log:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/kibana-7.14.1-darwin-x86_64/logs/kibana.log

  # Audit logs
  audit:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths:
      - /Users/joecwu/Training/kibana-7.14.1-darwin-x86_64/logs/audit*.log

這邊就分別針對前面所產生的 Kibana server logs 以及 Audit logs 的路徑進行設定。

收集 Logstash Logs

設定 Filebeat 的 Logstash Module

收集 Elasticsearch Logs 時,我們會使用到 Filebeat modules 裡的 Logstash module,因此我們先啟用 Module:

./filebeat modules enable logstash

啟用 module 之後,我們到 ./modules.d/ 目錄底下,修改 logstash.yml 的設定檔:

# Module: logstash
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.x/filebeat-module-logstash.html

- module: logstash
  # logs
  log:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/Users/joecwu/Training/logstash-7.14.1/logs/logstash-plain.log*"]

  # Slow logs
  slowlog:
    enabled: true
    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/Users/joecwu/Training/logstash-7.14.1/logs/logstash-slowlog-plain.log*"]

由於 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 中進行設置:

logging.level: info
logging.to_files: true
logging.files:
  path: /var/log/filebeat
  name: filebeat
  keepfiles: 7
  permissions: 0644

在 Kibana 中,如何查看經由 Filebeats 收集到的 Elastic Stack Logs

Observability 的 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 這邊來查詢。

參考資訊

Previous使用 Filebeat 應該要了解的設計細節與原理Next透過 Filebeat 收集 Infrastructure 中各種服務的細節資訊

Last updated 2 years ago

相關的 Kibana Audit log 的設定可以參考 [1]。

首先就是可以使用這一系列文章,前面的 所介紹到的 Observability Logs 的使用方式,來進行檢視我們所收集進入 Elasticsearch 裡的 Logs。

image-20210930234212131
15-kibana-stack-monitoring
image-20210930232324210
image-20210930232134528
15-Kibana-Security-Hosts

📘
官方文件 - Kibana Audit Logging Settings
13 - Logs - 挖掘系統內部發生的狀況 (1) - Logs 與 Filebeat 的基本介紹
官方文件 - Kibana Audit Logging Settings
官方文件 - Journalbeat