概述
一個完整的集中式的日誌管理系統,一般需要具有如下幾個主要特徵:
- 收集:能夠收集各種來源的日誌;
- 傳輸:能夠把日誌傳輸到日誌管理系統;
- 存儲:存儲日誌數據;
- 分析:能夠對日誌進行分析並展示;
- 警告:能夠提供錯誤告警和監控機制;
Elasticsearch + Logstash + Kibana(ELK)恰是一套能滿足上述要求的開源的日誌管理方案。
架構
Logstash:負責日誌的收集、過濾和傳輸;
Elasticsearch:負責日誌存儲、檢索和分析;
Kibana:負責日誌的可視化;
架構圖如下:
Logstash
Logstash 事件處理有三個階段:
- input
- sfiltes
- outputs
是一個接收、處理、轉發日誌的工具。支持日誌系統、webserver 日誌、錯誤日誌、應用日誌等。
Logstash 分爲 Shipper 和 Indexer 兩種角色,分別完成不同的工作:
- Shipper:安裝在在 client 上,只負責採集和傳輸日誌;
- Indexer:安裝在 server 上,從隊列(例如 redis)讀取日誌、過濾、格式化等,然後存入 Elasticsearch;
架構
Elasticsearch
Elasticsearch 是一個基於 Lucene 的開源分佈式搜索引擎和分析引擎,負責日誌存儲、檢索和分析。
Elasticsearch 是文檔型數據庫,索引(Index)定義了文檔的邏輯存儲和字段類型,每個索引可以包含多個文檔類型,文檔類型是文檔的集合,文檔以索引定義的邏輯存儲模型,比如,指定分片和副本的數量,配置刷新頻率,分配分析器等,存儲在索引中的海量文檔分佈式存儲在 Elasticsearch集羣中。
Elasticsearch 將所有文檔信息寫入到倒排索引(Inverted Index)的數據結構中,倒排索引建立的是索引中詞和文檔之間的映射關係,在倒排索引中,數據是面向詞(Term)而不是面向文檔的。
ElasticSearch 的對象模型,跟關係型數據庫模型相比:
- 索引(Index):相當於數據庫,用於定義文檔類型的存儲,在同一個索引中,同一個字段只能定義一個數據類型;
- 文檔類型(Type):相當於關係表,用於描述文檔中的各個字段的定義,不同的文檔類型,能夠存儲不同的字段,服務於不同的查詢請求;
- 文檔(Document):相當於關係表的數據行,存儲數據的載體,包含一個或多個存有數據的字段;
- 字段(Field):文檔的一個Key/Value對;
- 詞(Term):表示文本中的一個單詞;
- 標記(Token):表示在字段中出現的詞,由該詞的文本、偏移量(開始和結束)以及類型組成;
Kibana
Kibana 是一個數據可視化服務,根據用戶的操作從 Elasticsearch 中查詢數據,形成相應的分析結果,並以圖表的形式展現給用戶。
參考地址:
https://www.cnblogs.com/kevingrace/p/5919021.html
http://www.cnblogs.com/ljhdo/p/4981928.html