為什么需要ELK
一般我們在工作中查詢?nèi)罩舅阉鲉栴}時(shí),通常需要直接在日志文件中進(jìn)行g(shù)rep、awk 操作就可以獲得自己想要的信息。但在規(guī)模較大的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。隨著微服務(wù)的廣泛應(yīng)用,無論系統(tǒng)日志,還是業(yè)務(wù)日志都更進(jìn)一步了。運(yùn)維或者開發(fā)們發(fā)現(xiàn)要從這么大規(guī)模的系統(tǒng)中(幾百個(gè)上千個(gè)服務(wù))產(chǎn)生的千億規(guī)模日志去排查問題,簡直是難于上青天啊。而ELK的出現(xiàn)解決了這個(gè)痛點(diǎn),他是個(gè)開源分布式搜索引擎,提供搜集、分析、存儲數(shù)據(jù)三大功能。它的特點(diǎn)有:分布式,零配置,自動發(fā)現(xiàn),索引自動分片,索引副本機(jī)制,restful風(fēng)格接口,多數(shù)據(jù)源,自動搜索負(fù)載等。ELK elasticsearch, logstash, kibana三個(gè)開源工具的簡稱,一般用于搭建日志分析系統(tǒng)。
elasticsearch是核心,是一個(gè)分布式搜索引擎,查詢速度快,提供數(shù)據(jù)的存儲和檢索。
logstash負(fù)責(zé)數(shù)據(jù)的收集和處理,目前多使用一個(gè)更加輕量級的工具filebeat進(jìn)行收集數(shù)據(jù)。
kibana用于可視化展示elasticsearch中的數(shù)據(jù),并提供一些操作。
ELK基礎(chǔ)架構(gòu)如下:
這是最簡單的一種ELK架構(gòu)方式。優(yōu)點(diǎn)是搭建簡單,易于上手。缺點(diǎn)是Logstash耗資源較大,運(yùn)行占用CPU和內(nèi)存高。另外沒有消息隊(duì)列緩存,存在數(shù)據(jù)丟失隱患。此架構(gòu)由Logstash分布于各個(gè)節(jié)點(diǎn)上搜集相關(guān)日志、數(shù)據(jù),并經(jīng)過分析、過濾后發(fā)送給遠(yuǎn)端服務(wù)器上的Elasticsearch進(jìn)行存儲。Elasticsearch將數(shù)據(jù)以分片的形式壓縮存儲并提供多種API供用戶查詢,操作。用戶亦可以更直觀的通過配置Kibana Web方便的對日志查詢,并根據(jù)數(shù)據(jù)生成報(bào)表。
?ELK架構(gòu)的改進(jìn)如下:
此種架構(gòu)將收集端logstash替換為beats,更靈活,消耗資源更少,擴(kuò)展性更強(qiáng)。同時(shí)可配置Logstash 和Elasticsearch 集群用于支持大集群系統(tǒng)的運(yùn)維日志數(shù)據(jù)監(jiān)控和查詢。
總結(jié):大家可以簡單的理解為,我們需要在應(yīng)用上安裝一個(gè)東東(可以是logstash或者filebeat)負(fù)責(zé)收集應(yīng)用上的日志,然后elasticsearch負(fù)責(zé)對日志進(jìn)行處理,最后用戶通過kibana來對日志進(jìn)行查詢操作,對于我們使用者來講,我們只需要關(guān)注kibana的使用即可,核心目的就是快速地在海量應(yīng)用里找到我們所需的日志信息!關(guān)于ELK的環(huán)境搭建這里就不多說了,我在這里重點(diǎn)講解以下,在微服務(wù)的測試過程中,如何利用ELK來幫助我們分析和定位問題。
Kibana的使用
我們用 Kibana 來搜索,查看存儲在 Elasticsearch 索引中的數(shù)據(jù)并與之交互。通過Kibana可以很容易實(shí)現(xiàn)高級的數(shù)據(jù)分析和可視化,以圖表的形式展現(xiàn)出來。對與測試人員來講,我們用的最多的就是日志索搜功能。單擊側(cè)面導(dǎo)航中的 Discover 進(jìn)入 Kibana 的數(shù)據(jù)探索功能:
?Kibana中的常用查詢:
要搜索一個(gè)確切的字符串,需要使用雙引號引起來。如果不帶引號,將會匹配每個(gè)單詞。
例子:message:"登錄成功"
多條件查詢用 AND OR連接?例如:192.168.1.181 AND 更新??"登錄成功" OR "操作成功"
支持正則 例如 *error*,包含error的字段。
返回查詢 允許一個(gè)字段值在某個(gè)區(qū)間。[] 包含該值,{}不包含。
舉個(gè)栗子:
1.只知道應(yīng)用名,要查詢此應(yīng)用的某異常信息,如何操作?
搜索框輸入 weixin AND "異常信息"
2.想檢查某應(yīng)用中是否有SQL異常?weixin AND *SQLException*?
異常關(guān)鍵字:IOException、SQLException、JDBCException、sqlnestedException、socketException、ClassNotFoundException、 *UnknownHostException*
原創(chuàng)不易,如果文章幫到了你,歡迎轉(zhuǎn)發(fā)和點(diǎn)贊,讓更多的朋友受益!