ELK 教程 – 高效發(fā)現(xiàn)、分析和可視化你的數(shù)據(jù)

【注】本文譯自:?https://www.edureka.co/blog/elk-stack-tutorial/
隨著越來越多的 IT 基礎(chǔ)設(shè)施轉(zhuǎn)身云計(jì)算,對(duì)公共云安全工具和日志分析平臺(tái)的需求也在迅速增加。不管組織的規(guī)模有多大,每天都會(huì)生成大量的數(shù)據(jù)。這些數(shù)據(jù)中有相當(dāng)一部分是由公司的 Web 服務(wù)器日志組成的。日志是最重要的信息來源之一, 但往往被忽視。每個(gè)日志文件都包含一些寶貴的信息,這些信息大多是非結(jié)構(gòu)化的,沒有任何意義。如果不對(duì)此日志數(shù)據(jù)進(jìn)行詳盡的分析,那么企業(yè)可能會(huì)忽視其周圍的機(jī)會(huì)和威脅。這是日志分析工具非常有用的地方。ELK Stack 或 Elastic Stack 是完整的日志分析解決方案,它有助于深入搜索、分析和可視化不同機(jī)器生成的日志。通過本教程,我將為您提供相關(guān)見解。
首先,讓我們列出要討論的主題:
什么是 ELK Stack?
ELK Stack 架構(gòu)
ELK Stack 安裝
Elasticsearch 教程
Logstash 教程
Kibana 教程
本教程將幫助您一起理解 Elasticsearch、Logstash 和 Kibana 的基礎(chǔ)知識(shí),并幫助您在 ELK Stack 中打下堅(jiān)實(shí)的基礎(chǔ)。
首先讓我們來了解什么是 ELK Stack。
什么是 ELK Stack?
眾所周知的 ELK Stack 最近被更名為 Elastic Stack。它是三個(gè)開源工具的強(qiáng)大集合:Elasticsearch、Logstash 和 Kibana。
這三種不同的產(chǎn)品最常一起用于不同 IT 環(huán)境中的日志分析。使用 ELK Stack,您可以執(zhí)行集中式日志記錄,這有助于識(shí)別 Web 服務(wù)器或應(yīng)用程序的問題。它使您可以在一個(gè)地方搜索所有日志,并通過在特定時(shí)間范圍內(nèi)關(guān)聯(lián)多個(gè)服務(wù)器的日志來識(shí)別跨多個(gè)服務(wù)器的問題。
現(xiàn)在讓我們?cè)敿?xì)討論這些工具。
Logstash
Logstash 是數(shù)據(jù)收集管道工具。它是 ELK Stack 的第一個(gè)組件,它收集數(shù)據(jù)輸入并將其輸入到 Elasticsearch。它可以一次從不同來源收集各種類型的數(shù)據(jù),并立即提供以備將來使用。
Elasticsearch
Elasticsearch 是基于 Lucene 搜索引擎的 NoSQL 數(shù)據(jù)庫,并使用 RESTful API 構(gòu)建。它是一個(gè)高度靈活的分布式搜索和分析引擎。此外,它通過水平可伸縮性提供了簡(jiǎn)單的部署、最大的可靠性和易于管理的功能。它提供高級(jí)查詢以執(zhí)行詳細(xì)分析,并集中存儲(chǔ)所有數(shù)據(jù)以快速搜索文檔。
Kibana
Kibana 是一種數(shù)據(jù)可視化工具。它用于可視化 Elasticsearch 文檔,并幫助開發(fā)人員立即對(duì)其進(jìn)行深入了解。Kibana 儀表板提供了各種交互式圖表、地理空間數(shù)據(jù)、時(shí)間線和圖表,以可視化使用 Elasticsearch 完成的復(fù)雜查詢。使用 Kibana,您可以根據(jù)自己的特定需求創(chuàng)建和保存自定義圖形。
下一部分將討論 ELK Stack 架構(gòu)以及其中的數(shù)據(jù)流向。
ELK Stack 架構(gòu)
以下是 ELK Stack 的架構(gòu),顯示了 ELK 中日志流的正確順序。在此,Logstash 會(huì)根據(jù)提供的過濾條件來收集和處理從各種來源生成的日志。然后,Logstash 將這些日志通過管道傳輸?shù)?Elasticsearch,然后 Elasticsearch 分析和搜索數(shù)據(jù)。最后,使用 Kibana,可以根據(jù)要求對(duì)日志進(jìn)行可視化和管理。

ELK Stack 安裝
第 I 步:打開https://www.elastic.co/downloads.

第 II 步:選擇并下載 Elasticsearch。
第 III 步:選擇并下載 Kibana.
第 IV 步:選擇并下載 Logstash.
第 V 步:解壓縮所有三個(gè)文件以獲取對(duì)應(yīng)文件夾的文件。

安裝 Elasticsearch
第 VI 步:現(xiàn)在打開?elasticsearch 文件夾?并轉(zhuǎn)到?bin 文件夾.
第 VII 步:雙擊 elasticsearch.bat 文件以啟動(dòng) elasticsearch 服務(wù)器。

第 VIII 步:等待 elasticsearch 服務(wù)器啟動(dòng)。
第 IX 步:要檢查服務(wù)器是否已啟動(dòng),請(qǐng)轉(zhuǎn)到瀏覽器并鍵入?localhost:9200。

安裝 Kibana
第 X 步:現(xiàn)在打開?kibana?文件夾?并轉(zhuǎn)到?bin 文件夾。
第 XI 步:雙擊 kibana.bat 文件以啟動(dòng) kibana 服務(wù)器。

STEP XII:?等待 kibana 服務(wù)器啟動(dòng)。
STEP XIII:?要檢查服務(wù)器是否已啟動(dòng),請(qǐng)轉(zhuǎn)到瀏覽器并鍵入?localhost:5601。

安裝 Logstash
第 XIV 步:現(xiàn)在打開?logstash 文件夾。
第 XV 步:要測(cè)試您的 logstash 安裝,請(qǐng)打開命令提示符,然后轉(zhuǎn)到 logstash 文件夾。現(xiàn)在輸入:
binlogstash -e 'input { stdin { } } output { stdout {} }'
第 XVI 步:等待,直到命令提示符上顯示“ Pipeline main started”出現(xiàn)在命令提示符下。

第 XVII 步:現(xiàn)在,在命令提示符下輸入一條消息,然后按 Enter 鍵。
第 XVIII 步:Logstash 將時(shí)間戳和 IP 地址信息附加到消息中,并將其顯示在命令提示符下。
既然我們完成了安裝,那么現(xiàn)在讓我們更深入地研究這些工具。讓我們從 Elasticsearch 開始。
Elasticsearch
如前所述,Elasticsearch 是一個(gè)高度可擴(kuò)展的搜索引擎,它運(yùn)行在基于 Java 的 Lucene 引擎之上。它基本上是一個(gè) NoSQL 數(shù)據(jù)庫。這意味著它將以非結(jié)構(gòu)化格式存儲(chǔ)數(shù)據(jù),并且無法對(duì)任何類型的交易執(zhí)行 SQL 查詢。換句話說,它將數(shù)據(jù)存儲(chǔ)在文檔中,而不是表和模式中。為了獲得更好的圖像,請(qǐng)檢查下表,該表顯示了與數(shù)據(jù)庫相比在 Elasticsearch 中的內(nèi)容。

現(xiàn)在讓我們熟悉 Elasticsearch 的基本概念。
使用 Elasticsearch 時(shí),需要遵循三個(gè)主要步驟:
索引
映射
搜索
讓我們一個(gè)一個(gè)詳細(xì)地談?wù)劇?/p>
索引
索引編制是添加數(shù)據(jù) Elasticsearch 的過程。之所以稱為“索引”,是因?yàn)閷?shù)據(jù)輸入到 Elasticsearch 中后,它將被放入 Apache Lucene 索引中。然后,Elasticsearch 使用這些 Lucene 索引來存儲(chǔ)和檢索數(shù)據(jù)。索引編制與 CRUD 操作的創(chuàng)建和更新過程相似。
索引方案由?名稱/類型/ id?組成,其中名稱和類型是必填字段。 如果您不提供任何 ID,Elasticsearch 將自己提供一個(gè) ID。 然后,將整個(gè)查詢附加到 HTTP PUT 請(qǐng)求中,最終 URL 如下:PUT name/type/id?與 HTTP 有效負(fù)載一起,還將發(fā)送包含字段和值的 JSON 文檔。
以下是創(chuàng)建一個(gè)美國客戶的文檔的示例,該文檔及其字段中的詳細(xì)信息。
PUT?/customer/US/1?
{
????"ID":?101,
????"FName":?"James",
????"LName":?"Butt",
????"Email":?"jbutt@gmail.com",
????"City":?"New?Orleans",
????"Type":?"VIP"
}
它會(huì)給你以下輸出:

這里顯示文檔已創(chuàng)建并添加到索引中。
現(xiàn)在,如果您嘗試在不更改標(biāo)識(shí)的情況下更改字段詳細(xì)信息,Elasticsearch 將使用當(dāng)前詳細(xì)信息覆蓋現(xiàn)有文檔。
PUT?/customer/US/1
{
????"ID":?101,
????"FName":?"James",
????"LName":?"Butt",
????"Email":?"jbutt@yahoo.com",
????"City":?"Los?Angeles",
????"Type":?"VVIP"
}

這里顯示文檔已經(jīng)更新了索引的新細(xì)節(jié)。
映射
映射是設(shè)置索引模式的過程。通過映射,您可以告訴 Elasticsearch 你的模式中屬性的數(shù)據(jù)類型。如果在預(yù)索引時(shí)未針對(duì)特定對(duì)象進(jìn)行映射,則 Elasticsearch 將動(dòng)態(tài)地將泛型類型添加到該字段。但是這些泛型類型是非常基本的,大多數(shù)時(shí)候都不能滿足查詢的期望。
現(xiàn)在讓我們嘗試映射查詢。
PUT?/customer/
{
????"mappings":?{
????????"US":?{
????????????"properties":?{
????????????????"ID":?{
????????????????????"type":?"long"
????????????????},
????????????????"FName":?{
????????????????????"type":?"text"
????????????????},
????????????????"LName":?{
????????????????????"type":?"text"
????????????????},
????????????????"Email":?{
????????????????????"type":?"text"
????????????????},
????????????????"City":?{
????????????????????"type":?"text"
????????????????},
????????????????"Type":?{
????????????????????"type":?"text"
????????????????}
????????????}
????????}
????}
}

當(dāng)您執(zhí)行查詢時(shí),您將獲得這種類型的輸出。
搜索
具有特定索引和類型的一般搜索查詢?nèi)缦拢?strong>POST index/type/_search
現(xiàn)在,讓我們嘗試搜索“customer”索引中存在的所有客戶的詳細(xì)信息。
POST /customer/US/_search
當(dāng)您執(zhí)行此查詢時(shí),將生成以下結(jié)果:

但是,當(dāng)您要搜索特定結(jié)果時(shí),Elasticsearch 提供了三種方法:
使用查詢
使用查詢,您可以搜索一些特定的文檔或條目。例如,讓我們對(duì)屬于“ VVIP”類別的客戶執(zhí)行搜索查詢。
POST?/customer/US/_search
{
????"query":?{
????????"match":?{
????????????"Type":?"VVIP"
????????}
????}
}

使用過濾器
使用過濾器,您可以進(jìn)一步縮小搜索范圍。以下是搜索 ID 為“ 101”的 VVIP 客戶的示例:
POST?/customer/_search
{
????"query":?{
????????"match":?{
????????????"Type":?"VVIP"
????????}
????},
????"post_filter":?{
????????"match":?{
????????????"ID":?101
????????}
????}
}
如果執(zhí)行此查詢,則會(huì)得到以下結(jié)果:

使用聚合
聚合是一個(gè)框架,可幫助通過搜索查詢聚合數(shù)據(jù)。小型聚合可以結(jié)合在一起,以構(gòu)建所提供數(shù)據(jù)的復(fù)雜摘要。讓我們執(zhí)行一個(gè)簡(jiǎn)單的匯總,以檢查索引中有多少類型的客戶:
POST?/customer/_search
{
????"size":?0,
????"aggs":?{
????????"Cust_Types":?{
????????????"terms":?{
????????????????"field":?"Type.keyword"
????????????}
????????}
????}
}

現(xiàn)在讓我們看看如何從索引中檢索數(shù)據(jù)集。
獲取數(shù)據(jù)
要檢查索引中包含的文檔列表,您只需要發(fā)送以下格式的 HTTP GET 請(qǐng)求:GET index/type/id
讓我們嘗試檢索“ id”等于 2 的客戶的詳細(xì)信息:
GET /customer/US/2
成功執(zhí)行后,它將為您提供以下類型的結(jié)果。

使用 Elasticsearch,您不僅可以瀏覽數(shù)據(jù),還可以刪除或刪除文檔。
刪除數(shù)據(jù)
使用刪除約定,您可以輕松地從索引中刪除不需要的數(shù)據(jù)并釋放內(nèi)存空間。要?jiǎng)h除任何文檔,您需要以以下格式發(fā)送 HTTP DELETE 請(qǐng)求:DELETE index/type/id.
現(xiàn)在讓我們嘗試刪除 ID 為 2 的客戶的詳細(xì)信息。
DELETE /customer/US/2
執(zhí)行此查詢時(shí),您將獲得以下類型的結(jié)果。

至此,我們講解了使用 Elasticsearch 的 CRUD 操作的基礎(chǔ)知識(shí),了解這些基本操作將幫助您執(zhí)行不同類型的搜索。
現(xiàn)在讓我們開始學(xué)習(xí) ELK Stack 的下一個(gè)工具 Logstash。
Logstash
正如我已經(jīng)討論的那樣,Logstash 是一種管道工具,通常用于收集和轉(zhuǎn)發(fā)日志或事件。它是一個(gè)開源數(shù)據(jù)收集引擎,可以動(dòng)態(tài)集成來自各種來源的數(shù)據(jù)并將其標(biāo)準(zhǔn)化到指定的目標(biāo)位置。

使用多個(gè)輸入,過濾器和輸出插件,Logstash 可以輕松轉(zhuǎn)換各種事件。至少,Logstash 需要在其配置文件中指定的輸入和輸出插件來執(zhí)行轉(zhuǎn)換。以下是 Logstash 配置文件的結(jié)構(gòu):
input?{
????...
}
filter?{
????...
}
output?{
????...
}
如您所見,整個(gè)配置文件分為三個(gè)部分,每個(gè)部分都包含一個(gè)或多個(gè)插件的配置選項(xiàng)。這三個(gè)部分是:
input(輸入)
filter (過濾)
output (輸出)
您也可以在配置文件中應(yīng)用多個(gè)過濾器。在這種情況下,其應(yīng)用程序順序?qū)⑴c配置文件中的規(guī)范順序相同。
現(xiàn)在,讓我們嘗試配置 CSV 文件格式的美國客戶數(shù)據(jù)集文件。
input?{
????file?{
????????path?=>?"E:/ELK/data/US_Customer_List.csv"
????????start_position?=>?"beginning"
????????sincedb_path?=>?"/dev/null"
????}
}
filter?{
????csv?{
????????separator?=>?","
????????columns?=>?["Cust_ID",?"Cust_Fname",?"Cust_Lname",?"Cust_Email",?"Cust_City",?"Cust_Type"]
????}
????mutate?{
????????convert?=>?["Cust_ID",?"integer"]
????}
}
output?{
????elasticsearch?{
????????hosts?=>?"localhost"
????????index?=>?"customers"
????????document_type?=>?"US_Based_Cust"
????}
????stdout?{}
}
要將這個(gè) CSV 文件數(shù)據(jù)插入 elasticsearch 中,您必須通知 Logstash 服務(wù)器。
為此,請(qǐng)執(zhí)行以下步驟:
打開命令提示符
進(jìn)入 Logstash 的 bin 目錄
輸入:logstash?–f X:/foldername/config_filename.config?然后按回車。一旦您的 logstash 服務(wù)器啟動(dòng)并運(yùn)行,它將開始將文件中的數(shù)據(jù)傳輸?shù)?Elasticsearch 中。

如果要檢查是否成功插入了數(shù)據(jù),請(qǐng)轉(zhuǎn)到 Sense 插件并鍵入:
GET /customers/
它會(huì)為您提供已創(chuàng)建的文檔數(shù)。
現(xiàn)在,如果要可視化此數(shù)據(jù),則必須使用 ELK Stack 的最后一個(gè)工具,即 Kibana。因此,在本教程的下一部分中,我將討論 Kibana 及其使用方式,以可視化您的數(shù)據(jù)。
Kibana
如前所述,Kibana 是一個(gè)開源的可視化和分析工具。它有助于可視化 Logstash 管道傳輸并存儲(chǔ)到 Elasticsearch 中的數(shù)據(jù)。您可以使用 Kibana 來搜索,查看此存儲(chǔ)的數(shù)據(jù)并與之交互,然后在各種圖表,表格和地圖中對(duì)其進(jìn)行可視化。Kibana 的基于瀏覽器的界面簡(jiǎn)化了海量數(shù)據(jù)并反映了 Elasticsearch 查詢中的實(shí)時(shí)變化。此外,您還可以輕松創(chuàng)建、自定義、保存和共享儀表板。
一旦您了解了如何與 Elasticsearch 和 Logstash 一起使用,學(xué)習(xí) Kibana 就不是什么大事了。在本教程的這一部分,我將向您介紹為了對(duì)數(shù)據(jù)進(jìn)行分析所需的各種功能。
管理頁面
在這里,您必須執(zhí)行 Kibana 的運(yùn)行時(shí)配置。 在此頁面中,您需要指定一些搜索內(nèi)容。請(qǐng)參見以下示例,在該示例中,我已經(jīng)配置了“customer”索引的條目。

如您所見,在“索引模式(Index Patterns)”字段中,您需要指定要使用的索引。確保在“時(shí)間過濾器字段名稱”中將其選擇為 @timestamp。然后,您可以繼續(xù)并單擊創(chuàng)建以創(chuàng)建索引。如果索引創(chuàng)建成功,您將看到以下頁面類型:

在這里,您可以根據(jù)需要從下拉列表中選擇不同的過濾器。此外,要釋放內(nèi)存,您還可以刪除特定的索引。
發(fā)現(xiàn)頁面?
通過“發(fā)現(xiàn)”頁面,您可以訪問存在于每個(gè)與所選索引模式匹配的每個(gè)索引的文檔。 您可以輕松地交互和瀏覽 Kibana 服務(wù)器上存在的所有數(shù)據(jù)。 此外,您可以查看文檔中存在的數(shù)據(jù)并對(duì)其進(jìn)行搜索查詢。 下面你可以看到,我正在搜索來自“洛杉磯”的“ VIP”客戶。

因此,如您所見,我們只有一位來自洛杉磯的 VIP 客戶。
可視化頁面?
? ?可視化頁面使您可以可視化以圖表、條形圖、餅圖等形式顯示在 Elasticsearch 索引中的數(shù)據(jù)。您甚至可以在此處構(gòu)建儀表板,這些儀表板將基于 Elasticsearch 查詢顯示相關(guān)的可視化效果。通常,使用一系列 Elasticsearch 聚合查詢來提取和處理數(shù)據(jù)。當(dāng)您轉(zhuǎn)到“可視化”頁面并搜索保存的可視化時(shí),或者可以創(chuàng)建一個(gè)新的可視化。 您可以以任何形式匯總數(shù)據(jù)。為了方便用戶,提供了不同類型的可視化選項(xiàng)。

讓我向您展示如何根據(jù)用戶類型可視化美國客戶數(shù)據(jù)。

要執(zhí)行可視化,請(qǐng)按照以下步驟操作:
選擇可視化類型。 [這里我用的是餅圖]
在匯總字段中,從下拉列表中選擇“術(shù)語(term)”。
在“字段(field)”中,選擇要執(zhí)行搜索的字段類型。
您還可以指定可視化的順序和大小。
現(xiàn)在單擊執(zhí)行按鈕以生成餅圖。
儀表盤頁面
“儀表板”頁面顯示已保存的可視化的集合。在這里,您可以添加新的可視化效果,也可以使用任何保存的可視化效果。

Timelion 頁面?
Timelion 是一個(gè)時(shí)間序列數(shù)據(jù)可視化工具,它將完全獨(dú)立的數(shù)據(jù)源整合到一個(gè)界面中。 它由一種單行表達(dá)語言驅(qū)動(dòng),可用于檢索時(shí)間序列數(shù)據(jù),執(zhí)行計(jì)算以簡(jiǎn)化復(fù)雜問題并可視化結(jié)果。

開發(fā)工具頁面
Kibana 的“開發(fā)工具”頁面包含諸如“ Beta Sense”插件之類的開發(fā)工具,可用于與 Elasticsearch 中存在的數(shù)據(jù)進(jìn)行交互。它通常被稱為 Kibana 的控制臺(tái)。以下是一個(gè)示例,其中我使用了 Kibana 的 Sense 插件來搜索類型為“ US_based_cust”的“客戶(customers)”索引:

本文到此結(jié)束。現(xiàn)在,您可以使用 Logstash、Elasticsearch 和 Kibana 對(duì)任何數(shù)據(jù)執(zhí)行各種搜索和分析。