Elastic Stack 產品簡介
- 安裝jdk1.8
- 下載安裝es
- 運行: bin/elasticsearch
下載tar包 & 解壓 & 運行
基本的資訊,叢集名,Lucene版本。
Elasticsearch配置說明:
設定檔位於config目錄中:
- elasticsearch.yml es的相關設定
- jvm.options jvm的相關參數
- log4j2.properties 日誌相關配置
記憶體大小,一些參數。日誌輸出。
-Xms2g-Xms2g
記憶體不是很大可以改小。
mark
yml關鍵配置說明:
- cluster.name 叢集名稱,以此作為是否同一叢集的判斷條件
- node.name 節點名稱,以此作為叢集中不同節點的區分條件
- network.host/http.port 網路地址和連接埠。用於http和transport服務使用
- path.data 資料存放區地址
- path.log 日誌儲存地址
Elasticsearch 配置說明:
Development 與 Production 模式說明
- 以transport的地址是否綁定在localhost為判斷標準 network.host
- Development 模式下載啟動時會以warning的方式提示配置檢查異常
- Production模式在啟動時會以error的方式提示配置異常並退出
啟動之前會進行檢查。如果改在了真實的ip上,就會進行這些檢查
參數修改的第二種方式;
bin/elasticsearch -Ehttp.port=19200
通過-E參數名稱來修改配置
Elasticsearch 本地啟動叢集。
bin\elasticsearchbin\elasticsearch -E http.port=8200 -E path.data=node2bin\elasticsearch -E http.port=7200 -E path.data=node3
通過介面查看是否是叢集
8200/_cat/nodes?v
mark
*
代表主節點.
8200/_cluster/stats
可以看到叢集的很多詳細資料。
Kibana安裝與運行
下載安裝 Kibana
運行;
bin/kibana
下載與es相同的版本。Kibana 是nodejs開發的,所以要下載對應版本的。
前往config目錄修改kibana.yml中es.url的說明。
預設使用連接埠5601
Kibana配置詳解
Kibana.yml 關鍵配置說明
- server.host/server.port 訪問Kibana用的地址和連接埠。
如果希望外網可以訪問需要修改一下, 你需要修改為指定的連接埠。
- elasticSearch.url 待訪問 elasticSearch的地址
Kibana常用功能說明
- Discover 資料搜尋查看
- Visualize 圖表製作
- Dashboard 儀錶盤製作 將圖表進行綜合展示
- Timelion 時序資料的進階可視化分析(寫一些查詢語言)
- Devtools 開發人員工具
- management 組態管理
Elasticsearch 常用術語
- Document 文檔資料
- Index索引 (Nysql中資料庫)
- Type 索引中的資料類型
- Field 欄位,文檔的屬性。
- Query DSL 查詢文法
Elasticsearch CRUD
- Create 建立文檔
- Read 讀取文檔
- Update 更新文檔
- delete 刪除文檔
mark
在index accounts 中的type person中建立了id為1的文檔。
文檔內容為下面json格式的定義。 裡面的name等都是文檔的欄位 ,實體的屬性。
mark
點擊左下角collapse可以讓介面更簡約一點。
mark
擷取文檔通過文檔的id
使用 post /accounts/person/1/_update
刪除文檔
DELETE /accounts/person/1DELETE /accounts
Es查詢簡介
mark
- 直接在查詢的url後面跟上
q
跟上查詢文法
- Query DSL 通過json格式查詢
mark
GET /account/person/_search?q=johnGET accounts/person/_search{ "query": { "term": { "name":{ "value": "alfred" } } }}
以body形式發起請求。
es官網的reference docs中有關於Query DSL的說明。
Beats 入門
Lightweight Data Shipper 輕量級的資料傳送者
- Filebeat 記錄檔
- Metricbeat 度量資料 cpu nginx 記憶體的度量資訊(可視化的展示分析報告)
- Packetbeat主要是對網路資料。
- winlogbeat windows 資料
- Heartbeat 健全狀態檢查
Filebeat簡介
- 處理流程:
- 輸入input
- 處理filter
- 輸出output
mark
filebeat可以輸出到多種地方,es, logstach, kafka, redis
由prospector (觀察者勘探者) & Harvester (收割者)組成
一個監聽一個收割。會針對每一個檔案啟動一個harvest。
filebeat Input配置簡介
yaml 文法;
mark
yaml對於不止一個prospector 也就是數組是通過-
實現的。
輸入類型:log
paths 用於指定日誌的路徑。
可以配置多個日誌路徑。input有兩個類型: 一個是log 一個是stdin
Filebeat Output 配置簡介
- Console & elasticSearch & logstash & kafka & redis & file
mark
輸出到elasticSearch中。如果你對於es加了許可權認證,你要加入使用者名稱和密碼。
mark
開發的時候經常輸出到控制台。pretty 做json的格式化
Filebeat Filter配置簡介
- Input時處理: Include_lines & exclude_lines & exclude_files
達到條件我就讀入或者不讀入這一行。當檔案名稱不符合時被排除
drop_event 滿足某一個條件不輸出而是直接扔掉。
drop_fields 扔掉某一個欄位
decode_json_fields 符合欄位中的json格式做一個解析
Include_fields 加入一些欄位,或只想取一些欄位。
mark
當我們匹配到一個Regex。message欄位是以dbg開頭。就把他drop掉。
mark
Inner欄位裡面是一個json。但是內部做了一個字串處理。通過processors的處理
mark
Filebeat + Elasticsearch Ingest Node
Filebeat缺乏資料轉換的能力
5.0 Elasticsearch新增ingest node
- 新增的node類型
- 在資料寫入es前對資料進行處理轉換。
- pipeline api
如果想快速的儲存進es中
寫合適的Filebeat的設定檔,配置pipeline。對於Kibana進行配置、
官方推出Filebeat Module 實現開箱即用
mark
指定nginx路徑。使用nginx的module。匯入Kibana。
最佳實務的參考。
Filebeat 收集nginx log
- 通過stdin 收集日誌
- 通過console 輸出結果
demo 實踐
beats 下載。 filebeat golang開發。下載對應平台的。
data存讀取收集到的日誌,執行檔案,最全的配置。
module是我們上面介紹的模組。
head -n 2 ~/Downloads/nginx_logs/nginx.log
設定filebea的輸入輸出
mark
輸出:
mark
head -n 2 ~/Downloads/nginx_logs/nginx.log|./filebeat -e -c nginx.yml
使用Filebeat來接收日誌
輸入了兩條,Filebeat輸出了兩條。nginx日誌的每一條變成了一個json
Packetbeat簡介
即時抓取網路包,自動解析應用程式層協議
ICMP (v4 and v6) DNS HTTP MYSQL Redis
wireshark 輕量級的。
packetbeat 解析http請求
解析 elasticSearch http 請求
mark
interfaces.device 是指定監聽哪一個網卡
linux下可以指定成 any 但是mac只能指定為本地 lo0、
協議指定抓取 http協議的包。連接埠9200。
send_request 預設false 記錄http請求的body資訊。不開的話抓取的資訊比較簡單。
將body中json格式的資料記錄下來。
output.console: pretty: true
Packetbeat 運行
sudo ./packerbeat -e -c es.yml -strict.perms=false
抓包是需要有一定許可權,設定檔的使用權限設定false就不會被檢查
Beats入門
Packetbeat 運行
點擊beats 下載packetbeat。解壓。
整體結構非常類似。es跑起來,
sudo ./packerbeat -e -c es.yml -strict.perms=false
es.yml
markmark
配置input 和 output
Logstash入門
Data Shipper
- ETL
- Extract
- Transform
- Load
提取轉換和載入。 開源的服務端的資料處理流。同時從多個資料來源去提取資料,
轉換資料最後把資料發送到你要儲存的地方。
Filter 是 logstash 遠強於 beats的地方。
grok 是一種基於正則的將非格式化資料轉換為格式化資料的文法的。
mutate 對結構化之後的資料進行增刪改查。
drop date等常見的對於資料的處理。
output :可以輸出到多種地方。
Logstash 配置
處理流程 -- Input 和 Output 配置
mark
可以用上面命令進行本地的快速調試、
Grok
基於Regex提供了豐富可重用的模式(pattern)
基於此可以將非結構化的資料做結構化的處理。
Date
將字串類型的時間欄位轉換為時間戳記類型,方便後續資料處理。
後續通過時間進行查詢,基於時間進行分組。
Mutate
進行增加刪除修改替換等欄位相關的處理
Filter配置 Grok樣本
mark
grok將非結構化資料轉換為結構化資料。
%{IP:client} IP是一個已存在的Regex模式。後面的client是結構化之後的欄位名。
mark
grok將非結構化的資料轉化為結構化的資料。
Logstash 示範
Logstash基於jvm。下載解壓
Logstash三大配置 date將字串轉換成時間戳記 地理位置的處理 使用者代理程式的處理
head -n 2 ~/nginx_logs/nginx.log|bin/logstash -f nginx_logstatsh.conf
實戰: 分析Elasticsearch 查詢語句。
目標:
- 收集Elasticsearch叢集的查詢語句- 分析查詢語句的常用語句、響應時間長度等
方案:
- 應用 Packetbeat + Logstash 完成資料收集工作- 使用 Kibana + Elasticsearch 完成資料分析工作
mark
監控的叢集; production cluster 業務叢集es查詢語句情況
packetbeat 監聽 es的連接埠。將搜尋查詢語句統計
發送到Logstash,Logstash做一些處理,儲存到監控叢集。
通過監控叢集的Kibana進行可視化。
方案:
- Production Cluster
Elasticsearch 9200
Kibana 5601
- Monitoring Cluster
Elasticsearch 8200
bin/elasticsearch -Ecluster.name=sniff_search -Ehttp.port=8200-Epath.data=sniff
kibana 8601
bin /kibana -e http://127.0.0.0.1:8200 -p 8601
產生叢集和監控叢集不能是同一個,會造成壓力過大,陷入死迴圈。
mark
在5044 連接埠接收beats 的輸入。如果在request中有search這個關鍵詞才進行處理。
從request中提取查詢語句。以及是對哪一個index做出的查詢。
做的一些補全操作。output只做查詢語句。
mark
packetbeat 將輸出輸出到5044
筆者實踐:
我的機器上已經跑著es + kibana 的一套搜尋引擎業務叢集。
markmark
分別運行在5601和9200連接埠。
此時啟動監控日誌叢集和Kibana
markmark
因為懶以及怕記憶體不夠用,上面的監控叢集只運行了一個master節點。
修改Kibana設定檔中
markmark
此時Kibana 5602 es 9201
mark
首先啟動logstash 使用檔案 sniff_search.conf
設定 beats 監聽連接埠5044 & 將檔案輸出到監控叢集 9201
bin/logstash -f sniff_search.conf
mark
我用的windows使用命令如上。
準備packctbeat
markmark
./packerbeat -e -c es.yml -strict.perms=falsepackerbeat.bat -e -c sniff_search.yml -strict.perms=false
運行報錯,找不到wpcap、安裝。https://www.winpcap.org/install/default.htm
一旦通過management 加入了索引,就可以根據discover查看資料。
visualize 建立餅圖等。
Kibana使用。
總結與建議
mark
學會查閱和搜尋官方文檔
學會在社區正確地提問題
學會開拓視野的方法 - Elastic 日報