文章目錄
  1. 1. 介紹
    1. 1.1. 為何選用 ELK
    2. 1.2. 官方連結
  2. 2. ELK 架構選用
    1. 2.1. Filebeat
    2. 2.2. Redis
    3. 2.3. 運作方式簡介

嗯,用了許久的 ELK,當然除了使用以外還要會建立

為了免得之後忘記這陣子的研究,來寫寫一系列的紀錄吧

介紹

ELK-Stack

ELK Stack 是由 ElasticsearchLogstashKibana 以及 Beats 所組成的 Log 蒐集、查詢、分析工具。

1
2
3
4
5
6
7
8
9
10
11
# log 資料庫,可以做到全文索引跟搜尋、聚合 log的功能,速度超快
E:Elasticsearch
# log 格式化,java 製作,可以用各種內建的工具將每一筆 log 依據不同需求格式化
L:Logstash
# log 可視化介面,具有查詢(使用 Apache Lucene )、圖形化、監控、告警、GEO 等功能
K:Kibana
# Beat家族
# Filebeat:log 蒐集器,go lang 撰寫,速度潮快
# Winlogbeat:蒐集 Windows 事件
# Metricbeat:蒐集量測資訊
Beats:Filebeat、Winlogbeat、Metricbeat 等

可以在不改變原系統架構的情況下,架設 ELK 蒐集、分析、查詢 Log,簡化過去繁鎖、效率差且有可能影響應用程式環境的查 Log 工作。

為何選用 ELK

選擇工具/第三方套件,總要有一些理由/原因,甚至是比較

其實做每件事情都是一樣,事出必有因

  1. 穩定,官方更新速度快
  2. 豐富的生態系,不管是 inputoutput 都有很多的第三方可使用
  3. 官方文件足夠多以及好理解
  4. 網路資源多/實體資源多(e.g. 書)
  5. 安裝容易(尤其是利用 docker)
  6. 查詢 log 容易上手
  7. 只有用過這套(主因或許是這個 XDDDDD)

官方連結

Elasticsearch 官網

Logstash 官網

Kibana 官網

Beats 官網

ELK 架構選用

  • ELK 使用的版本是 7.6.2
  • Redis 使用的版本是 5.0.0

除了 ElasticsearchLogstashKibana 之外,beats 的部分選用了 Filebeat,中介層的緩存以及HA選用 Redis

中介層的緩存以及 HA 方案也能選用 Kafka

記得要讓 Redis 單獨給 ELK 使用,別跟其他用途混用了!!!

Filebeat

Golang 製作,效能很強,用途是爬 log 用的 beat
目前是選擇爬本地端的 Log 檔,然後輸出到 Redis ( 其實他也能獲取很多種套件的 log)

Redis

  • NoSQL 資料庫
  • 讀寫的速度很快
  • 可叢集
  • 可以當快取使用也能將資料持久化
  • 有資料備份機制
  • 資料還原發生誤差的機率很低

會選用 Redis 的原因是:

  1. Logstash 本身效能並不好
  2. Logstash 資料備份能力低
  3. 萬一 Logstash 掛了,原本暫存在 Logstash 的 log 會遺失

所以,利用 Redis 的優點,並且當第一層緩衝,減少 Logstash 的壓力

這邊其實也能使用 Filebeat 直接將 log 寫到 Elasticsearch 內,
但要改動較多的程式碼,所以先以比較間單的方式建構

運作方式簡介

各自的詳細運作原理另外再寫,因為篇幅會太長,所以這裡先簡單介紹

架構
根據上圖

  • 首先是 Filebeat

    1. 根據設定內的路徑/檔案建立 N個 Harvester,目的是蒐集檔案內的 log
    2. 根據設定內的 output(這裡是使用 Redis),將 log 用 RPUSH(預設) 寫入 Redis

      所以不要將 RedisRPUSHBLPOP 命令更名了

再來是 Redis

  1. 要記得做持久化,aofrdb兩者 都可,可以根據 log 用途來決定
  2. 要注意的是,有可能會因為 Logstash 獲取 log 的速度慢導致 Redis 記憶體 持續上升
  • 往下看 Logstash

    1. 主要區分幾個部分,執行順序由上往下:
      1. inputs:資料輸入來源
      2. filter:根據設定來使用內建的工具處理 log
      3. outputs:處理完的資料輸出
    2. inputs(這邊選擇 Redis) 透過 BLPOP 獲取 log
    3. filter 根據設定來使用內建的工具處理 log
    4. 處理完成後交給 outputs 將處理完的資料輸出(這邊選擇 Elasticsearch)
  • 資料寫到 Elasticsearch 後:

    1. 資料寫入索引(index)
    2. 建立資料對應的 Mapping
    3. 根據索引(index)選擇的文檔(doc)排序方式去排序
    4. 根據內容建立文檔(doc)的分數(score),以利快速查詢
  • 最後就是 Kibana 上場:

    1. 開始查詢啦!
文章目錄
  1. 1. 介紹
    1. 1.1. 為何選用 ELK
    2. 1.2. 官方連結
  2. 2. ELK 架構選用
    1. 2.1. Filebeat
    2. 2.2. Redis
    3. 2.3. 運作方式簡介