ElasticSearch Logstash Kibana
叢集搭建
叢集搭建需要注意的幾個配置點。
1 修改每個程序最大同時開啟檔案數太小和使用者最大執行緒。修改/etc/security/limits.conf檔案,增加配置,使用者退出後重新登入生效。
* soft nofile 65536
* hard nofile 65536
* soft nproc 4096
* hard nproc 4096
2 修改虛擬記憶體最大值/etc/sysctl.conf 增加
vm.max_map_count=262144
3 修改ES中JVM佔用記憶體,預設的太大。ES配置檔案config/jvm.options
-Xms512m
-Xmx512m
4 修改ES配置檔案
cluster.name : es #配置es的叢集名稱,預設是elasticsearch,es會自動發現在同一網段下的es,如果在同一網段下有多個叢集,就可以用這個屬性來區分不同的叢集。 node.name : n1 #節點名,預設隨機指定一個name列表中名字,該列表在es的jar包中config資料夾裡name.txt檔案中 node.master : true #指定該節點是否有資格被選舉成為node,預設是true,es是預設叢集中的第一臺機器為master,如果這臺機掛了就會重新選舉master。 node.data : true #指定該節點是否儲存索引資料,預設為true。 network.host : 0.0.0.0 #本機地址 transport.tcp.port : 9001 #設定節點間互動的tcp埠,預設是9300。 http.port : 8001 #設定對外服務的http埠,預設為9200。 transport.tcp.compress : true #設定是否壓縮tcp傳輸時的資料,預設為false,不壓縮。 http.max_content_length : 100mb #設定內容的最大容量,預設100mb discovery.zen.ping.unicast.hosts : ["0.0.0.0:9001","0.0.0.0:9002","0.0.0.0:9003"] #設定新節點被啟動時能夠發現的主節點列表(主要用於不同網段機器連線) discovery.zen.minimum_master_nodes: 2 #master候選節點數量/2+1 #master候選節點 cluster.initial_master_nodes: ["n1","n2","n3"] #如果使用head外掛,需要增加這個。 http.cors.enabled: true http.cors.allow-origin: "*"View Code
5 安裝IK分詞器
https://github.com/medcl/elasticsearch-analysis-ik
將解壓好的目錄命名位IK放到ES的plugins下。
6 安裝head外掛
下載head需要先安裝node環境。這裡給出一篇部落格。
https://www.cnblogs.com/xiaojianfeng/p/9435507.html
7 啟動Es不能使用root使用者,需要建立一個Linux使用者。啟動指令碼再 bin 下。
bin/elasticsearch -d 其中 -d 為後臺啟動。
故障轉移
在一個ES叢集中建立一個索引指定了主分片和副本分片後。如果叢集節點掛掉後,ES會動態的做故障轉移。
將掛掉的節點上的分片,分配給其他節點上。直到該節點恢復,才會將分片重新分配。
下圖store索引,主分片數量三個,每個有一個副本分片,總共六個。
當node3節點掛掉後。經過短暫的ES檢查到節點丟失。
短暫的調整後,ES會將node3的節點分配到其他兩個節點上。
極限擴容
索引庫一旦建立,主分片數量不可更改。例如上圖的store索引庫,三個主分片,每個主分片一個副本。
但隨著業務的增加,一臺服務上放置多個分片勢必導致讀寫慢,ES寫操作只能在主分片上操作,而讀
操作可以在主分片或者副本分片操作。所以我們需要對索引庫進行擴容。就是增加伺服器。這次的目標是
在擴充套件3臺伺服器,總共6臺做到每臺伺服器上只放置一個分片。這個操作只需要對ES叢集增加節點即可。
增加副本
上邊說過,當索引建立後,主分片不可增加。那麼業務量龐大時,做到極限擴容,顯然已經
到達了閾值。像上邊那樣,已經是一臺伺服器放一個分片了。接下來我們要做的操作是增加
副本分片。下圖為使用springBoot JPA的方式建立了主分片和副本分片都是一的索引。
可以看到 n2這個節點完全沒有用到。接下來我們通過 rest 的方式,對索引的副本分片進行更改。
FieldType.Text和FieldType.Keyword
定義文件時會選擇欄位型別。如果是字串型別,我們則要考慮是否對改欄位進行分詞。
如果分詞就會建立索引。Text則會對字串進行分詞並索引。Keyword則不會對字串
分詞,但是會建立索引。以下索引Item只有title欄位是text型別。其他是keyword型別。
index
表示欄位是否索引,上邊我們說過對於字串型別,無論是Keywork還是Text都會對欄位進行
索引。index屬性為false則表示該屬性不建立索引。即使此字串是Text型別。
LogStash
從這個地址下載LogStash https://artifacts.elastic.co/downloads/logstash 注意LogStash版本要和Elasticsearch一致。
logStash主要作用從一個輸入源讀資料,然後將資料存到Elasticsearch 輸入源可以是資料庫,檔案,APP應用等。
注意事項
1 修改config/jvm.config檔案
-Xms256m
-Xmx256m
2 啟動指令碼再 bin 目錄下 bin/logstash -e'input{ stdin{} } output{ stdout{} }' 這種方式直接將配置放到啟動指令碼後,但是如果過長就不好看了,可以放到配置檔案步驟3.
3 修改啟動配置檔案
config/ 下建立一個 xx.config 即可。
LogStash配置檔案主要配置輸入源,和輸出目的地。格式如下
input{
tcp{
port => 1111
codec => "json"
}
}
output{
elasticsearch{
hosts => ["10.0.98.76:9200"]
index => "testapp"
}
}
View Code
input表示輸入,output表示輸出。可以有多個輸入源,也可以有多個輸出源。以上則是監聽服務埠,然後輸出到Elasticsearch
步驟2的 stdin{} stdout{} 為控制檯輸入輸出。如果有多個輸入源,這個語法也支援 if 判斷,根據輸入源的 type 判斷輸入到哪裡。
以下是一個常用配置。需要注意的是,如果輸入源是 file 則該檔案必須是 .log 結尾。同時要設定 start_position 屬性,該屬性規定了Logstash從檔案的什麼
位置開始讀取,如果是 beginning 則表示從檔案第一行開始讀。注意Logstash會一行一行的讀,遇到換行符則代表一行。 end 表示會從檔案尾部讀取,也就是
如果你指定的檔案裡已經有內容,Logstash只會讀取新增的日誌。但是,如果這個檔案曾經被Logstash讀取過,則Logstash會對檔案有標記,標記曾經讀到哪一行
也就是說,start_position只對第一次讀的檔案生效。
4 啟動時指定配置檔案logstash -f config/logstash-sample.conf
nohup bin/logstash -f config/logstash-sample.conf & 後臺啟動
輸入源如果是 tcp 則需要指定 codec 為json
input{
#stdin{}
file{
path => "/home/elk/logStash/logstash-7.8.0/config/test1.log"
type => "test1"
start_position => "beginning"
}
file{
path => "/home/elk/logStash/logstash-7.8.0/config/test2.log"
type => "test2"
start_position => "beginning"
}
tcp{
host => "192.168.31.77"
port => 1111
codec => json
type => "app"
}
}
output{
if [type] == "test1"{
elasticsearch{
hosts => ["192.168.31.77:8003"]
index => "log1"
}
}
if [type] == "test2"{
elasticsearch{
hosts => ["192.168.31.77:8003"]
index => "log2"
}
}
if [type] == "app"{
elasticsearch{
hosts => ["192.168.31.77:8003"]
index => "applog"
}
}
#stdout{
#codec => json
#}
}
View Code
下面程式碼片段為 springboot中將日誌輸入到 tcp
1 根據使用的日誌框架匯入相應的包,我這裡用的logback
<dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>4.11</version> </dependency>View Code
2 配置logback,關於logback的配置規則可以參考我上一篇部落格。
<appender name="logstashshow" class="net.logstash.logback.appender.LogstashTcpSocketAppender"> <destination>127.0.0.1:1111</destination> <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"></encoder> </appender> <logger name="com.dfsn.cloud.consumer" level="INFO" additivity="false"> <appender-ref ref="logstashshow"></appender-ref> </logger>View Code
當應用啟動後,會額外的啟動一個埠,將日誌輸入到該埠,Logstash監聽該埠,接收日誌。最後給出一個Logback官方地址,所有的配置都可以找到。
https://www.elastic.co/guide/en/logstash/current/index.html
Kibana
Kibana是一個檢視app,對Elasticsearch中的日誌,做分析檢視。
Kibana只需要修改config配置檔案下的kibana.yml檔案即可。
server.port: 5601
server.host: "192.168.31.77"
elasticsearch.hosts: ["http://192.168.31.77:8001"]
kibana.index: ".kibana"
View Code
預設的 Kibana 也不支援 root 使用者啟動,可以設定 --allow-root 忽略檢查。
kibana --allow-root
nohup bin/kibana--allow-root &
截至目前我對Kibana運用的也十分生疏,給出一個部落格吧。
https://blog.csdn.net/qq_18769269/article/details/80843810