antony@notes:~/data-platform$ cat "ELK-Overview.md"
ELK-Overview
ELK-Overview
[TOC]
ELK Stack Architecture
What is ELK Stack ?
ELK Stack 統一為 log 收集儲存過濾和視覺畫的工具
logstash 可以預處理與收集資料 Beats 收吃資料,功耗較小
What is Elasticsearch?
在企業遇到的資料主要會分為結構化資料與非結構化資料
- 結構化資料
- 具有固定的格式以及有限長度的資料
- 也就是 Database
- 非結構化資料
- 長度不一定且沒有固定格式的資料
- ex. email的內容
Elasticsearch Introduction
- Apache License
- Basic Apache Lucene
- Flexible Architecture
- RESTful API
- JSON Format
- 他的格式是一個物件,前提開頭和結尾都是大括號,使用逗號做分割,key、value 之間用 冒號 連結,每組 key、value 之間是由 逗號 分割
{ "region": "US", "age": 30 }
- Distributed
- Scalability
- High Availability
- Document Oriented (文件導向儲存體)
- Schema Free (不需預先定義 Schema)
- Storage 本身會去偵測資料的樣子,然後定義一個基本的版本
- Schema Free (不需預先定義 Schema)
- Near Realtime Search (近即時收尋)
- Full-text Search (全文檢索,像是在查字典)
- 資料進來時,會先建立資料索引,當資料索引建立好後,在資料量很大時,搜索的速度會優於傳統式資料庫按照順序一行一行在掃描
- 平常在網站上搜尋也是全文檢索
- Full-text Search (全文檢索,像是在查字典)
Elasticsearch 裡的名詞解釋
| Elasticsearch | RDB |
|---|---|
| Index | Database |
| Type | Table |
| Document | Row(Record) |
| Field | Column |
| Mapping | Schema |
| Everything is indexed | Index |
| Shard | Partition |
| Query DSL | SQL |
| Text | Text |
| Replica | |
| Node | Instance |
| Cluster | Cluster |
Elasticsearch Node
- Master
- Coordinator Node
- Create/Delete Index
- 本身不做 Document 處理,會丟給 Data Node 處理,資源需求相對 Data Node 低
- 會定期發 ping 確認其他 Node 的存在
- Master 預設可以當 Data node,所以我們要把它關掉,以免他太忙
- Data
- Storage Data
- 負責儲存和查詢資料
- 需要的硬體資源 cpu memory 和硬碟的資源較高
- Ingest
- Data Process
- 在數據儲存之前,它負責做數據的預處理
- Coordinating
- 當 master 要新增或刪除資料時,會讓 Data node 作處理,而 Data node 處理完的資料,就會由 Coordinating node 匯總處理完的資料,再傳給 clinet 端
- Coordinating 本身不負責儲存資料
- 它的存在可以降低 Master 和 Data 兩個 node 的負擔
Elasticsearch Shard & Replica
- Shard
- Index split
- Shard <= 30G
- 單個 Shard 盡量在 50 GB 以下
- Replica
- High Availability
Elasticsearch Indexing Process

資料進來時,會先存到 memory buffer (),然後每秒會 refresh 到 filesystem cache(Data node 的記憶體裡),最後每30分鐘或 translog 大於512 MB時,會將所有資料寫入硬碟
CharacterFiliters 負責把不同語言的標籤去掉,只保留內容
Tokenizer 分詞器,將資料的詞分割
Token Filter 去掉贅字
translog 相當於 Hadoop 的 etcd ,會紀錄資料新增/修改/刪除的動作,防止資料在傳送的過程中,突然斷電,導致動作中斷
Elasticsearch Inverted Index
Inverted Index 反向索引,讓全文索引加速

Elasticsearch Template & Mapping
- Template (Refresh頻率、索引名稱、欄名)
- Setting: index config
- refresh_interval (根據機器效能和任務需求決定)
- Mapping: define index and Field
- Setting: index config
- Mapping (產生 Schema)
- Dynamic (自動產生 Schema)
- Static (自訂 Schema)
- Default analyzed: standard (預設分詞器: standard)
- Default doc_value:true (根據相關性分數作排序)
- Text Type:
- Text (會經tokenizer處理)
- keyword (不經tokenizer處理)
反向索引: 從字詞去找文件
- Example
Elasticsearch Analysis
- Analyzer
- Character Filters:
- HTML Strip Character Filters
- Mapping Character Filters
- Pattern Replace Character Filters
- Tokenizer
- Standard、Whitespace、Letter…
- smartch、ik
- Token Filters
- Lowercase、Length…
- Character Filters:

Elasticsearch Hot-Warm
- Elasticsearch Hot-Warm(冷、暖、熱區的定義)
- 定義資料的生命週期(Data life-circle)自訂判定條件,減少人為處理流程
- 依照取用的頻繁程度分別定義資料為
- “data”:”hot” 熱資料|新增、常用的資料
- “data”:”warm” 暖資料|過了一段時間,依然有進行存取的資料
- “data”:”cold” 冷資料|已經長時間未使用的資料
What is Logstash & Beats?
- 根據現有的欄位做處理產生新的欄位,好處是可以根據結果來做搜尋
- 可將非結構化的資料變成結構化的資料
- 通常 Logstash 不會只有一個,會有很多 input 和 output 的插件
- 資源的數據來源有 log
如果主機直接對連 Logstash ,當 Logstash 壞了,Beats 還是會一直丟資料給 Logstash ,有可能就會造成資料遺失。
在 Logstash 和 Beats 之間,加 Broker layer 資料中繼站,做完彙整後, logstash 會再把資料拉回來,好處是可避免資料遺失。
Logstash Syntax
start_position 時間戳,代表會從檔案的第一筆開始讀一直到最後更新那筆,如果不加就只會讀最後更新那筆 sincedb_path ignore_older => 0 不要忽略資料
Logstash Performance Tuning
Beats Introduction
Data Shippers:
- Filebeat 收集檔案
- Metricbeat
- Packetbeat 收集 http
- Winlogbeat 收集 windows 的 log
- Auditbeat 收集人的行為
- Third Party 第三方插件
Beats Filebeat
Input Harvester 逐行處理資料的程序 Spooler 緩衝處理程序(緩衝區),將每一個Harvester收集到的資料處理過後,output 到 Elasticsearch、Logstash、Kafka和Redis…等
Filebeat Syntax

Logstash|主要任務:將非結構化資料 » 結構化資料,擔任中央數據處理引擎
- 使用 Java 語言開發,重裝型的資料收集器
Beats|主要任務:抽取、整合資料,擔任前端的資料收割機
- 使用 go 語言開發,較輕量型的資料收集器