ELK入门——ELK详细介绍(ELK概念和特点、Elasticsearch/Logstash/beats/kibana安装及使用介绍、插件介绍)
目錄
主要參考鏈接
一、什么是ELK(端口9200)
主要特點:
1.存儲:面向文檔+JSON
2.檢索:倒排+樂觀鎖
3.分析:監控+預警+可視化
4.支持集群
二、Logstash(端口5044)
三、Beats
四、Kibana+插件
1.ES-head插件(localhost:9100)
2.Kibana(localhost:5601)
(1)Stack Management
(2)Discover
(3)DashBoard+Visualize
(4)Dev tools
(5)Stack Monitoring(堆棧監測)
(6)APM(已安裝,未部署jar包)
(7)App/Workplace Search(企業功能,未實現)
3.cerebro插件(localhost:9000)
4.bigdesk插件(localhost:8000)
5.IK分詞器插件
五、其他功能(未嘗試)
主要參考鏈接
ES內容大全(Elastic中國社區官方博客)
ES視頻教程(Elastic中國社區官方博客)
Elastic相關軟件和插件(官網)
ES中文社區(討論和提問)
我的ELK專欄
《鳥哥的Linux私房菜》
《Linux命令行大全》(The Linux Command Line by William E. Shotts, Jr.)中英雙語版
Linux常用命令
文中所有其他鏈接型文字都可以單擊跳轉,大多為其他參考博客或我的專欄博客
一、什么是ELK(端口9200)
ELK學習總結——我們為什么要用ELK
一般我們需要進行日志分析場景:直接在日志文件中 grep、awk 就可以獲得自己想要的信息。但在規模較大的場景中,此方法效率低下,面臨問題包括日志量太大如何歸檔、文本搜索太慢怎么辦、如何多維度查詢。需要集中化的日志管理,所有服務器上的日志收集匯總。常見解決思路是建立集中式日志收集系統,將所有節點上的日志統一收集,管理,訪問。
一般大型系統是一個分布式部署的架構,不同的服務模塊部署在不同的服務器上,問題出現時,大部分情況需要根據問題暴露的關鍵信息,定位到具體的服務器和服務模塊,構建一套集中式日志系統,可以提高定位問題的效率。一個完整的集中式日志系統,需要包含以下幾個主要特點:
-
收集-能夠采集多種來源的日志數據
-
傳輸-能夠穩定的把日志數據傳輸到中央系統
-
存儲-如何存儲日志數據
-
分析-可以支持 UI 分析
-
警告-能夠提供錯誤報告,監控機制
ELK提供了一整套解決方案,并且都是開源軟件,之間互相配合使用,完美銜接,高效的滿足了很多場合的應用。是目前主流的一種日志系統。
(1)ELK
ElasticSearch工作原理以及專用名詞
ELK是Elasticsearch(ES) , Logstash, Kibana的結合,是一個開源日志收集軟件。
Elasticsearch(ES):開源分布式搜索引擎,提供搜集、分析、存儲數據功能。
Logstash:日志搜集、分析、過濾,支持大量數據獲取。其自帶輸入(input)、過濾語法(grok)、輸出(output)三部分。其輸入有兩種方式:①由各beat采集器輸入,經過濾后輸出到ES ②本機數據輸入,經過濾后輸出到ES。
Kibana:提供日志分析友好的 Web 界面。數據存儲到ES中后,可以在Kibana頁面上增刪改查,交互數據,并生成各種維度表格、圖形。
新增的Filebeat是一個輕量級的日志收集處理工具(Agent),占用資源少,官方也推薦此工具。還有其他beat等,可以在各服務器上搜集信息,傳輸給Logastash。
總的來說就是:beats+Logstash收集,ES存儲,Kibana可視化及分析。下面分別是單機和集群的示意圖(集群中也可以采用多beats)。
(我們的集群目前未使用Kafka)
更多術語參見其他人的博客:
ELK合集(該專欄的3-14為關鍵術語內容)
(2)安裝
一般來說,各個部件的安裝過程就是:下載→修改配置文件(xx.yml或xx.conf)→啟動。
在我們的內網已經完成了Elasticsearch集群搭建,過程未記錄,可以直接使用。
以下提供了單機的安裝過程,便于對ELK和beats的理解。
ELK單機安裝過程
主要特點:
1.存儲:面向文檔+JSON
(1)面向文檔
Elasticsearch是面向文檔(document oriented)的,這意味著它可以存儲整個對象或文檔(document)。然而它不僅僅是存儲,還會索引(index)每個文檔的內容使之可以被搜索。在Elasticsearch中,你可以對文檔(而非成行成列的數據)進行索引、搜索、排序、過濾。這種理解數據的方式與以往完全不同,這也是Elasticsearch能夠執行復雜的全文搜索的原因之一。
(2)JSON
ELasticsearch使用Javascript對象符號(JavaScript Object Notation),也就是JSON,作為文檔序列化格式。JSON現在已經被大多語言所支持,而且已經成為NoSQL領域的標準格式。它簡潔、簡單且容易閱讀。盡管原始的user對象很復雜,但它的結構和對象的含義已經被完整的體現在JSON中了,在Elasticsearch中將對象轉化為JSON并做索引要比在表結構中做相同的事情簡單的多。傳統數據庫有表名.字段.,屬性 然后對應下面行為數據,但是在es中不區分,統一將一行數據轉換為json格式進行存儲,所以es中存儲非格式化的方式
2.檢索:倒排+樂觀鎖
(1)倒排
倒排是一種索引方法,用來存儲在全文檢索下某個單詞在一個/組文檔中的存儲位置,也常被稱為反向索引、置入檔案或反向檔案。也是ES為何具有高檢索性能的原因。
-
一般的正向索引
一般的正向索引要搜索某個單詞,是遍歷文檔,檢查文檔中是否有這個單詞。
| ? | ? |
|---|---|
| 文檔1 | [單詞1,單詞2] |
| 文檔2 | [單詞1,單詞2,單詞3] |
-
倒排索引
而倒排索引是建立一個映射關系,確定單詞屬于哪幾個文檔
| ? | ? |
|---|---|
| 單詞1 | [文檔1,文檔2] |
| 單詞2 | [文檔1,文檔2,文檔3] |
ES中采用的就是倒排索引結構。
(2)沖突處理和修改操作
ES采用樂觀鎖處理沖突,樂觀鎖概念參考Elasticsearch-并發沖突處理機制,因此在執行一些操作時可能要進行多次操作才可以完成,并且ES的修改操作有以下方面有幾個特性
修改:
-
文檔不能被修改,只能被替換
刪除:
-
文檔刪除操作只是標記為”已刪除“,并沒有真正釋放內存
-
盡管不能再對舊版本的文檔進行訪問,但它并不會立即消失
-
當繼續索引更多的數據,Elasticsearch 會在后臺清理這些已刪除文檔
-
刪除索引會直接釋放內存
關于主從分片的交互和文檔更新過程
3.分析:監控+預警+可視化
ELK將所有節點上的日志統一收集,傳輸,存儲,管理,訪問,分析,警告,可視化。
它提供了大量應用于監控的可視化界面,例如Uptime、Metric、Machine Learning、DashBoard、Stack Monitoring,都是我們將系統/服務器/應用的數據傳入ES后,就可以利用Kibana的模板來展示相關內容。
對于各種常見的采集器采集到的數據,官方提供了一系列對應的模板,但是我們也可以針對自己的數據自定義,來按需求展示想要的信息。
關于各個板塊的具體展示內容和查看方式,在后文具體提到,見三、Beats和四、Kibana+插件。
4.支持集群
集群真正的擴容能力是來自于水平擴容–為集群添加更多的節點,并且將負載壓力和穩定性分散到這些節點中。
(1)ES集群特點
-
一個集群擁有相同的cluster.name 配置的節點組成, 它們共同承擔數據和負載的壓力
-
主節點負責管理集群的變更例如增加、刪除索引,或者增加、刪除節點等。 而主節點并不需要涉及到文檔級別的變更和搜索等操作
(2)分片的特點
-
Elasticsearch 是利用分片將數據分發到集群內各處
-
分片是數據的容器,文檔保存在分片內
-
分片又被分配到集群內的各個節點里
-
當集群規模變動,ES會自動在各個節點中遷移分片。使得數據仍然均勻分布在集群中
-
副分片是主分片的一個拷貝,作為硬件故障時的備份。并提供返回文檔讀操作
-
在創建索引時,確定主分片數,但是副分片可以在后面進行更改
集群管理
因為ELK的內容較多且一些功能相互依賴,本文的板塊劃分更注重解釋上的功能理解優先,而不是安裝優先。
二、Logstash(端口5044)
可以采集各種樣式、大小和來源的數據,對數據進行轉換,然后將數據發送到存儲庫中,如我們的存儲庫是ES。
在其配置文件中有input(輸入)、grok(過濾語句)、output(輸出)三大板塊。
input:它可以直接采集服務器上的文件/數據,也可以接受來自其他地方的數據(ip:從5044號端口傳過來)
grok:自定義過濾語句,對原始數據的內容進行處理
output:輸出到我們的存儲庫(如ES)
在我們的應用中,是把其當作一個中間件,大部分采集器(beats)將自己采集到的數據或文件傳輸到5044端口,啟動的logstash從5044端口接收數據,輸出到ES(9200端口)。我們對logstash文件進行了配置,設置了一定的過濾語句,目前的過濾語句主要是為了時間戳匹配。
時間戳匹配:每個數據都會自帶一個時間戳,默認為我們導入數據的時間,但是對于一些系統日志,如下圖,
將會自帶一個日志時間,因此我們希望將時間戳更改為消息中的日期,而不是導入時間。
在logastash配置文件中,我們已經設置了時間戳匹配的過濾語句,可以在文件中查看
vim /data/elk-ayers/logstash-7.10.1/config/logstash-sample.conf
關于logstash的相關操作,可以查看
logstash單獨上傳messages
Filebeat+Logatash啟動
Logstash多beat配置
logstash時間戳匹配
三、Beats
Beats Platform Reference(官方文檔)
Get started with Beats(官方文檔)
Beats是用來捕獲在服務器上的數據,將數據通過logstash發送到ES或直接發送到ES,即采集器。官方給出了多種Beats及其在ES中的數據模板(可以用于進行可視化、分析等)
我們目前采用的是部分Filebeat→ES→Kibana可視化,而其他Beat全部都是beat→logstash→ES→Kibana可視化
關于Kibana,可以先瀏覽第四板塊“Kibana+插件”,其中還涉及到ES-head插件,也是第四板塊的部分內容
1.Filebeat
Kibana展示界面(打開左側菜單欄):
-
Kibana→Discover
-
Kibana→DashBoard→[Filebeat System] Syslog dashboard ECS(未實現)
Filebeat是一個日志收集軟件,Filebeat安裝過程。
在Filebeat中,我們可以將各種文件類型進行傳入,一般是*.log以及message*文件。
vim /data/elk-ayers/filebeat-7.10.1/filebeat.yml
(1)數據處理方式
對于傳入的文件,我們可能要對其進行一定的數據處理,一般有兩種方式
-
利用logstash的grok語句進行過濾(filebeat→logstash→ES中使用),參見logstash實現時間戳替換。
vim /data/elk-ayers/logstash-7.10.1/config/logstash-sample.conf
- 利用pipeline的grok語句進行過濾(filebeat→ES中使用),語法與第一種類似。pipeline是ES中的內容,稱為管道。我們可以自定義一個pipeline,當filebeat的數據傳輸到ES中時,調用這個管道,或者說讓數據通過這個管道,則可以實現對數據的過濾和處理。
參見pipeline實現時間戳替換(這里涉及到Kibana的內容,可以先瀏覽第四板塊了解什么是Kibana)。
vim /data/elk-ayers/filebeat-7.10.1/filebeat.yml
(2)配置文件調整
在filebeat的配置文件中,我們一般會調整的內容主要有:
-
filebeat.input:輸入的文件+文件的pipeline方式+字段
-
output.elasticsearch/output.logstash:輸出方式,若是elasticsearch,輸出時可以指定索引名稱(indices);若是logstash,輸出到對應主機的5044端口。
-
index.number_of_shards:設置分片大小
Filebeat可以實現可視化(目前未實現),關于可視化可以先看過其他beat的可視化結果再回來研究
2.Metricbeat
Kibana展示界面(打開左側菜單欄):
-
Kibana→DashBoard→[Metricbeat System] Overview ECS
-
Kibana→Machine Learning→概覽→查看(metricbeat)
-
Observability→指標/Metric
用于從系統和服務收集指標。Metricbeat 能夠以一種輕量型的方式,輸送各種系統和服務統計數據,從 CPU 到內存。可以獲取系統級的 CPU 使用率、內存、文件系統、磁盤 IO 和網絡 IO 統計數據,還可針對系統上的每個進程獲得與 top 命令類似的統計數據。
Metricbeat安裝過程與可視化效果(一般時間設置Last 15 minutes)
3.Heartbeat
Kibana展示界面(打開左側菜單欄):
-
Kibana→Machine Learning→概覽→查看(uptime)
-
Observability→運行時間/Uptime
通過主動探測監測服務可用性,詢問監測的網站是否正常運行。無論您要測試同一臺主機上的服務,還是要測試開放網絡上的服務,Heartbeat 都能輕松生成運行時間數據和響應時間數據
Heartbeat安裝過程與可視化效果
4.Auditbeat
Kibana展示界面(打開左側菜單欄):
-
Kibana→DashBoard→[Auditbeat File Integerity] Overview ECS
監控Linux系統上的文件數據和信息,實時采集事件發送到ES。監控用戶的行為和系統進程,分析用戶事件數據。Auditbeat 會記住是誰在什么時間做了什么事情,記住所有這些原始的系統調用數據,以及相關聯的路徑
Auditbeat安裝過程與可視化效果
5.Functionbeat(未安裝)、Journalbeat(未安裝)、Packetbeat(未安裝)、Winlogbeat(不適用)
四、Kibana+插件
1.ES-head插件(localhost:9100)
現在,我們已經有了一堆采集器,采集了數據,或是直接或是通過logstash傳輸到存儲庫ES中,我們希望查看存儲庫中有哪些內容,以及一些詳情,則可以使用提供的ES-head插件,可以方便查看我們生成的索引、數據內容,也提供了簡易的增刪改查功能。
ELK+ES-head+Kibana部署過程
使用Head,一般是為了以下幾個目的:
-
查看我們導入的數據是否正常生成索引
-
數據刪除操作
-
數據瀏覽
在Head界面,有一些簡易的功能:
(1)別名
head索引下顯示的彩色
可以在 Kibana 的 Dev tools使用命令PUT /索引名/_alias/別名,例如下面代碼
PUT /kibana_sample_data_flights/_alias/flights
會將kibana_sample_data_flights取個別名flights,使用 flights 的時候,其實也就是對索引kibana_sample_data_flights 進行操作。在索引下出現,但是不會作為新的索引出現。
?
可以設置為不顯示
?
(2)刷新
在概覽界面右上角,有一個刷新按鈕,選擇箭頭。就無需手動操作,快速查看索引中 的數據變化
(3)主節點
在head界面,可以展示我們的集群和目前接入的節點。主機名前為★的代表當前選舉出的主節點,●代表從節點,當主節點崩潰后,集群會從其余未崩潰的節點中自動選舉出滿足要求的節點,成為新的主節點。
(4)健康值
在頁面頂端,顯示了集群的健康狀態,如果未連接,可以參考集群未連接問題解決。
而連接后,存在三種不同的健康狀況:green、yellow、red
-
green 主副分片均正常
-
yellow 主都正常,不是所有的副都正常,這不一定是有錯誤,如果剛進行過部分節點重啟或者集群的重啟,則一般都會出現這種情況,需要等待一定時間來讓各節點處理重啟狀況??梢栽贒ev tools檢查健康狀態
GET _cat/health
找到顯示yellow的索引,如果索引數據量大,可能需要等待較長時間。
-
red 所有主分片都不正常
2.Kibana(localhost:5601)
Kibana可以說是一個基于ES的可視化界面和分析界面,是一個開源的用戶界面,利用Kibana,我們可以更好地展示和檢索已經被收集到ES的數據。Kibana可以實現的功能有非常多。
Kibana完整功能列表(官方文檔)、Kibana功能專欄(Elastic中國社區官方博客)
像Uptime(運行時間)、Metric(指標)等數據展示界面,以及很多Kibana功能在前文和相關博客中已經提到很多,應該對界面有了初步的了解,這里主要介紹一下Kibana中的Stack Management、Discover、DashBoard+Visualize、Dev tools(開發工具)、Stack Monitor(堆棧監測)、APM、App Search/Workplace Search的部分功能和使用方式。
(1)Stack Management
打開左側菜單欄,選擇Management→Stack Management,進入管理界面,在這里,目前使用的主要是兩個功能
a.索引模板(index template)
找到數據→索引管理→索引模板,在其中我們可以創建一個Index template。
對于各個導入的數據,我們都會生成不同的字段,而字段各有其類型,在ES中稱作mapping(映射)【這很重要!】當我們新建一個索引模板時,我們按需求可以為不同的字段創建mapping
當我們導入的數據滿足兩個條件:①索引模板的名稱是導入數據索引名的前綴 ②導入的數據字段與定義的字段相匹配。則會將該字段的類型轉為我們定義的類型。
這一用處體現在可視化中,某些字段類型(如“text”)是無法進行聚合的,若是我們不進行定義,則導入的數據會成為text類型,并同時生成一個xx.keyword字段,該字段可聚合。這里可能會說,那不是也生成可聚合字段了么,text無法聚合并沒有影響。但是,對于一些可視化的模板內容,默認選取的字段是原始字段名而不是原始字段.keyword,因此必須使原始字段可聚合,否則數據無法正常展示,而模板往往是詳細而復雜的,對于初學者來說難以復制,所以最好是改變自己來匹配模板,而不是試著復制模板。
例如,在導入各個beat之前,我們需要先進行加載模板的操作,在這個操作中,除了加載可視化模板,還同時加載了索引模板,這時,如果我們導入的索引和字段名正確,則數據可以正常被聚合及可視化。關于這個更多的原理可以參考未加載模板而產生的不可聚合問題。
b.索引模式(index pattern)+腳本字段(Script Fields)
找到數據→Kibana→索引模式,這里會出現一些索引名稱。
-
創建索引模式
很多時候,我們導入數據時會以采集器-版本-年月命名索引,例如filebeat-7.10.1-2021.03/filebeat-7.10.1-2021.04,我們想查看以filebeat-7.10.1為前綴的所有索引,就可以定義一個索引模式為filebeat-7.10.1*,則在Discover界面就會出現filebeat7.10.1版本傳入的所有年月數據。
-
創建腳本字段
而在索引模式中,還有一個重要的功能,就是創建腳本字段(Script fileds)。
點進一個具體的索引模式,發現有字段、腳本字段、篩選源三個部分。
字段:指索引中現有的字段
腳本字段:利用代碼實現生成新字段
篩選源:去除某些內容不展示
我們導入數據后,可能會在實際的分析過程中發現有一些需要展示的數據沒有一個屬于自己的字段,這就導致難以可視化,于是出現了腳本字段??梢哉f它是一個為可視化而生的功能。
它可以實現從現有的數據字段中提取部分我們需要的內容,生成一個新的字段。如此,在可視化界面中,我們就可以使用這個字段來展示數據。關于可視化操作,參考四、2.(3)DashBoard+Visualize部分的內容。
在myx-t1*的索引中有兩個已經成功實現的腳本字段,是通過不同方式生成的同樣的內容,更多詳情可以參考博客Scripts-Fields生成新字段
(2)Discover
打開左側菜單欄,選擇Kibana→Discover,這是一個很常用的功能,在這個界面,我們可以根據時間戳來查看數據的分布,以及數據的詳細信息,它主要有以下幾個可以操作的功能
-
a.索引
通過management創建索引,或在控制臺加載過模板,在左側我們可以實現索引選擇
- b.篩選(filter)
對于已有數據,我們可能想查看具有特定內容或存在特定字段的數據,就可以使用篩選功能。選擇一個字段,篩選主要有幾種方式:是/is(=)、不是/is not(!=)、屬于/is one of(字段中含某些字/字符等)、不屬于/is not one of(字段中不含某些字/字符等)、存在/exist(!=null)、不存在/is not exist(==null)
- c.搜索(search)
和篩選的功能基本類似
- d.時間
選擇時間區間,來展示時間戳在該區間范圍的數據,有快速選擇或者絕對日期兩種方式
? ? ? ? ? ? ??
- e.字段(field)
鼠標移動到左側字段界面,有選定字段和可用字段兩個板塊,我們點擊某個可用字段的“+”號,則數據將會顯示時間戳+該字段的信息。
- f.保存為搜索(Save)
由e操作,我們可以任意增添或刪除想顯示的字段,并保存為一個“搜索”(重要,在可視化界面可以使用)
(3)DashBoard+Visualize
打開左側菜單欄,選擇Kibana→DashBoard,我們進入到一個便于操作的可視化功能面板,隨意點開一個DashBoard,發現里面有許多小板塊。
大的一個面板稱作DashBoard,其中的小板塊稱作Visualize,我們可以將Visualize看作是一個個小組件。在Discover面板保存的“搜索”也會作為一個Visualize,可以展示在DashBoard中。
目前官方給出的,并且我們已經導入數據,可以正常展示的,主要會用到的模板DashBoard為以下幾個:
-
[Metricbeat System] Overview ECS
-
[Auditbeat File Integerity] Overview ECS
-
[Flights] Global Flight Dashboard
目前我們自定義的,有數據且可以正常展示的模板主要為以下幾個
-
Hadoop-myx-test(設計方式DashBoard設計一)
-
Hadoop-myx-t1(設計方式DashBoard設計二)
-
Hadoop-fsimages-ayers
如果數據無法正常展示,可嘗試調大時間間隔。
關于模板的創建和添加方式,可以參考括號內的鏈接
(4)Dev tools
打開左側菜單欄,選擇Management→Dev tools/開發工具,我們進入到界面。它主要提供了以下幾種功能
-
控制臺增刪改查數據以及設置
-
Search Profiler查詢(其實它的功能在控制臺也可以實現,沒有很多嘗試)
-
Grok Debug語法調試,Grok相關內容和應用
主要使用的還是控制臺功能,在這里我們可以測試許多,可以用painless語法對已經存儲在ES中的數據進行增刪改查,可以用SQL語句增刪改查,可以實驗分詞器的功能,可以修改映射,可以查看索引和集群狀況等等。以下介紹的也都是和Dev tools相關的內容
a.painless
Painless語法是ES專門使用的一種語法,在生成Script Fields時,我們所使用的就是painless語法,它運用了Java的一些函數和內容,與Java比較相似。ES5.5版本的painless函數介紹頁面較為直觀,可以查詢我們需要的函數以及查看詳情,painless函數大全,修改鏈接中的5.5為7.10,可以跳轉到我們所搭建版本的頁面,但是顯示略有不同。
在開發工具中,使用的也是painless,它在ES的運行速度是其他語言的數倍,專門為ES定制。
elasticsearch painless最強教程
b.REST接口
在Kibana中,所有的接口都是通過REST實現的,也就是PUT、GET、PUST、DELETE、PATCH。具體使用在Dev tools中測試。參考官方博客的樣例運行一些代碼,就能很快上手。
入門1:了解如何創建索引,添加,刪除,更新文檔
入門2:了解如何進行搜索
入門3:了解如何進行分析數據: analyze 及 aggregate 數據
c.SQL語句
# 獲取所有索引(含別名,在kind中標記)
POST /_sql?format=txt
{"query": "SHOW tables"
}
# 查看SQL函數
POST /_sql?format=txt
{"query": "SHOW FUNCTIONS"
}
?
#SQL語句似乎無法識別帶有“-”“.”等符號的索引(下劃線可以),所以可以利用 PUT /索引名/_alias/別名,另取一個名字再進行調用
# 為kibana_sample_data_flights取別名flights
PUT /kibana_sample_data_flights/_alias/flights
?
# 查看某個索引的字段信息
POST /_sql
{"query": """DESCRIBE kibana_sample_data_flights"""
}
# 查看某個索引字段信息(以表格顯示,更直觀)
POST /_sql?format=txt
{"query": """DESCRIBE kibana_sample_data_flights"""
}
# 在服務器控制臺打開SQL(這里可以直接運行語句SELECT等等)
/data/elk-ayers/elasticsearch-7.10.1-node01/bin/elasticsearch-sql-cli http://172.20.64.5:9200
# 例子1(在2月份之后查找所有航班,該航班的飛行時間大于5小時,并且按照時間最長來排序)
POST /_sql?format=txt
{"query": """SELECT MONTH_OF_YEAR(timestamp), OriginCityName, DestCityName, FlightTimeHour FROM flights WHERE FlightTimeHour > 1 AND MONTH_OF_YEAR(timestamp) > 2 ORDER BY FlightTimeHour DESC LIMIT 20"""
}
其他具體的檢索操作和啟動SQL操作參見官方博客(包括查詢、修改字段類型、通過需求篩選數據等)
Elasticsearch SQL介紹及實例 (一)
Elasticsearch SQL介紹及實例(二)
Notes:
①SQL語句似乎無法識別帶有“-”“.”等符號的索引(下劃線可以),所以可以利用 PUT /索引名/_alias/別名,另取一個名字再進行調用。不過在提取字段的時候可以有“.”號,例如
SELECT agent.hostname.keyword(可以有“.”等) FROM nodemanager(不能有“-”“.”等)
(5)Stack Monitoring(堆棧監測)
打開左側菜單欄,選擇Management→Stack Monitor/堆棧監測,在這里我們已經啟動了監測,展示了ES集群、Kibana、Logstash的運行狀況。具體點擊內容,可以有相關的告警、磁盤空間等各種系統情況。
如果無法正常顯示,可以參考解決:Kibana的Stack Monitoring顯示節點offline
(6)APM(已安裝,未部署jar包)
打開左側菜單欄,選擇Observability→APM,進入APM界面
APM包含apm-server和apm-agent兩個部分,其基本架構如圖
-
APM Server是一個用Go編寫的開源應用程序,通常在專用服務器上運行。它默認偵聽端口8200,并通過JSON HTTP API從代理接收數據。然后,它根據該數據創建文檔并將其存儲在Elasticsearch中。
-
APM agent是一系列開源庫,使用與服務器端相同的語言編寫,目前支持node、python、ruby、js,java和golang。您可以像安裝任何其他庫一樣將它們安裝到服務器端中。apm agent會檢測代碼并在運行時收集性能數據和錯誤。此數據可 緩沖一小段時間并發送到APM服務器。
所以APM的主要功能是對應用的性能進行監控,例如監控我們部署的jar包。
打開左側菜單欄,選擇Observability→APM,在http://localhost:5601/app/home#/tutorial/apm鏈接中,官方提供了APM的部署過程。目前已經將apm-server和Java的apm-agent安裝在以下目錄中(安裝過程鏈接)。
/data/elk-ayers/elasticsearch-7.10.1-node01/apm/
官方介紹 APM :Java Agent Reference
安裝指南+使用效果、部署實例
大概了解原理后,如果我們想啟用一個java的agent時,在服務器輸入代碼
java\-javaagent:/data/elk-ayers/elasticsearch-7.10.1-node01/apm/apm-agent/elastic-apm-agent-1.21.0.jar \-Delastic.apm.service_name=my-application \ -Delastic.apm.server_urls=http://172.20.64.5:8200 \-Delastic.apm.application_packages=org.example \-jar /路徑/my-application.jar
其中service_name可以自定義,最后一行是我們部署的jar包
APM的功能似乎和User Experience界面相互聯結,當我們監聽部署的應用后,可以實時反饋用戶數據,在User Experience界面中展示。
(7)App/Workplace Search(企業功能,未實現)
由于功能未實現,所以還不清晰具體的運行和操作方式,但這兩者是為企業提供的功能。
-
App Search
App Search是一組功能強大的 API 和開發人員工具,旨在為開發人員構建豐富的,面向用戶的搜索應用程序。
它是在背后提供搜索功能的支持,如下圖,右邊是用戶在企業網頁搜索的展示效果,左邊是在App Search的界面。在App Search可以微調搜索結果,比如用戶搜索的時候,我們希望優先展示和什么字段匹配,或者不展示哪些內容,都可以在App那邊調整,用戶搜索到的結果就是經過我們調整的結果。除此之外,App也會統計用戶的搜索數據,可視化用戶行動信息。
Elastic App Search:產品介紹(中國社區官博)
Elastic App Search: 搭建和應用(中國社區官博)
Elastic App Search:輕松實現高級搜索(官網)
在7.11中,App Search還進一步推出了web 爬蟲器
Enterprise:推出 Elastic App Search Web 爬蟲器(中國社區官博)
Enterprise:Elastic App Search - Web 爬蟲器實踐(中國社區官博)
-
Workplace Search
Workplace Search的功能看了幾個鏈接,但沒有特別明白它的用途,可以看一下下面的幾個鏈接。似乎是為員工提供的,它可以關聯到很多的應用,比如github、Gmail,把內容和Workplace Search關聯后,我們可以搜索到各個應用中有沒有我們想搜索的內容。
Elastic Workplace Search:隨時隨地搜索所有內容(中國社區官博)
Elastic Workplace Search:嶄新的統一工作方式(中國社區官博)
Elastic 7.9 版本發布,提供免費的 Workplace Search 和終端安全功能(中國社區官博)
Elastic Workplace Search:Github應用(中國社區官博)
Elastic Workplace Search:面向虛擬工作空間的一站式求知工具(官網)
不知道理解得有沒有問題,感覺App是面向用戶的,我們在背后設置,讓用戶得到的搜索結果是我們期望他們看見的。Workplace是面向員工的,是方便我們整理自己的企業數據或檢索內容
3.cerebro插件(localhost:9000)
Cerebro是一個集群管理工具,比Kibana輕量很多,很適用與生產和測試等環境的es集群管理。它是kopf的升級版本,更改了個名字,包含kopf的功能(監控工具等)和head插件的部分功能(創建索引、查看集群設置,別名、分析等)。現在kopf已經不再更新,只對cerebro進行維護。
進入localhost:9000,會出現一個登錄或者說連接界面,在框中輸入
http://localhost:9200
就可以監控我們的集群和索引狀態
cerebro安裝過程和界面展示
4.bigdesk插件(localhost:8000)
bigdesk是一套用于監控es的插件,可以通過它來查看es集群的各種狀態,如:cpu、內存使用情況,索引數據、搜索情況,http連接數等。和head一樣,它也是個獨立的網頁程序。
進入localhost:8000,會出現一個登錄或者說連接界面,在框中輸入
http://localhost:9200
就可以監控我們集群中的節點狀態
bigdesk安裝過程和界面展示
5.IK分詞器插件
ik分詞器是一個方便中文分詞的工具,在英文中,基本是一個個的單詞表征含義,而中文的詞語分割很重要,比如小米手機,如果不用IK分詞器,ES默認的分詞結果是“小”“米”“手”“機”,而安裝了分詞器之后,可以識別“小米”“手機”。
下載完IK分詞器后,我們的ES中將存在三種模式的分詞:Ik(ik_smart 、 ik_max_word)、standard(es自帶的)。如果我們不指定分詞模式,則默認會執行standard,語句被拆分成一個一個字。而ik_max_word是最細粒度的拆分,也是ik默認的,ik_smart是做最粗粒度的拆分。
舉個最簡單的例子,對于“進口紅酒”,三種拆分分別是:
standard:進、口、紅、酒
ik_smart:進口、紅酒
ik_max_word:進口、口紅、紅酒
在檢索中我們提到ES的數據排序方式是倒排,由單詞定位文檔,因此單詞的切割方式也變得非常重要,在中文習慣中,我們并不是一個字一個字的閱讀,而是通過詞組構成語句來判定句意。我們更希望以有意義的詞語劃分句子,而不是以單個字劃分。
于是,一般來說,為了更好地索引和查詢,會在ES中安裝插件IK分詞器。在下列鏈接中,有一些樣例可以很比較直觀地感受到IK分詞器與默認分詞器的不同之處。
IK分詞器安裝、自定義和詳細使用測試
五、其他功能(未嘗試)
1.繼續探索Kibana界面。打開左側菜單欄
-
Kibana→Canvas/Maps/Machine Learning/Graph
-
Enterprise→App Search/Workplace Search
-
Observability→User Experience
APM的RUM展示User Experience
-
Security板塊(主機界面目前有少量展示信息)
2.利用ELK的后期操作獲取帶有高度的建筑模型
ELK可以干什么呢? - 栗栗栗栗的回答 - 知乎
?
后記
沒有設置大標題,篇幅有點多就不放前言當成后記吧,看到這里的人應該也不多,只是一點自己的心情。寫博客既是記錄,也是分享。這是目前以來整理最長的一篇了。
在技術領域(或者所有領域),可能經驗特別重要,導師的教導可以讓我們快速入門,省下大量精力去進行新的摸索。很多優秀博主的整理也同樣,讓我們不用去啃原本生硬的詞匯和解釋。所以我一向樂于在自己的博客中貼上其他博主的好文章,因為真實有幫助到我或讓我有所收獲,希望他們能繼續影響其他人。也不喜歡只是轉載,還是要有所自己的增添或進一步的摸索、整合,且自己確實實驗過可行才會寫出來。不然全網一樣的內容就沒了意義,看似十個鏈接提供了方案,其實不過是同樣的兩三種而已。
ELK是我在實習期間接觸到的任務,從一個從未聽說過ELK的小白,到漸漸有所了解并獨立解決bug,實習期兩個月結束,博客也寫了40篇整。是對自己學習過程的總結,是為了也許將來有一天還會重新回顧、拾起或成為下一次面試題,也為了給大家做一個參考。
一開始是上級搭建好了單機ELK,只是讓我嘗試使用,結果出了bug,一直無法打開。等待期間我便自己學著搭建,竟然也成功了。那時候還沒有集群的概念,也對ELK做什么一知半解,但一步步跟著其他人的博客卻也運行起來了。后來在內網要搭建集群,但是自己缺少了一些集群部署的基礎和功力,還是上級做的規劃,完成了基本的ELasticsearch安裝。而我按照單機的經驗和導師的建議,一步步在安裝logstash、beats、kibana以及各種插件(比如head、IK分詞器),常遇到一些奇奇怪怪的坑,在網上也很難查到解決方案,有時候一個坑要解決一個下午甚至一兩天。
踩坑的過程中常覺得,怎么會有這種坑,這怎么解決啊,靠,怎么都搞不出來。各種方法試著試著,一種不行換一種,有時候忽然就明白問題在哪里了。或者有時候,問題解決了,其實沒明白為什么, 反而是在寫博客的過程中,因為希望能讓他人看懂,自己才更加清晰了。所謂讀書百遍其意自現,其實也就是第一遍無法理解或沒有意識到的地方,多讀幾次,就串接在一起。靈光乍現不能算聰慧,不過是知識的積累。我也做了相關筆記希望對踩坑的人有所幫助。
ELK還有許許多多的功能沒有探索,學習也永無止境。實踐是最好的老師,如果是在大學上了一門ELK的課,估計課程結束可以考個高分,但也沒有什么感觸,這樣任務導向型的學習方式我很喜歡,在達到目標的過程中掌握更多,聯結知識。也在一次次嘗試和磨練中讓我相信,有問題就會有辦法,前人的分享也需要感謝,畢竟不是每一個替我們踩坑的人都有耐心傳授給他人的。發現有人的方法能解決bug的時候,簡直像發現了寶藏,教師也好,討論空間也罷,可能就是這樣一次次一代代承接下來的經驗在推動發展吧
總結
以上是生活随笔為你收集整理的ELK入门——ELK详细介绍(ELK概念和特点、Elasticsearch/Logstash/beats/kibana安装及使用介绍、插件介绍)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: github可以传java吗_如何在gi
- 下一篇: 鸿蒙智行官方解答和华为的关系!哪里买及售