Table of Contents
1. Elasticsearch集羣部署
1.1 Elasticsearch簡介
Elasticsearch 是一個分佈式可擴展的實時搜索和分析引擎,一個建立在全文搜索引擎 Apache Lucene(TM) 基礎上的搜索引擎.當然 Elasticsearch 並不僅僅是 Lucene 那麼簡單,它不僅包括了全文搜索功能,還可以進行以下工作:
- 分佈式實時文件存儲,並將每一個字段都編入索引,使其可以被搜索。
- 實時分析的分佈式搜索引擎。
- 可以擴展到上百臺服務器,處理PB級別的結構化或非結構化數據。
基礎模塊
模塊 | 說明 |
cluster | 管理集羣狀態,維護集羣層面的配置信息 |
alloction | 封裝了分片分配相關的功能和策略 |
discovery | 發現集羣中的節點,以及選舉主節點 |
gateway | 對收到master廣播下來的集羣狀態數據的持久化存儲 |
indices | 管理全局級的索引設置 |
http | 允許通過JSON over HTTP的方式訪問ES的API |
transport | 用於集羣內節點之間的內部通信 |
engine |
封裝了對Lucene的操作及translog的調用 |
Elasticsearch應用場景:
- 信息檢索
- 日誌分析
- 業務數據分析
- 數據庫加速
- 運維指標監控
1.2 Elasticsearch安裝與部署
下載地址:https://elasticsearch.cn/download/
清華大學開源軟件鏡像站:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.6.0/
官方安裝步驟文檔:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
安裝軟件
rpm -ivh jdk-8u171-linux-x64.rpm
rpm -ivh elasticsearch-7.7.1.rpm //7.6版本以上自帶jdk
設置服務自啓
systemctl daemon-reload
systemctl enable elasticsearch
修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
修改系統限制:kernel > system > user
vim /etc/security/limits.conf
vim /etc/elasticsearch/jvm.options
Systemd配置【使用Systemd啓動】
vim /usr/lib/systemd/system/elasticsearch.service ##在service模塊添加
啓動
systemctl daemon-reload
systemctl start elasticsearch
測試訪問
1.3 elasticsearch插件安裝
安裝詳解:https://github.com/mobz/elasticsearch-head
下載安裝
wget https://github.com/mobz/elasticsearch-head/archive/master.zip
unzip master.zip
下載安裝nodejs(head插件本質上是一個nodejs的工程)
wget https://mirrors.tuna.tsinghua.edu.cn/nodesource/rpm_9.x/el/7/x86_64/nodejs-9.11.2-1nodesource.x86_64.rpm
rpm -ivh nodejs-9.11.2-1nodesource.x86_64.rpm
node -v
npm -v ##查看版本,確定安裝成功
更換npm源安裝
cd elasticsearch-head-master/
npm install --registry=https://registry.npm.taobao.org
缺少phantomjs
下載並解壓phantomjs
將執行文件複製到bin目錄下
執行npm install
npm install --registry=https://registry.npm.taobao.org
修改ES主機ip和端口
vim ~/elasticsearch-head/_site/app.js
啓動head插件
npm run start &
image widget
修改ES跨域主持
vim /etc/elasticsearch/elasticsearch.yml
重啓ES服務
systemctl restart elasticsearch.service
訪問head插件服務
創建索引
查看es狀態
1.4 elasticsearch分佈式部署
安裝兩個es節點,並修改配置
node2:
node3:
查看節點狀態
1.5 elasticsearch節點角色
Master:
主要負責集羣中索引的創建、刪除以及數據的Rebalance等操作。Master不負責數據的索引和檢索,所以負載較輕。當Master節點失聯或者掛掉的時候,ES集羣會自動從其他Master節點選舉出一個Leader。
Data Node:
主要負責集羣中數據的索引和檢索,一般壓力比較大。
Coordinating Node:
原來的Client node的,主要功能是來分發請求和合並結果的。所有節點默認就是Coordinating node,且不能關閉該屬性。
Ingest Node:
專門對索引的文檔做預處理
1.6 elasticsearch節點優化
在生產環境下,如果不修改elasticsearch節點的角色信息,在高數據量,高併發的場景下集羣容易出現腦裂等問題。
默認情況下,elasticsearch集羣中每個節點都有成爲主節點的資格,也都存儲數據,還可以提供查詢服務。
節點角色是由以下屬性控制:
node.master: false|true
這個屬性表示節點是否具有成爲主節點的資格,注意:此屬性的值爲true,並不意味着這個節點就是主節點。 因爲真正的主節點,是由多個具有主節點資格的節點進行選舉產生的。
node.data: true|false
這個屬性表示節點是否存儲數據
node.ingest: true|false
是否對文檔進行預處理。
search.remote.connect: true|false
是否禁用跨集羣查詢
默認情況下這些屬性的值都是true。
第一種組合:(默認)
node.master: true
node.data: true
node.ingest: true
search.remote.connect: true
這種組合表示這個節點即有成爲主節點的資格,又存儲數據。 如果某個節點被選舉成爲了真正的主節點,那麼他還要存儲數據,這樣對於這個節點的壓力就比較大了。 測試環境下這樣做沒問題,但實際工作中不建議這樣設置。
第二種組合:(Data node)
node.master: false
node.data: true
node.ingest: false
search.remote.connect: false
這種組合表示這個節點沒有成爲主節點的資格,也就不參與選舉,只會存儲數據。 這個節點稱爲data(數據)節點。在集羣中需要單獨設置幾個這樣的節點負責存儲數據。後期提供存儲和查詢服務。
第三種組合:(master node)
node.master: true
node.data: false
node.ingest: false
search.remote.connect: false
這種組合表示這個節點不會存儲數據,有成爲主節點的資格,可以參與選舉,有可能成爲真正的主節點。 這個節點我們稱爲master節點。
第四種組合:(Coordinating Node)
node.master: false
node.data: false
node.ingest: false
search.remote.connect: false
這種組合表示這個節點即不會成爲主節點,也不會存儲數據, 這個節點的意義是作爲一個協調節點,主要是針對海量請求的時候可以進行負載均衡。
第五種組合:(Ingest Node)
node.master: false
node.data: false
node.ingest: true
search.remote.connect: false
這種組合表示這個節點即不會成爲主節點,也不會存儲數據, 這個節點的意義是ingest節點,對索引的文檔做預處理。
生產集羣中可以對這些節點的職責進行劃分
建議集羣中設置3臺以上的節點作爲master節點,這些節點只負責成爲主節點,維護整個集羣的狀態。
再根據數據量設置一批data節點,這些節點只負責存儲數據,後期提供建立索引和查詢索引的服務,這樣的話如果用戶請求比較頻繁,這些節點的壓力也會比較大。
所以在集羣中建議再設置一批協調節點,這些節點只負責處理用戶請求,實現請求轉發,負載均衡等功能。
各類節點對資源的需求
master節點:普通服務器即可(CPU、內存 消耗一般)
data節點:主要消耗磁盤、內存。 path.data: data1,data2,data3 這樣的配置可能會導致數據寫入不均勻,建議只指定一個數據路徑,磁盤可以使用raid0陣列,而不需要成本高的ssd。
Coordinating節點:對cpu、memory要求較高。
2. logstash數據採集
2.1 Logstash簡介
Logstash是一個開源的服務器端數據處理管道。
logstash擁有200多個插件,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到您最喜歡的 “存儲庫” 中。(大多都是Elasticsearch)
Logstash管道有兩個必需的元素,輸入和輸出,以及一個可選元素過濾器
輸入:
採集各種樣式、大小和來源的數據 Logstash 支持各種輸入選擇 ,同時從衆多常用來源捕捉事件。 能夠以連續的流式傳輸方式,輕鬆地從您的日誌、指標、Web 應用、數據存儲以及各種 AWS 服務採集數據。
過濾器:
實時解析和轉換數據 數據從源傳輸到存儲庫的過程中,Logstash 過濾器能夠解析各個事件,識別已命名的字段以構建結構,並將它們轉換成通用格式,以便更輕鬆、更快速地分析和實現商業價值。利用 Grok 從非結構化數據中派生出結構從 IP 地址破譯出地理座標將 PII 數據匿名化,完全排除敏感字段簡化整體處理,不受數據源、格式或架構的影響
輸出:
選擇您的存儲庫,導出您的數據 儘管 Elasticsearch 是我們的首選輸出方向,能夠爲我們的搜索和分析帶來無限可能,但它並非唯一選擇。 Logstash 提供衆多輸出選擇,您可以將數據發送到您要指定的地方,並且能夠靈活地解鎖衆多下游用例。
2.2 Logstash安裝與配置
官方下載地址:https://elasticsearch.cn/download/
推薦下載地址:https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/
Logstash安裝
rpm -ivh jdk-8u221-linux-x64.rpm
rpm -ivh logstash-7.7.1.rpm
軟鏈接
ln -s /usr/share/logstash/bin/logstash /usr/bin/ ##軟連接
標準輸入到標準輸出
logstash -e 'input { stdin { } } output { stdout {}
2.3 file輸出插件
標準輸入到文件
vim /etc/logstash/conf.d/file.conf
指定配置文件運行
logstash -f /etc/logstash/conf.d/file.conf
在標準輸入中鍵入"hello"後查看
cat /tmp/logstash.txt
2.4 elasticsearch輸出插件
標準輸入到es主機
vim /etc/logstash/conf.d/es.conf
###
input {
stdin { }
}
output {
elasticsearch {
# 輸出到ES主機與端口
hosts => "192.168.1.11:9200"
# 定製索引名稱
index => "logstash-%{+YYYY.MM.dd}"
}
}
###
指定配置文件運行
logstash -f /etc/logstash/conf.d/es.conf
查看ES狀態
2.5 file輸入插件
vim /etc/logstash/conf.d/es.conf
logstash -f /etc/logstash/conf.d/es.conf
查看ES
logstash如何區分設備、文件名、文件的不同版本
- logstash會把進度保存到sincedb文件中
find / -name .sincedb*
cat /usr/share/logstash/data/plugins/inputs/file/.sincedb_15940cad53dd1d99808eeaecd6f6ad3f
ls -i /var/log/httpd/access_log
sincedb文件內容解釋
6個字段:
- inode編號
- 文件系統的主要設備號
- 文件系統的次要設備號
- 文件中的當前字節偏移量
- 最後一個活動時間戳(浮點數)
- 與此記錄匹配的最後一個已知路徑
2.6 syslog插入插件
logstash可以僞裝成日誌服務器,直接接受遠程日誌
vim /etc/logstash/conf.d/syslog.conf
指定配置文件運行
logstash -f /etc/logstash/conf.d/syslog.conf
netstat -antulp |grep :514
配置客戶端傳入日誌
vim /etc/rsyslog.conf # logstash安裝在node4 192.168.1.14
systemctl restart rsyslog
查看logstash輸出
2.7 多行過濾插件
多行過濾把多行日誌記錄合併爲一行事件
vim /etc/logstash/conf.d/multiline.conf
###
input {
stdin {
codec => multiline {
pattern => "^EOF" ##以EOF爲結束
negate => true
what => previous
}
}
}
output {
stdout {}
}
###
指定配置文件運行
logstash -f /etc/logstash/conf.d/multiline.conf
查看輸出
2.8 grok過濾插件
grok過濾
vim /etc/logstash/conf.d/grok.conf
###
input {
stdin {}
}
filter {
grok {
match => { "message" => "%{IP:client} %{WORD:method} %{URIPATHPARAM:request} %{NUMBER:bytes} %{NUMBER:duration}"}
}
}
output {
stdout {}
}
###
指定配置文件運行
logstash -f /etc/logstash/conf.d/grok.conf
查看輸出
- apache服務日誌過濾實戰
vim /etc/logstash/conf.d/apache.conf
###
input {
file {
path => "/var/log/httpd/access_log"
start_position => "beginning"
}
}
filter{
grok {
match => { "message" => "%{HTTPD_COMBINEDLOG}" }
}
}
output {
elasticsearch {
hosts => "192.168.1.11:9200"
index => "apachelog-%{+YYYY.MM.dd}"
}
}
###
curl 127.0.0.1 ##本地訪問兩次,生成點日誌
指定配置文件運行
logstash -f /etc/logstash/conf.d/apache.conf
查看輸出
- curl訪問
可以看到兩條訪問記錄,且是本機通過curl訪問
- 瀏覽器訪問
3. kibana可視化
3.1 kibana簡介
Kibana 核心產品搭載了一批經典功能:柱狀圖、線狀圖、餅圖、旭日圖等~
將地理數據融入任何地圖
精選的時序性 UI,對Elasticsearch 中的數據執行高級時間序列分析
利用 Graph 功能分析數據間的關係
Kibana 開發工具爲開發人員提供了多種強大方法來幫助其與 Elastic Stack 進行交互
3.2 kibana安裝與配置
kibana下載
https://elasticsearch.cn/download/
https://mirrors.tuna.tsinghua.edu.cn/elasticstack/yum/elastic-7.x/7.7.1/
kibana安裝
rpm -ivh kibana-7.7.1-x86_64.rpm
kibana配置
vim /etc/kibana/kibana.yml
啓動kibana服務
systemctl enable --now kibana.service
訪問kibana
3.3 kibana使用
創建索引匹配
基於ES索引創建可視化
訪問量可視化
創建柱狀圖(訪問量排行榜)(客戶端ip爲x軸)
創建儀表盤(dashboard)
3.4 啓用xpack安全驗證
集羣模式需要先創建證書
cd /usr/share/elasticsearch/
./bin/elasticsearch-certutil ca
./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
cp elastic-certificates.p12 elastic-stack-ca.p12 /etc/elasticsearch
cd /etc/elasticsearch
chown elasticsearch elastic-certificates.p12 elastic-stack-ca.p12
配置所有的elasticsearch集羣節點
vim /etc/elasticsearch/elasticsearch.yml
###
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /etc/elasticsearch/elastic-certificates.p12
xpack.security.transport.ssl.truststore.path: /etc/elasticsearch/elastic-certificates.p12
###
ES集羣重啓正常後,設置用戶密碼
設置kibana連接ES的用戶密碼
vim /etc/kibana/kibana.yml
設置Logstash連接ES用戶密碼
vim /etc/logstash/conf.d/apache.conf
logstash -f /etc/logstash/conf.d/apache.conf
head訪問
- 添加參數到es配置
http.cors.allow-headers: Authorization,X-Requested-With,Content-Length,Content-Type
- 瀏覽器訪問http://192.168.1.101:9100/?auth_user=elastic&auth_password=redhat
- 利用ab壓力測試工具測試訪問
ab -c 2 -n 1000 http://192.168.1.14/
- 查看
- node3訪問
- 刷新