一、ELK簡介
ELK 不是一款軟件,而是 Elasticsearch、Logstash 和 Kibana 三種軟件產品的首字母縮寫。這三者都是開源軟件,通常配合使用,而且又先后歸於 Elastic.co 公司名下,所以被簡稱為 ELK Stack。根據 Google Trend 的信息顯示,ELK Stack 已經成為目前最流行的集中式日志解決方案。
Elasticsearch:分布式搜索和分析引擎,具有高可伸縮、高可靠和易管理等特點。基於 Apache Lucene 構建,能對大容量的數據進行接近實時的存儲、搜索和分析操作。通常被用作某些應用的基礎搜索引擎,使其具有復雜的搜索功能;
Logstash:數據收集引擎。它支持動態的從各種數據源搜集數據,並對數據進行過濾、分析、豐富、統一格式等操作,然后存儲到用戶指定的位置;
Kibana:數據分析和可視化平台。通常與 Elasticsearch 配合使用,對其中數據進行搜索、分析和以統計圖表的方式展示;
Filebeat隸屬於Beats。目前Beats包含以下幾種種工具:
- filebeat(搜集日志文件)
- Metricbeat(將系統和服務的指標和統計數據(例如 CPU、內存、Redis 等等)發送至 Elasticsearch(或 Logstash))
- Packetbeat(搜集網絡流量數據)
- Winlogbeat(搜集 Windows 事件日志數據)
- Auditbeat(收集 Linux 審計框架數據,對消息進行解析和標准化,並檢測文件的完整性)
- Topbeat(搜集系統、進程和文件系統級別的 CPU 和內存使用情況等數據)
- Heartbeat(通過主動探測來監控服務可用性)
- Functionbeat(針對雲端數據的無服務器式全新采集器)
二、ELK官方文檔
Elasticsearch:
https://www.elastic.co/cn/products/elasticsearch
https://www.elastic.co/guide/en/elasticsearch/reference/5.6/index.html
Kibana:
https://www.elastic.co/cn/products/kibana
https://www.elastic.co/guide/en/kibana/5.5/index.html
Logstash:
https://www.elastic.co/cn/products/logstash
https://www.elastic.co/guide/en/logstash/5.6/index.html
Filebeat:
https://www.elastic.co/cn/products/beats/filebeat
https://www.elastic.co/guide/en/beats/filebeat/5.6/index.html
elasticsearch中文社區:
https://elasticsearch.cn/
三、ELK多種架構及其優劣
最簡單架構
這是最簡單的一種ELK架構方式。優點是搭建簡單,易於上手。缺點是Logstash耗資源較大,運行占用CPU和內存高。另外沒有消息隊列緩存,存在數據丟失隱患。建議供學習者和小規模集群使用。
在這種架構中,只有一個 Logstash、Elasticsearch 和 Kibana 實例。Logstash 通過輸入插件從多種數據源(比如日志文件、標准輸入 Stdin 等)獲取數據,再經過濾插件加工數據,然后經 Elasticsearch 輸出插件輸出到 Elasticsearch,通過 Kibana 展示。
Logstash作為日志搜集器
這種架構是對上面架構的擴展,把一個 Logstash 數據搜集節點擴展到多個,分布於多台機器,將解析好的數據發送到 Elasticsearch server 進行存儲,最后在 Kibana 查詢、生成日志報表等。這種結構因為需要在各個服務器上部署 Logstash,而它比較消耗 CPU 和內存資源,所以比較適合計算資源豐富的服務器,否則容易造成服務器性能下降,甚至可能導致無法正常工作。
Beats作為日志搜集器
這種架構引入 Beats 作為日志搜集器。目前 Beats 包括六種:
Filebeat(輕量型日志采集器,用於轉發與匯總日志與文件)
Metricbeat(用於從系統和服務收集指標。從 CPU 到內存,從 Redis 到 Nginx,Metricbeat 能夠以一種輕量型的方式,輸送各種系統和服務統計數據。)
Packetbeat(用於深挖網線上傳輸的數據,了解應用程序動態。Packetbeat 是一款輕量型網絡數據包分析器,能夠將數據發送至 Logstash 或 Elasticsearch。);
Winlogbeat(用於密切監控基於 Windows 的基礎架構上發生的事件。Winlogbeat 能夠以一種輕量型的方式,將 Windows 事件日志實時地流式傳輸至 Elasticsearch 和 Logstash。)
Auditbeat(收集您的 Linux 審計框架的數據,監控文件完整性。Auditbeat 實時的采集這些事件,然后發送到 Elastic Stack 用以進一步分析。)
Heartbeat(通過主動探測來監控服務可用性。)
Beats 將搜集到的數據發送到 Logstash,經 Logstash 解析、過濾后,將其發送到 Elasticsearch 存儲,並由 Kibana 呈現給用戶。這種架構解決了 Logstash 在各服務器節點上占用系統資源高的問題。相比 Logstash,Beats 所占系統的 CPU 和內存幾乎可以忽略不計。另外,Beats 和 Logstash 之間支持 SSL/TLS 加密傳輸,客戶端和服務器雙向認證,保證了通信安全。
因此這種架構適合對數據安全性要求較高,同時各服務器性能比較敏感的場景。
引入消息隊列機制的架構
到筆者整理本文時,Beats 還不支持輸出到消息隊列,所以在消息隊列前后兩端只能是 Logstash 實例。這種架構使用 Logstash 從各個數據源搜集數據,然后經消息隊列輸出插件輸出到消息隊列中。目前 Logstash 支持 Kafka、Redis、RabbitMQ 等常見消息隊列。然后 Logstash 通過消息隊列輸入插件從隊列中獲取數據,分析過濾后經輸出插件發送到 Elasticsearch,最后通過 Kibana 展示。
這種架構適合於日志規模比較龐大的情況。但由於 Logstash 日志解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性,但依然存在 Logstash 占用系統資源過多的問題。