ELK 搭建日誌收集處理平臺
一、ELK架構設計
1. 核心組成
ELK是一個應用套件,由Elastic Search、Logstash和Kibana三部分組成,簡稱ELK;它是一個開源免費、功能強大的日誌分析管理系統。ELK可以將系統日誌、網站日誌、應用系統日誌等各種日誌進行收集、過濾、清洗,然後進行集中存放並可用於實時檢索、分析。
2. Elastic Search介紹
Elastic Search是一個實時的分散式搜尋和分析引擎,它可以用於全文檢索,結構化搜尋以及分析,採用Java語言編寫。它的主要特點是
- 實時搜尋,實時分析
- 分散式架構、實時檔案儲存,並將每一個欄位都編入索引
- 文件導向,所有的物件全部都是文件
- 高可用性,易擴充套件,支援叢集(Cluster)、分片和複製(Shards和Replicas)
- 介面友好,支援JSON
3. Logstash介紹
Logstash是一款輕量級的、開源的日誌收集處理框架,它可以方便的把分散的、多樣化的日誌蒐集起來,並進行自定義過濾分析處理,然後傳輸到指定的位置,比如某個伺服器或者檔案。Logstash採用JRuby語言編寫。它主要特點如下:
Logstash的理念很簡單,從功能上來講,它只做三件事
- Input:資料採集
- filter:資料加工,如過濾、改寫等
- output:資料輸出
Logstash內部執行邏輯圖
Shipper:主要用來收集日誌資料,負責監控本地日誌的變化,及時吧日誌檔案的最新內容收集起來,然後經過加工、過濾、輸出到Broker
Broker:相當於日誌hub,用於連線多個Shipper和多個Indexer。
Indexer:從Broker讀取文字,經過加工、過濾、輸出到指定介質(可以是檔案、網路、ElasticSearch等)中。
4、Kibana介紹
Kibana是一個開源的資料分析視覺化平臺。使用kibana可以為Logstash和ElasticSearch提供的日誌資料進行高效的搜尋、視覺化彙總和多維度分析,還可以與ElasticSearch搜尋引擎之中的資料進行互動。它基於瀏覽器介面操作可以快速建立動態儀表盤,實時監控ElasticSearch的資料狀態與更改。
5、ELK工作流程
二、Zookeeper基礎與入門
Zookeeper是一種為分散式應用所設計的高可用、高效能的開源協調服務,它提供了一項基本服務:分散式鎖服務,同時,也提供了資料的維護和管理機制,如:統一命名服務、狀態同步服務、叢集管理、分散式訊息佇列、分散式應用配置項的管理等等。
三、 Kafka基礎與入門
Kafka是一個高吞吐量的分散式釋出/訂閱訊息系統,Kakfa是Apache組織下的一個開源系統,它的最大特性就是可以實時的處理大量資料以及滿足各種場景。
Kafka使用磁碟,而不是使用記憶體。使用磁碟操作有以下好處:
- 磁碟快取由Linux系統維護,不需要額外維護成本。
- 磁碟順序讀寫速度超過記憶體隨機讀寫。
- JVM的GC效率低,記憶體佔用大。使用磁碟可以避免這一問題。
- 系統冷啟動後,磁碟快取依然可用。
四、FileBeat基於與入門
FileBeat是一個開源的文字日誌收集器,它是elastic公司Beats資料產品的一個子產品,採用go語言開發,一般安裝在業務伺服器上作為代理來檢測日誌目錄或特定的日誌檔案,並把它們傳送到Logstash、Elastic Search、Redis或Kafka等。
FileBeat的工作流程為:當開啟filebeat程式的時候,它會啟動一個或多個探測器(prospector)去檢測指定的日誌目錄或檔案,對於探測器找到的每一個日誌檔案,fileBeat會啟動收集程序(harvester),每一個收集程序讀取一個日誌檔案的內容,然後將這些日誌資料傳送到後臺處理程式(spooler),後臺處理程式會集合這些事件,最後傳送集合的資料到output指定的目的地。
五、ELK常見應用架構
- 簡單的ELK應用架構
此架構主要是將Logstash部署在各個節點上搜集相關日誌、資料,並經過分析、過濾後傳送到遠端伺服器上的ElasticSearch進行儲存。Elastic Search再將資料以分片的形式壓縮儲存,並提供多種API供使用者查詢、操作。使用者可以通過Kibana Web直觀的對日誌進行查詢,並根據需求生成資料報表。
此架構的優點是搭建簡單,易於上手。缺點是Logstash消耗系統資源比較大,執行時佔用CPU和記憶體資源較高。此外,由於沒有訊息佇列快取,可能存在資料丟失的風險。此架構建議供初學者或資料量小的環境使用。
- 典型的ELK架構
此架構主要特點是引入了訊息佇列機制,位於各個節點上的Logstash Agent(一級Logstas,主要用來傳輸資料),先將資料傳遞給訊息佇列(常見的有Kafka、Redis等)。接著,Logstash Server(二級Logstash,主要用來拉取訊息佇列資料,過濾並分析資料)將格式化的資料傳遞給Elastic Search進行儲存。最後,有Kibana將日誌和資料呈現給使用者。由於引入了Kafka(或者Redis)快取機制,即使遠端Logstash Server 因故障停止執行,資料也不會丟失,因為資料已經被儲存下來了。
這種架構適用於較大叢集,資料量一般的應用環境。但由於二級Logstash要分析處理大量資料,同時,Elastic Search也要儲存和索引大量資料,因此他們負載會比較重。解決的方法是將它們配置為叢集模式,以分擔負載。此架構的優點在於引入了訊息佇列機制,均衡了網路傳輸,從而降低了網路閉塞尤其是丟失資料的可能性,但依然存在Logstash佔用系統資源過多的問題,在海量資料應用場景下,可能會存在效能瓶頸。
- ELK叢集架構
這個架構是在上面第二個架構基礎上改進而來的,主要是將前端收集資料的Logstash Agent換成了fileBeat,訊息佇列使用了Kafka叢集,然後將Logstash和Elastic Search都通過叢集模式進行構建,此架構適合大型叢集、海量資料的業務場景,它通過將前端的Logstash Agent替換成filebeat,有效降低了收集日誌對業務系統資源的消耗。同時,訊息佇列使用提高了ELK系統的高效性、擴充套件性和吞吐性。
六、 ELK+FileBeat +Kafka + Zookeeper構建大資料日誌分析平臺
6.1 架構說明
6.2 環境與角色說明
- 伺服器環境與角色
作業系統統一採用Cent os 7.5版本,各個伺服器角色如下表所示
IP地址 | 主機名 | 角色 | 所屬叢集 |
---|---|---|---|
Filebeat Server | 業務伺服器+filebeat | 業務伺服器叢集 | |
Kafka zk1 | Kafka + Zookeeper | Kafka Broker叢集 | |
Kafka zk1 | |||
Kafka zk1 | |||
Logstash Server | Logstash | 資料轉發 | |
server1 | ES Master、ES DataNode | ES叢集 | |
server2 | ES Master、Kibana | ||
server3 | ES Master、ES DataNode |
- 軟體環境與版本
下表詳細說明了安裝軟體對應的名稱和版本號,其中,ELK三款軟體推薦選擇一樣的版本
軟體名稱 | 版本 | 說明 |
---|---|---|
JDK | Java環境直譯器 | |
File Beat | 前端日誌收集器 | |
Logstash | 日誌收集、過濾轉發 | |
Zookeeper | 資源排程、協助 | |
Kafka | 訊息通訊中介軟體 | |
Elastic Search | 日誌儲存 | |
Kibana | 日誌展示、分析 |
6.3 Kafka 叢集基本命令操作
- 顯示topic列表
bin/kafka-topics.sh --zookeeper 192.168.21.107:2181,192.168.21.108:2181,192.168.21.109:2181 --list
- 建立一個topic,並指定topic屬性(副本數、分割槽數等)
bin/kafka-topics.sh --create --zookeeper 192.168.21.107:2181,192.168.21.108:2181,192.168.21.109:2181 --replication-factor 1 --partitions 3 --topic mytopic
replication: 副本資訊
partitions 數量:與消費者數量有關
- 檢視某個topic的屬性狀態
bin/kafka-topics.sh --describe --zookeeper 192.168.21.107:2181,192.168.21.108:2181,192.168.21.109:2181 --topic mytopic
Topic:mytopic PartitionCount:3 ReplicationFactor:1 Configs:
Topic: mytopic Partition: 0 Leader: 1 Replicas: 1 Isr: 1
Topic: mytopic Partition: 1 Leader: 2 Replicas: 2 Isr: 2
Topic: mytopic Partition: 2 Leader: 0 Replicas: 0 Isr: 0
- 生產訊息
bin/kafka-console-producer.sh --broker-list 192.168.21.107:9092,192.168.21.108:9092,192.168.21.109:9092 --topic mytopic
- 消費訊息
bin/kafka-console-consumer.sh --bootstrap-server 192.168.21.107:9092,192.168.21.108:9092,192.168.21.109:9092 --topic test --from-beginning