1、什么是日志
日志就是程序產生的,遵循一定格式(通常包含時間戳)的文本數據。
通常日志由服務器生成,輸出到不同的文件中,一般會有系統日志、 應用日志、安全日志。這些日志分散地存儲在不同的機器上。
1.1、 日志的重要性
日志主要包括系統日志、應用程序日志和安全日志。系統運維和開發人員可以通過日志了解服務器軟硬件信息、檢查配置過程中的錯誤及錯誤發生的原因。經常分析日志可以了解服務器的負荷,性能安全性,從而及時采取措施糾正錯誤。
日志數據在以下幾方面具有非常重要的作用:
數據查找:通過檢索日志信息,定位相應的 bug ,找出解決方案
服務診斷:通過對日志信息進行統計、分析,了解服務器的負荷和服務運行狀態
數據分析:可以做進一步的數據分析,比如根據請求中的商品id ,找出 TOP10 用戶感興趣商品。
1.2、存在的問題
通常,日志被分散的儲存不同的設備上。如果你管理數十上百台服務器,你還在使用依次登錄每台機器的傳統方法查閱日志。這樣是不是感覺很繁瑣和效率低下。當務之急我們使用集中化的日志管理,例如:開源的syslog,將所有服務器上的日志收集匯總。集中化管理日志后,日志的統計和檢索又成為一件比較麻煩的事情,一般我們使用grep、awk和wc等Linux命令能實現檢索和統計,但是對於要求更高的查詢、排序和統計等要求和龐大的機器數量依然使用這樣的方法難免有點力不從心。
1.3、如何解決
開源實時日志分析ELK平台能夠完美的解決我們上述的問題,ELK是一個成熟的日志系統,主要功能有日志的收集、分析、檢索。ELK由ElasticSearch、Logstash和Kibana三個開源工具組成。這三個工具組合形成了一套實用、易用的日志管理平台,可抓取系統日志、apache日志、nginx日志、mysql日志等多種日志類型,目前很多公司用它來搭建可視化的集中式日志分析平台。
2、ELK關系
ELK這三個開源工具的關系,簡單來說就是logstatsh 收集日志,存到elasticserach (存儲,產生索引,搜索),再由kibana展現(view)。
Elasticsearch:是個開源分布式搜索引擎,提供搜索、分析、存儲數據三大功能。它主要負責將logstash抓取來的日志數據索引並存儲起來。它的特點有:分布式,零配置,自動發現,索引自動分片,索引副本機制,restful風格接口,多數據源,自動搜索負載等。數據以JSON文檔的格式存儲索引,不需要預先規定范式。
Logstash :主要是用來日志的搜集、分析、過濾日志的工具,支持大量的數據獲取方式。一般工作方式為c/s架構,client端安裝在需要收集日志的主機上,server端負責將收到的各節點日志進行過濾、修改等操作在一並發往elasticsearch上去。其實logstash是可以被別的替換,比如常見的fluented。
Kibana :也是一個開源和免費的工具,Kibana可以為 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面,可以幫助你匯總、分析和搜索重要數據日志。
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana , 它們都是開源軟件。新增了一個FileBeat,它是一個輕量級的日志收集處理工具(Agent),Filebeat占用資源少,適合於在各個服務器上搜集日志后傳輸給Logstash,官方也推薦此工具。
官方網站:https://www.elastic.co/products
擴展:ElasticSearch和傳統數據庫的術語對比
3、ELK 優點
通俗來講,ELK是由Elasticsearch、Logstash、Kibana 三個開源軟件的組成的一個組合體,這三個軟件當中,每個軟件用於完成不同的功能,ELK又稱為ELK stack,官方域名為stactic.co,ELK stack的主要優點有如下幾個:
處理方式靈活: elasticsearch是實時全文索引,具有強大的搜索功能
配置相對簡單:elasticsearch全部使用JSON 接口,logstash使用模塊配置,kibana的配置文件部分更簡單。
檢索性能高效:基於優秀的設計,雖然每次查詢都是實時,但是也可以達到百億級數據的查詢秒級響應。
集群線性擴展:elasticsearch和logstash都可以靈活線性擴展
前端操作絢麗:kibana的前端設計比較絢麗,而且操作簡單。Kibana 界面上,只需要點擊鼠標,就可以完成搜索、聚合功能,生成炫麗的儀表板。
4、ELK應用場景
1、分布式部署項目,需要收集日志。
2、微服務架構項目,收集各個服務的日志。
3、大數據行業。
ELK組件在大數據運維系統中,主要可解決的問題如下:
n 日志查詢,問題排查,上線檢查
n 服務器監控,應用監控,錯誤報警,Bug管理
n 性能分析,用戶行為分析,安全漏洞分析
5、ELK常見的幾種架構體系
5.1、 Elasticsearch + Logstash + Kibana
此架構由Logstash分布於各個節點上搜集相關日志、數據,並經過分析、過濾后發送給遠端服務器上的Elasticsearch進行存儲。Elasticsearch將數據以分片的形式壓縮存儲並提供多種API供用戶查詢,操作。用戶亦可以更直觀的通過配置Kibana Web方便的對日志查詢,並根據數據生成報表。
這是最簡單的一種ELK架構方式。優點是搭建簡單,易於上手。缺點是Logstash耗資源較大,運行占用CPU和內存高。另外沒有消息隊列緩存,存在數據丟失隱患。
5.2、 Elasticsearch + Logstash + filebeat + Kibana
與上一種架構相比,這種架構增加了一個filebeat模塊。filebeat是一個輕量的日志收集代理,用來部署在客戶端,優勢是消耗非常少的資源(較logstash), 所以生產中,往往會采取這種架構方式,此種架構將收集端logstash替換為beats,更靈活,消耗資源更少,擴展性更強。同時可配置Logstash 和Elasticsearch 集群用於支持大集群系統的運維日志數據監控和查詢。但是這種架構有一個缺點,沒有消息隊列緩存,當logstash出現故障,會造成日志的丟失。
輕量級日志采集框架Beats,其中包含以下6種:
5.3、 Elasticsearch + Logstash + filebeat + redis(kafka)+ Kibana
說明:
logstash節點和elasticsearch節點可以根據日志量伸縮節點數量, filebeat部署在每台需要收集日志的服務器上。
此種架構引入了消息隊列機制,位於各個節點上的beats先將數據/日志傳遞給消息隊列(kafka、redis、rabbitMQ等),logstash從消息隊列取數據進行過濾、分析后將數據傳遞給Elasticsearch存儲。最后由Kibana將日志和數據呈現給用戶。因為引入了Kafka(或者Redis),所以即使遠端Logstash server因故障停止運行,數據將會先被存儲下來,從而避免數據丟失。
注:Beats還不支持輸出到消息隊列,新版本除外:5.0版本及以上
工作流程:Filebeat采集—>發到kafka—> logstash處理從kafka緩存的數據進行分析—> 輸出到es—> 顯示在kibana
多個獨立的agent(filebeat)負責收集不同來源的數據,一個中心agent(logstash)負責匯總和分析數據,在中心agent前的Broker(使用kafka/redis實現)作為緩沖區,中心agent后的ElasticS,前端的Kibana提供豐富的圖表展示。
filebeat表示日志收集,使用filebeat收集各種來源的日志數據,可以是系統日志、文件、redis、mq等等;
Broker作為遠程agent與中心agent之間的緩沖區,使用kafka/redis實現,一是可以提高系統的性能,二是可以提高系統的可靠性,當中心agent提取數據失敗時,數據保存在kafka/redis中,而不至於丟失;
中心agent也是LogStash,從Broker中提取數據,可以執行相關的分析和處理(Filter);
ElasticSearch用於存儲最終的數據,並提供搜索功能;
Kibana提供一個簡單、豐富的web界面,數據來自於ElasticSearch,支持各種查詢、統計和展示。
這種模式特點:這種架構適合於日志規模比較龐大的情況。但由於 Logstash 日志解析節點和 Elasticsearch 的負荷比較重,可將他們配置為集群模式,以分擔負荷。引入消息隊列,均衡了網絡傳輸,從而降低了網絡閉塞,尤其是丟失數據的可能性。
6、ELK有兩種安裝方式
(1)集成環境:Logstash有一個集成包,里面包括了其全套的三個組件;也就是安裝一個集成包。
(2)獨立環境:三個組件分別單獨安裝、運行、各司其職。(比較常用)
7、官網地址