Elastic+logstash+head簡(jiǎn)單介紹
一. 概述
ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
二.ElasticSearch的安裝與簡(jiǎn)單配置
1.1. 應(yīng)該始終運(yùn)行最新版本的 Java 虛擬機(jī)( JVM ), 除非 Elasticsearch 網(wǎng)站上另有說明。? Elasticsearch, 特別是 Lucene,是一個(gè)高要求的軟件。Lucene 的單元測(cè)試和集成測(cè)試經(jīng)常暴露出 JVM 本身的 bug。這些 bug 的范圍從輕微的麻煩到嚴(yán)重段錯(cuò)誤,所以,最好盡可能的使用最新版本的 JVM
1.2. 下載ElasticSearch
下載地址:https://www.elastic.co/downloads/elasticsearch
如下載最新版本請(qǐng)點(diǎn)TAR,其他版本請(qǐng)點(diǎn)擊 past releases選擇
1.3.? 解壓安裝包
1.4. 目錄講解:
1. bin:包含運(yùn)行ElasticSearch實(shí)例和管理插件的一些腳本
2. Config: 主要是一些設(shè)置文件,如logging,elasticsearch.yml,jvm
3. Lib:包含相關(guān)的包文件等
4. Plugins:包含相關(guān)的插件文件等
5. Logs:日志文件
6. Data:數(shù)據(jù)存放地址
1.5. 零配置啟動(dòng)
直接進(jìn)入bin目錄下,啟動(dòng)腳本elasticsearch
./elasticsearch
會(huì)顯示如下錯(cuò)誤:
(1).java.lang.RuntimeException: can not run elasticsearch as root
這是由于elastic之前因?yàn)閞oot超級(jí)權(quán)限下啟動(dòng)引發(fā)過血案,所有強(qiáng)制不讓在root下啟動(dòng) 。解決方案:
添加elastic啟動(dòng)用戶:
useradd syliu
passwd syliu
chown -R syliu:syliu elasticsearch-6.1.3
su syliu #
然后進(jìn)入bin目錄下啟動(dòng)./elasticsearch
(2).max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
這是由于linux下最大打開文件數(shù)量比elastic要求的打開數(shù)量少
查看系統(tǒng)最大打開文件數(shù)量
- ulimit -a (查看)
- ulimit -n 65536(設(shè)置)
或者:
切換到root用戶修改
vim /etc/security/limits.conf
(3).max number of threads [3889] for user [syliu] is too low, increase to at least [4096]
vi /etc/security/limits.d/90-nproc.conf
vim /etc/security/limits.conf
(4).max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf配置文件,
cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144
如果不存在則添加
echo "vm.max_map_count=262144" >>/etc/sysctl.conf
1.6. 到此,環(huán)境配置完成,重新啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功
訪問http://localhost:9200 后會(huì)顯示成功提示
(1) name:elastic實(shí)例名,設(shè)置可以在config/elasticsearch.yml中配置
(2) Version:版本號(hào),以json格式表示的一組信息。
① Name: 當(dāng)前版本號(hào)
② build_snapshot:是否從源碼構(gòu)建而來
③ lucene_version:基于lucene的版本
1.7. 簡(jiǎn)單配置elastic集群
1. cluster.name:集群名稱。設(shè)置好以后會(huì)根據(jù)同一集群名字自動(dòng)發(fā)現(xiàn)同一網(wǎng)段下的節(jié)點(diǎn),如果在同一網(wǎng)段下有多個(gè)集群,可以根據(jù)這個(gè)字段區(qū)分集群
2. Node.name:節(jié)點(diǎn)名稱,可以自動(dòng)生成節(jié)點(diǎn)名稱,這里配置是有利于利用api訪問具體的節(jié)點(diǎn),建議自己配置
3. Node.master:節(jié)點(diǎn)是否為master主節(jié)點(diǎn)-----每個(gè)節(jié)點(diǎn)都可被配置為主節(jié)點(diǎn)。默認(rèn)值為true,目的是指定該節(jié)點(diǎn)是否有資格被選舉成為node。默認(rèn)集群中第一臺(tái)集群為master。如果這臺(tái)機(jī)器出現(xiàn)故障,集群會(huì)自動(dòng)重新選舉
4. Node.data:設(shè)置節(jié)點(diǎn)是否存儲(chǔ)數(shù)據(jù),默認(rèn)為true,如果不希望存儲(chǔ),則設(shè)置為false
客戶節(jié)點(diǎn)配置:
Node.master:true
Node.data:false
數(shù)據(jù)節(jié)點(diǎn)配置:
Node.master:false
Node.data:true
5. Network.host: 綁定監(jiān)聽I(yíng)P,提供外界訪問
6. Transport.tcp.port:設(shè)置節(jié)點(diǎn)間交互的tcp端口
7. Discovery.zen.ping.unicast.hosts:設(shè)置集群中master節(jié)點(diǎn)的初始列表-通過這些節(jié)點(diǎn)來自動(dòng)發(fā)現(xiàn)新加入的集群
8. discovery.zen.ping_timeout:設(shè)置集群中自動(dòng)發(fā)現(xiàn)其他節(jié)點(diǎn)時(shí)ping連接超時(shí)時(shí)間-默認(rèn)為3秒。對(duì)于比較差的網(wǎng)絡(luò)環(huán)境可以加大值來防止自動(dòng)發(fā)現(xiàn)時(shí)出錯(cuò)
9. client.transport.ping_timeout:客戶端連接ping的最大超時(shí)時(shí)間
10. bootstrap.memory_lock:true 鎖定內(nèi)存,防止內(nèi)存交換
11. http.port:綁定監(jiān)聽ip的端口號(hào),默認(rèn)9200
12. path.data:數(shù)據(jù)存放位置,最好不要放在默認(rèn)安裝目錄下,這樣卸載了會(huì)引起數(shù)據(jù)丟失,可以保存到不同的目錄下,最好掛載到不同的磁盤上
配置方法如下:path.data: /path/to/data1,/path/to/data2
啟動(dòng)elastic會(huì)發(fā)現(xiàn)報(bào)錯(cuò):
memory locking requested for elasticsearch process but memory is not locked
解決辦法:
vim /etc/security/limits.conf
Syliu soft memlock unlimited
Syliu hard memlock unlimited
修改:
/etc/sysctl.conf
vm.swappiness=0
到此:配置完成,然后將本配置,將本配置拷貝到其他節(jié)點(diǎn)下,注意修改node.name.
如果配置在同一臺(tái)服務(wù)器下其他節(jié)點(diǎn)還需要修改端口號(hào),以免端口被占用
三.Logstash的簡(jiǎn)單配置與安裝
1.1? Logstash是一個(gè)能有效進(jìn)行日志處理的工具,可以對(duì)日志進(jìn)行收集,分析。其本身并不產(chǎn)生日志,它只是一個(gè)內(nèi)置分析和轉(zhuǎn)換工具的日志管理工具,是一個(gè)接收,處理,轉(zhuǎn)發(fā)日志的’管道’。
1.2 下載logstash
下載地址:https://www.elastic.co/downloads/logstash
下載壓縮包,解壓
1.3 進(jìn)入bin目錄下創(chuàng)建.conf文件作為啟動(dòng)文件
Logstash處理事件有三個(gè)階段:輸入Inputs,過濾Filters,輸出OutPuts
具體參閱:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/stdin.html 或者h(yuǎn)ttps://www.elastic.co/guide/en/logstash/current/input-plugins.html
1.指定file為讀取文件的方式:
input {
file {
type => "guoan"
path => "F:/logs/guoanjia/guoanjia/*.log"
codec => json { charset => "GBK" }
start_position => "beginning"
}
}
type: 標(biāo)記事件類型? 集成java的時(shí)候需要用到。還可以根據(jù)type值做一些過濾的操作
path:為某個(gè)絕對(duì)路徑文件夾下所有以.log結(jié)尾的文件為數(shù)據(jù)源
codec: 編碼插件: codec 就是用來 decode、encode 事件的
指定輸入到logstash的格式為json格式的,指定字符集為中文
start_position:從什么位置開始讀取文件數(shù)據(jù),默認(rèn)是結(jié)束位置
把這個(gè)設(shè)定改成 "beginning",logstash 進(jìn)程就從頭開始讀取
除此之外還有一些配置有時(shí)候需要手動(dòng)配上:
discover_interval:logstash 每隔多久去檢查一次被監(jiān)聽的 path 下是否有新文件。默認(rèn)值是 15 秒
exclude:不想被監(jiān)聽的文件可以排除出去
stat_interval:logstash 每隔多久檢查一次被監(jiān)聽文件狀態(tài)(是否有更新),默認(rèn)是 1 秒
******注意:start_position 僅在該文件從未被監(jiān)聽過的時(shí)候起作用。如果 sincedb 文件中已經(jīng)有這個(gè)文件的 inode 記錄了,那么 logstash 依然會(huì)從記錄過的 pos 開始讀取數(shù)據(jù)。所以重復(fù)測(cè)試的時(shí)候每回需要?jiǎng)h除 sincedb 文件。
2. 通過TCP套接字讀取事件。
input {
tcp {
host =>127.0.0.1
port => 8999
mode => "server"
ssl_enable => false
type => "guoan3"
codec => json { charset => "GBK" }
}
}
可以接受來自客戶端的連接或連接到服務(wù)器,具體取決于mode。
編輯
mode
值可以是任何的:server,client
默認(rèn)值為 "server"
操作模式。server監(jiān)聽客戶端連接, client連接到服務(wù)器。
ssl_enable => false
啟用SSL(必須設(shè)置其他ssl_選項(xiàng)才能生效)
host:
值類型是字符串
默認(rèn)值為 "0.0.0.0"
當(dāng)模式是server,地址要監(jiān)聽。當(dāng)模式是client,連接到的地址
然后 需要在SpringBoot項(xiàng)目中加入 相應(yīng)的依賴:
日志配置文件(不是SpringBoot也可以):
利用本模式進(jìn)行數(shù)據(jù)的導(dǎo)入需要在springboot 配置文件中加入
server:
context-path: /agenthouseCutomer
port:8084
max-http-header-size: 10024
3. 利用logstash的 logstash-input-jdbc進(jìn)行與mysql數(shù)據(jù)的同步
進(jìn)入logstash的bin目錄下安裝插件
Logstash-plugin install logstash-input-jdbc
Input配置
4. 關(guān)于filter的配置
4.1 grok filter
127.0.0.1 POST /logs/getLog 12345 0.123
grok { match => {“message”=>“%{IP:client}%{WORD:method}%{URIPATHPARAM:url}%{NUMBER:count}%{NUMBER:money}”} }
可以將骯臟的非結(jié)構(gòu)化日志數(shù)據(jù)解析成結(jié)構(gòu)化和可查詢的數(shù)據(jù)
Grok作為數(shù)據(jù)結(jié)構(gòu)化工具,在logstash中默認(rèn)上百個(gè)grok變量,可以直接拿來使用
適合對(duì)syslog.apache log等可讀日志進(jìn)行分析
4.2 kv filter
對(duì)于諸如key-value 這種鍵值對(duì)數(shù)據(jù)進(jìn)行分析
如:user=國(guó)安1&url=111&method=main&ip=124.65.164.98&args=null
kv {
source => "message"
field_split => "&?"
}
解析出來格式
"method": "main",
ip": "124.65.164.98",
"message": "user=國(guó)安1&url=111&method=main&ip=124.65.164.98&args=null",
"url": "111",
"args": "null",
"user": "國(guó)安1"
4.3 geoip
geoip {
source => "ip"
fields => ["city_name", "country_code2", "country_name", "latitude", "longitude", "region_name"]
remove_field => ["[geoip][country_code3]", "[geoip][region_name]", "[geoip][continent_code]", "[geoip][timezone]", "[geoip][ip]"]
}
根據(jù)上面kv解析出來的ip字段進(jìn)行獲取詳細(xì)地理信息和經(jīng)緯度
響應(yīng):
"geoip": {
"city_name": "Beijing",
"latitude": 39.9289,
"country_code2": "CN",
"country_name": "China",
"longitude": 116.3883
},
5. 關(guān)于output配置
5.1 elasticsearch
elasticsearch {
hosts => "127.0.0.1:9200"
#index => "guoan88881234"
index => "guoerror-%{+YYYY.MM.dd}"
user => elastic
password => changeme
retry_on_conflict => 5
}
將logstash中數(shù)據(jù)輸入到elasticsearch中:
hosts:ip加端口號(hào),或者域名
index:代表每天以guoerror-開頭生成索引
user:elasticsearch的用戶名
password:代表elasticsearch的密碼
retry_on_conflict:輸出重試次數(shù)
5.2 email
email {
port => "25" 端口
address => "smtp.126.com" 地址
username => "lsy4723@126.com"? 用戶
password => "*****" 客戶端授權(quán)密碼 適用于登錄以下服務(wù): POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)
authentication => "plain" 固定
use_tls => false
from => "lsy4723@126.com"
subject=> "Warning: 系統(tǒng)出錯(cuò)了!%{@timestamp}-%{type}-%{logger_name}"
to => "lsy4723@163.com"
via => "smtp"
body => "%{stack_trace}"
? ? ? ? }
6. 啟動(dòng)logstash
配置完成后windons下創(chuàng)建 run.bat
寫入logstash -f guoan.conf 啟動(dòng)命令
或直接命令行l(wèi)ogstash -f guoan.conf啟動(dòng)
-f 參數(shù)意思 ‘文件’
作用是指定logstash配置文件
-e 參數(shù)的作用為執(zhí)行? 如:logstash -e ‘input{stdin{}} output{stout{}}’
除此之外,還有 -t,-l,-w,-p,-v
啟動(dòng)之前注意:
在config/logstash.yml中配置:
#pipeline管道線程數(shù),官方建議是等于CPU內(nèi)核數(shù)
pipeline.workers: 8
#pipeline管道實(shí)際output時(shí)的線程數(shù),一般小于或等于管道線程數(shù),建議等于cpu內(nèi)核數(shù)
pipeline.output.workers: 8
#單個(gè)工作線程在嘗試執(zhí)行過濾器和輸出之前收集的最大事件數(shù),默認(rèn)125; 數(shù)值越大,處理則通常更高效,但增加了內(nèi)存開銷; 某些硬件配置要求通過設(shè)置LS_HEAP_SIZE變量來增加JVM堆大小,以避免使用此選項(xiàng)導(dǎo)致性能下降; 此參數(shù)的值超過最佳范圍會(huì)導(dǎo)致由于頻繁的垃圾回收或與內(nèi)存不足異常相關(guān)的JVM崩潰而導(dǎo)致性能下降; 調(diào)整pipeline.batch.size設(shè)置大小可調(diào)整發(fā)送到Elasticsearch的批量請(qǐng)求的大小
pipeline.batch.size: 3000
#此設(shè)置調(diào)整Logstash管道的延遲,默認(rèn)5; 流水線批處理延遲是Logstash在當(dāng)前管道工作線程中接收到事件后等待新消息的最大時(shí)間(毫秒); 在此時(shí)間過后,Logstash開始執(zhí)行過濾器和輸出.Logstash在接收事件和在過濾器中處理該事件之間等待的最大時(shí)間是pipeline.batch.delay和pipeline.batch.size設(shè)置的乘積
pipeline.batch.delay: 100
四.Head 配置
1.在elasticsearch.yml配置跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
2. 下載 elasticsearch-head
https://github.com/mobz/elasticsearch-head
3. Npm install
Npm run start
或者去google商店搜索ElasticSearch-head插件,直接安裝即可使用
我得百度網(wǎng)盤:https://pan.baidu.com/s/1dkA1m9XECKSfpH65-qmE3Q
下載完之后加入谷歌擴(kuò)展程序即可使用
五.ElasticSearch優(yōu)化建議
1.調(diào)大系統(tǒng)的“最大打開文件數(shù)”,建議32k甚至64k
- ulimit -a (查看)
- ulimit -n 32000(設(shè)置)
2. 修改配置文件調(diào)整es的jvm內(nèi)存大小
修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建議設(shè)置一樣大,避免平凡的分配內(nèi)存,根據(jù)服務(wù)器內(nèi)存大小配置,一般分配60%左右(默認(rèn)256)
3.設(shè)置mlockall來鎖定進(jìn)程的物理內(nèi)存地址
- 避免交換(swapped)來提高性能
-修改文件 conf/elasticsearch.yml 中 bootstrap.mlockall:true
4.分片多的話可以提升建立索引的能力,5-20個(gè)比較合適,默認(rèn)5個(gè)
如果分片數(shù)過少或過多,都會(huì)導(dǎo)致檢索比較慢。分片數(shù)過多會(huì)導(dǎo)致檢索時(shí)打開比較多的文件,另外也會(huì)導(dǎo)致多臺(tái)服務(wù)器之間的通訊過慢。而分片數(shù)過少會(huì)導(dǎo)致單個(gè)分片索引過大,所以檢索速度會(huì)慢下來。建議單個(gè)分片最多儲(chǔ)存20G左右的索引數(shù)據(jù),所以,分片數(shù)=數(shù)據(jù)總量/20G
5.副本多的話,可以提升搜索能力,但是如果設(shè)置很多副本的話也會(huì)對(duì)服務(wù)器造成額外的壓力,因?yàn)樾枰綌?shù)據(jù),所以建議設(shè)置2-3個(gè)
PUT /gakj-1 { "settings": { "number_of_shards" : 5, "number_of_replicas" : 2 } }
6.定時(shí)優(yōu)化索引,segment越多,查詢速度越差
max_num_segments=1
7.去掉mappings _all域,索引創(chuàng)建時(shí)默認(rèn)會(huì)有_all域,這樣會(huì)給查詢帶來方面,但是增加索引時(shí)間和索引尺度
- "_all":{"enabled":"false"}
8.log輸出的水平默認(rèn)為trace,即查詢超過500ms即為慢查詢,就要打印日志,造成cpu和mem,io負(fù)載很高,把log輸出水平改為info,可減輕服務(wù)器的壓力
-修改ES_HOME/conf/logging.yaml文件
-或修改ES_HOME/conf/elasticsearch.yaml
六.Elastic安裝x-pack
安裝:進(jìn)入elastic 的bin下
命令:elasticsearch-plugin install x-pack
安裝完成后啟動(dòng)elasticsearch
初始化密碼:
bin/x-pack/setup-passwords auto
或者手動(dòng)設(shè)置密碼:
bin/x-pack/setup-passwords interactive
注意:x-pack目前部分功能是收費(fèi)的,試用期是一個(gè)月,基礎(chǔ)版需要申請(qǐng),基礎(chǔ)版免費(fèi)
七.ElasticSearch學(xué)習(xí)筆記及查詢語法
1.信息檢索與結(jié)果過濾
通過_source 返回指定的檢索字段集
2.kibana 中 sort排序不準(zhǔn)確的問題
3.match 檢索子句和_all參數(shù)的使用
匹配全部字段的檢索
4.match_phrase 在指定字段中匹配特定的檢索去
5.對(duì)于給定的內(nèi)容,query_string查詢使用查詢解析器來構(gòu)造實(shí)際的查詢
其中^2表示包含打開門鎖且其權(quán)重為2
6.prefix 找到某個(gè)字段以給定前綴開頭的文檔
7.range 范圍查詢
gte
大于或等于
gt
比...更棒
lte
小于或等于
lt
少于
8.more_like_this,fuzzy_like_this
查詢得到與所提供的文本相似的文檔
fields
like
9.multi_match 多字段中組合搜索
10.過濾查詢
查詢存在某個(gè)字段的日志
11.query_string 查詢
12.cat命令
1.GET /_cat
列出所有cat命令
2.GET /_cat/health?v
檢查集群健康狀況
3.GET /_cat/nodes?v
節(jié)點(diǎn)統(tǒng)計(jì)
4.GET /_cat/indices
獲取全部節(jié)點(diǎn)
13 設(shè)置最小節(jié)點(diǎn),防止腦裂,避免兩個(gè)主節(jié)點(diǎn)同時(shí)存在一個(gè)集群中
discovery.zen.minimum_master_nodes: 2
通過api修改正在運(yùn)行的節(jié)點(diǎn),設(shè)置最小節(jié)點(diǎn)
PUT /_cluster/settings
{
? ? ? ? ? "persistent" : {
? ? ? ? ? ? ? ? "discovery.zen.minimum_master_nodes" : 2
? ? }
? ? ? ? }
14.集群恢復(fù)方面的配置
阻止 Elasticsearch 在存在至少 8 個(gè)節(jié)點(diǎn)(數(shù)據(jù)節(jié)點(diǎn)或者 master 節(jié)點(diǎn))之前進(jìn)行數(shù)據(jù)恢復(fù)
gateway.recover_after_nodes: 8
配置集群中應(yīng)該有多少節(jié)點(diǎn),以及我們?cè)敢鉃檫@些節(jié)點(diǎn)等待多長(zhǎng)時(shí)間
gateway.expected_nodes: 10? ? ? gateway.recover_after_time: 5m
設(shè)置單播節(jié)點(diǎn)列表,防止節(jié)點(diǎn)無意加入集群
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
防止同一個(gè)分片(shard)的主副本存在同一個(gè)物理機(jī)上
cluster.routing.allocation.same_shard.host: true
允許 JVM 鎖住內(nèi)存,禁止操作系統(tǒng)交換出去
bootstrap.mlockall: true
15.配置elasticsearch不要去配置垃圾回收和線程池
設(shè)置堆內(nèi)存
export ES_HEAP_SIZE=1g 或 ./bin/elasticsearch -Xmx1g -Xms1g
確保堆內(nèi)存最小值( Xms )與最大值( Xmx )的大小是相同的,防止程序在運(yùn)行時(shí)改變堆內(nèi)存大小, 這是一個(gè)很耗系統(tǒng)資源的過程。
設(shè)置禁用內(nèi)存交換 或 降低swappiness 的值
sudo swapoff -a? ? vm.swappiness = 1
16.查詢某個(gè)字段必須包含什么,必須排除什么
17.es內(nèi)置REST接口
1./index/_search 搜索指定索引下的數(shù)據(jù)
2./_aliases? 獲取或操作索引的別名
3./index/type/? 創(chuàng)建或操作類型
4./index/_mapping 創(chuàng)建或操作mapping
5./index/_settings? 創(chuàng)建或操作設(shè)置(number_of_shards 是不可更改的)
6./index/_open 打開指定被關(guān)閉的索引
7./index/_close 關(guān)閉指定索引
8./index/refresh? 刷新索引(使新加內(nèi)容對(duì)索引可見,不保證數(shù)據(jù)被寫入磁盤)
9./index/_flush? 刷新索引(會(huì)觸發(fā)lucene提交)
18.term查詢指定的精確值
19.使用 constant_score 查詢以非評(píng)分模式來執(zhí)行 term 查詢并以一作為統(tǒng)一評(píng)分
內(nèi)部過濾器的操作:
1.查找匹配文檔
term查詢?cè)诘古潘饕胁檎野搕erm的所有文檔,它描述了哪個(gè)文檔會(huì)包含該 term 。匹配文檔的標(biāo)志位是 1
2.創(chuàng)建bitset(一個(gè)包含0和1的數(shù)組)
3.迭代bitset(s)
一旦為每個(gè)查詢生成了 bitsets ,Elasticsearch 就會(huì)循環(huán)迭代 bitsets 從而找到滿足所 有過濾條件的匹配文檔的集合。執(zhí)行順序是啟發(fā)式的,但一般來說先迭代稀疏的 bitset (因?yàn)樗梢耘懦舸罅康奈臋n)
4.增量使用計(jì)數(shù)
Elasticsearch 能夠緩存非評(píng)分查詢從而獲取更快的訪
20.bool過濾器
must
所有的語句都 必須(must) 匹配,與 AND 等價(jià)。
must_not
所有的語句都 不能(must not) 匹配,與 NOT 等價(jià)。
should
至少有一個(gè)語句要匹配,與 OR 等價(jià)。
21.terms查找多個(gè)精確值
22.創(chuàng)建文檔索引
PUT /gakj
{
? "settings": {
? ? "number_of_shards": 5
? },
? "mappings": {
? ? "guoanjia":{
? ? ? "properties": {
? ? ? ? "id" :
? ? ? ? {
? ? ? ? ? "type" : "long",
? ? ? ? ? "store": true
? ? ? ? ?
? ? ? ? },?
? ? ? ? "url" :
? ? ? ? {
? ? ? ? ? "type" : "text",
? ? ? ? ? "index" :true,
? ? ? ? ? "omit_norms": "true",
? ? ? ? ? "store": true
? ? ? ? }
? ? ? }
? ? }
? }
}
23。創(chuàng)建索引時(shí)添加默認(rèn)過期時(shí)間
PUT my_index?
{?
? "mappings": {?
? ? "my_type": {?
? ? ? "_ttl": {?
? ? ? ? "enabled": true,?
? ? ? ? "default": "5m"?
? ? ? }?
? ? }?
? }?
}?
如果不添加ttl過期參數(shù)則文檔默認(rèn)不過期
? d
天
? ms(默認(rèn))
毫秒
m
分鐘
24.ik分詞器集成
https://github.com/medcl/elasticsearch-analysis-ik
下載后在elastic/plugins下創(chuàng)建ik文件夾,將下載的解壓,然后根目錄下所有文件拷貝進(jìn)ik文件夾,重新啟動(dòng)服務(wù),完成安裝
PUT /mytest
{
? "mappings": {
? ? "iktest":{
? ? ? ? "properties": {
? ? ? ? ? ? "content": {
? ? ? ? ? ? ? ? "type": "text",
? ? ? ? ? ? ? ? "analyzer": "ik_max_word",
? ? ? ? ? ? ? ? "search_analyzer": "ik_max_word"
? ? ? ? ? ? }
? ? ? ? }
? ? }
? }
}
GET /mytest/_analyze
{
? "text":"生活總是這樣,就像貓的花色遠(yuǎn)不只一種",
? "tokenizer": "ik_max_word"
}
GET /testik/ik/_search
{
? "query": {
? ? "match": {
? ? ? "content": "自首"
? ? }
? },
? "highlight" : {
? ? ? ? "pre_tags" : ["<tag1>", "<tag2>"],
? ? ? ? "post_tags" : ["</tag1>", "</tag2>"],
? ? ? ? "fields" : {
? ? ? ? ? ? "content" : {}
? ? ? ? }
? ? }
}
25.關(guān)于elastic預(yù)先定義文檔結(jié)構(gòu)后添入新字段會(huì)自動(dòng)添加問題elastic給出明確的回答
PUT /my_index
{
? ? "mappings": {
? ? ? ? "my_type": {
? ? ? ? ? ? "dynamic":"strict",
? ? ? ? ? ? "properties": {
? ? ? ? ? ? ? ? "title":? { "type": "text"},
? ? ? ? ? ? ? ? "stash":? {
? ? ? ? ? ? ? ? ? ? "type":? ? "object",
? ? ? ? ? ? ? ? ? ? "dynamic":? true
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
默認(rèn)情況下,當(dāng)在文檔中找到先前未見的字段時(shí),Elasticsearch會(huì)將新字段添加到類型映射中。object 通過將dynamic參數(shù)設(shè)置為false(忽略新字段)或設(shè)置為strict(在遇到未知字段時(shí)拋出異常),可以在文檔和級(jí)別禁用此行為
Elastic+logstash+head簡(jiǎn)單介紹
一. 概述
ElasticSearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful web接口。
二.ElasticSearch的安裝與簡(jiǎn)單配置
1.1. 應(yīng)該始終運(yùn)行最新版本的 Java 虛擬機(jī)( JVM ), 除非 Elasticsearch 網(wǎng)站上另有說明。? Elasticsearch, 特別是 Lucene,是一個(gè)高要求的軟件。Lucene 的單元測(cè)試和集成測(cè)試經(jīng)常暴露出 JVM 本身的 bug。這些 bug 的范圍從輕微的麻煩到嚴(yán)重段錯(cuò)誤,所以,最好盡可能的使用最新版本的 JVM
1.2. 下載ElasticSearch
下載地址:https://www.elastic.co/downloads/elasticsearch
如下載最新版本請(qǐng)點(diǎn)TAR,其他版本請(qǐng)點(diǎn)擊 past releases選擇
1.3.? 解壓安裝包
1.4. 目錄講解:
1. bin:包含運(yùn)行ElasticSearch實(shí)例和管理插件的一些腳本
2. Config: 主要是一些設(shè)置文件,如logging,elasticsearch.yml,jvm
3. Lib:包含相關(guān)的包文件等
4. Plugins:包含相關(guān)的插件文件等
5. Logs:日志文件
6. Data:數(shù)據(jù)存放地址
1.5. 零配置啟動(dòng)
直接進(jìn)入bin目錄下,啟動(dòng)腳本elasticsearch
./elasticsearch
會(huì)顯示如下錯(cuò)誤:
(1).java.lang.RuntimeException: can not run elasticsearch as root
這是由于elastic之前因?yàn)閞oot超級(jí)權(quán)限下啟動(dòng)引發(fā)過血案,所有強(qiáng)制不讓在root下啟動(dòng) 。解決方案:
添加elastic啟動(dòng)用戶:
useradd syliu
passwd syliu
chown -R syliu:syliu elasticsearch-6.1.3
su syliu #
然后進(jìn)入bin目錄下啟動(dòng)./elasticsearch
(2).max file descriptors [65535] for elasticsearch process is too low, increase to at least [65536]
這是由于linux下最大打開文件數(shù)量比elastic要求的打開數(shù)量少
查看系統(tǒng)最大打開文件數(shù)量
- ulimit -a (查看)
- ulimit -n 65536(設(shè)置)
或者:
切換到root用戶修改
vim /etc/security/limits.conf
(3).max number of threads [3889] for user [syliu] is too low, increase to at least [4096]
vi /etc/security/limits.d/90-nproc.conf
vim /etc/security/limits.conf
(4).max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144]
修改/etc/sysctl.conf配置文件,
cat /etc/sysctl.conf | grep vm.max_map_count
vm.max_map_count=262144
如果不存在則添加
echo "vm.max_map_count=262144" >>/etc/sysctl.conf
1.6. 到此,環(huán)境配置完成,重新啟動(dòng)項(xiàng)目,項(xiàng)目啟動(dòng)成功
訪問http://localhost:9200 后會(huì)顯示成功提示
(1) name:elastic實(shí)例名,設(shè)置可以在config/elasticsearch.yml中配置
(2) Version:版本號(hào),以json格式表示的一組信息。
① Name: 當(dāng)前版本號(hào)
② build_snapshot:是否從源碼構(gòu)建而來
③ lucene_version:基于lucene的版本
1.7. 簡(jiǎn)單配置elastic集群
1. cluster.name:集群名稱。設(shè)置好以后會(huì)根據(jù)同一集群名字自動(dòng)發(fā)現(xiàn)同一網(wǎng)段下的節(jié)點(diǎn),如果在同一網(wǎng)段下有多個(gè)集群,可以根據(jù)這個(gè)字段區(qū)分集群
2. Node.name:節(jié)點(diǎn)名稱,可以自動(dòng)生成節(jié)點(diǎn)名稱,這里配置是有利于利用api訪問具體的節(jié)點(diǎn),建議自己配置
3. Node.master:節(jié)點(diǎn)是否為master主節(jié)點(diǎn)-----每個(gè)節(jié)點(diǎn)都可被配置為主節(jié)點(diǎn)。默認(rèn)值為true,目的是指定該節(jié)點(diǎn)是否有資格被選舉成為node。默認(rèn)集群中第一臺(tái)集群為master。如果這臺(tái)機(jī)器出現(xiàn)故障,集群會(huì)自動(dòng)重新選舉
4. Node.data:設(shè)置節(jié)點(diǎn)是否存儲(chǔ)數(shù)據(jù),默認(rèn)為true,如果不希望存儲(chǔ),則設(shè)置為false
客戶節(jié)點(diǎn)配置:
Node.master:true
Node.data:false
數(shù)據(jù)節(jié)點(diǎn)配置:
Node.master:false
Node.data:true
5. Network.host: 綁定監(jiān)聽I(yíng)P,提供外界訪問
6. Transport.tcp.port:設(shè)置節(jié)點(diǎn)間交互的tcp端口
7. Discovery.zen.ping.unicast.hosts:設(shè)置集群中master節(jié)點(diǎn)的初始列表-通過這些節(jié)點(diǎn)來自動(dòng)發(fā)現(xiàn)新加入的集群
8. discovery.zen.ping_timeout:設(shè)置集群中自動(dòng)發(fā)現(xiàn)其他節(jié)點(diǎn)時(shí)ping連接超時(shí)時(shí)間-默認(rèn)為3秒。對(duì)于比較差的網(wǎng)絡(luò)環(huán)境可以加大值來防止自動(dòng)發(fā)現(xiàn)時(shí)出錯(cuò)
9. client.transport.ping_timeout:客戶端連接ping的最大超時(shí)時(shí)間
10. bootstrap.memory_lock:true 鎖定內(nèi)存,防止內(nèi)存交換
11. http.port:綁定監(jiān)聽ip的端口號(hào),默認(rèn)9200
12. path.data:數(shù)據(jù)存放位置,最好不要放在默認(rèn)安裝目錄下,這樣卸載了會(huì)引起數(shù)據(jù)丟失,可以保存到不同的目錄下,最好掛載到不同的磁盤上
配置方法如下:path.data: /path/to/data1,/path/to/data2
啟動(dòng)elastic會(huì)發(fā)現(xiàn)報(bào)錯(cuò):
memory locking requested for elasticsearch process but memory is not locked
解決辦法:
vim /etc/security/limits.conf
Syliu soft memlock unlimited
Syliu hard memlock unlimited
修改:
/etc/sysctl.conf
vm.swappiness=0
到此:配置完成,然后將本配置,將本配置拷貝到其他節(jié)點(diǎn)下,注意修改node.name.
如果配置在同一臺(tái)服務(wù)器下其他節(jié)點(diǎn)還需要修改端口號(hào),以免端口被占用
三.Logstash的簡(jiǎn)單配置與安裝
1.1? Logstash是一個(gè)能有效進(jìn)行日志處理的工具,可以對(duì)日志進(jìn)行收集,分析。其本身并不產(chǎn)生日志,它只是一個(gè)內(nèi)置分析和轉(zhuǎn)換工具的日志管理工具,是一個(gè)接收,處理,轉(zhuǎn)發(fā)日志的’管道’。
1.2 下載logstash
下載地址:https://www.elastic.co/downloads/logstash
下載壓縮包,解壓
1.3 進(jìn)入bin目錄下創(chuàng)建.conf文件作為啟動(dòng)文件
Logstash處理事件有三個(gè)階段:輸入Inputs,過濾Filters,輸出OutPuts
具體參閱:http://udn.yyuap.com/doc/logstash-best-practice-cn/input/stdin.html 或者h(yuǎn)ttps://www.elastic.co/guide/en/logstash/current/input-plugins.html
1.指定file為讀取文件的方式:
input {
file {
type => "guoan"
path => "F:/logs/guoanjia/guoanjia/*.log"
codec => json { charset => "GBK" }
start_position => "beginning"
}
}
type: 標(biāo)記事件類型? 集成java的時(shí)候需要用到。還可以根據(jù)type值做一些過濾的操作
path:為某個(gè)絕對(duì)路徑文件夾下所有以.log結(jié)尾的文件為數(shù)據(jù)源
codec: 編碼插件: codec 就是用來 decode、encode 事件的
指定輸入到logstash的格式為json格式的,指定字符集為中文
start_position:從什么位置開始讀取文件數(shù)據(jù),默認(rèn)是結(jié)束位置
把這個(gè)設(shè)定改成 "beginning",logstash 進(jìn)程就從頭開始讀取
除此之外還有一些配置有時(shí)候需要手動(dòng)配上:
discover_interval:logstash 每隔多久去檢查一次被監(jiān)聽的 path 下是否有新文件。默認(rèn)值是 15 秒
exclude:不想被監(jiān)聽的文件可以排除出去
stat_interval:logstash 每隔多久檢查一次被監(jiān)聽文件狀態(tài)(是否有更新),默認(rèn)是 1 秒
******注意:start_position 僅在該文件從未被監(jiān)聽過的時(shí)候起作用。如果 sincedb 文件中已經(jīng)有這個(gè)文件的 inode 記錄了,那么 logstash 依然會(huì)從記錄過的 pos 開始讀取數(shù)據(jù)。所以重復(fù)測(cè)試的時(shí)候每回需要?jiǎng)h除 sincedb 文件。
2. 通過TCP套接字讀取事件。
input {
tcp {
host =>127.0.0.1
port => 8999
mode => "server"
ssl_enable => false
type => "guoan3"
codec => json { charset => "GBK" }
}
}
可以接受來自客戶端的連接或連接到服務(wù)器,具體取決于mode。
編輯
mode
值可以是任何的:server,client
默認(rèn)值為 "server"
操作模式。server監(jiān)聽客戶端連接, client連接到服務(wù)器。
ssl_enable => false
啟用SSL(必須設(shè)置其他ssl_選項(xiàng)才能生效)
host:
值類型是字符串
默認(rèn)值為 "0.0.0.0"
當(dāng)模式是server,地址要監(jiān)聽。當(dāng)模式是client,連接到的地址
然后 需要在SpringBoot項(xiàng)目中加入 相應(yīng)的依賴:
日志配置文件(不是SpringBoot也可以):
利用本模式進(jìn)行數(shù)據(jù)的導(dǎo)入需要在springboot 配置文件中加入
server:
context-path: /agenthouseCutomer
port:8084
max-http-header-size: 10024
3. 利用logstash的 logstash-input-jdbc進(jìn)行與mysql數(shù)據(jù)的同步
進(jìn)入logstash的bin目錄下安裝插件
Logstash-plugin install logstash-input-jdbc
Input配置
4. 關(guān)于filter的配置
4.1 grok filter
127.0.0.1 POST /logs/getLog 12345 0.123
grok { match => {“message”=>“%{IP:client}%{WORD:method}%{URIPATHPARAM:url}%{NUMBER:count}%{NUMBER:money}”} }
可以將骯臟的非結(jié)構(gòu)化日志數(shù)據(jù)解析成結(jié)構(gòu)化和可查詢的數(shù)據(jù)
Grok作為數(shù)據(jù)結(jié)構(gòu)化工具,在logstash中默認(rèn)上百個(gè)grok變量,可以直接拿來使用
適合對(duì)syslog.apache log等可讀日志進(jìn)行分析
4.2 kv filter
對(duì)于諸如key-value 這種鍵值對(duì)數(shù)據(jù)進(jìn)行分析
如:user=國(guó)安1&url=111&method=main&ip=124.65.164.98&args=null
kv {
source => "message"
field_split => "&?"
}
解析出來格式
"method": "main",
ip": "124.65.164.98",
"message": "user=國(guó)安1&url=111&method=main&ip=124.65.164.98&args=null",
"url": "111",
"args": "null",
"user": "國(guó)安1"
4.3 geoip
geoip {
source => "ip"
fields => ["city_name", "country_code2", "country_name", "latitude", "longitude", "region_name"]
remove_field => ["[geoip][country_code3]", "[geoip][region_name]", "[geoip][continent_code]", "[geoip][timezone]", "[geoip][ip]"]
}
根據(jù)上面kv解析出來的ip字段進(jìn)行獲取詳細(xì)地理信息和經(jīng)緯度
響應(yīng):
"geoip": {
"city_name": "Beijing",
"latitude": 39.9289,
"country_code2": "CN",
"country_name": "China",
"longitude": 116.3883
},
5. 關(guān)于output配置
5.1 elasticsearch
elasticsearch {
hosts => "127.0.0.1:9200"
#index => "guoan88881234"
index => "guoerror-%{+YYYY.MM.dd}"
user => elastic
password => changeme
retry_on_conflict => 5
}
將logstash中數(shù)據(jù)輸入到elasticsearch中:
hosts:ip加端口號(hào),或者域名
index:代表每天以guoerror-開頭生成索引
user:elasticsearch的用戶名
password:代表elasticsearch的密碼
retry_on_conflict:輸出重試次數(shù)
5.2 email
email {
port => "25" 端口
address => "smtp.126.com" 地址
username => "lsy4723@126.com"? 用戶
password => "*****" 客戶端授權(quán)密碼 適用于登錄以下服務(wù): POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服務(wù)
authentication => "plain" 固定
use_tls => false
from => "lsy4723@126.com"
subject=> "Warning: 系統(tǒng)出錯(cuò)了!%{@timestamp}-%{type}-%{logger_name}"
to => "lsy4723@163.com"
via => "smtp"
body => "%{stack_trace}"
? ? ? ? }
6. 啟動(dòng)logstash
配置完成后windons下創(chuàng)建 run.bat
寫入logstash -f guoan.conf 啟動(dòng)命令
或直接命令行l(wèi)ogstash -f guoan.conf啟動(dòng)
-f 參數(shù)意思 ‘文件’
作用是指定logstash配置文件
-e 參數(shù)的作用為執(zhí)行? 如:logstash -e ‘input{stdin{}} output{stout{}}’
除此之外,還有 -t,-l,-w,-p,-v
啟動(dòng)之前注意:
在config/logstash.yml中配置:
#pipeline管道線程數(shù),官方建議是等于CPU內(nèi)核數(shù)
pipeline.workers: 8
#pipeline管道實(shí)際output時(shí)的線程數(shù),一般小于或等于管道線程數(shù),建議等于cpu內(nèi)核數(shù)
pipeline.output.workers: 8
#單個(gè)工作線程在嘗試執(zhí)行過濾器和輸出之前收集的最大事件數(shù),默認(rèn)125; 數(shù)值越大,處理則通常更高效,但增加了內(nèi)存開銷; 某些硬件配置要求通過設(shè)置LS_HEAP_SIZE變量來增加JVM堆大小,以避免使用此選項(xiàng)導(dǎo)致性能下降; 此參數(shù)的值超過最佳范圍會(huì)導(dǎo)致由于頻繁的垃圾回收或與內(nèi)存不足異常相關(guān)的JVM崩潰而導(dǎo)致性能下降; 調(diào)整pipeline.batch.size設(shè)置大小可調(diào)整發(fā)送到Elasticsearch的批量請(qǐng)求的大小
pipeline.batch.size: 3000
#此設(shè)置調(diào)整Logstash管道的延遲,默認(rèn)5; 流水線批處理延遲是Logstash在當(dāng)前管道工作線程中接收到事件后等待新消息的最大時(shí)間(毫秒); 在此時(shí)間過后,Logstash開始執(zhí)行過濾器和輸出.Logstash在接收事件和在過濾器中處理該事件之間等待的最大時(shí)間是pipeline.batch.delay和pipeline.batch.size設(shè)置的乘積
pipeline.batch.delay: 100
四.Head 配置
1.在elasticsearch.yml配置跨域支持
http.cors.enabled: true
http.cors.allow-origin: "*"
2. 下載 elasticsearch-head
https://github.com/mobz/elasticsearch-head
3. Npm install
Npm run start
或者去google商店搜索ElasticSearch-head插件,直接安裝即可使用
我得百度網(wǎng)盤:https://pan.baidu.com/s/1dkA1m9XECKSfpH65-qmE3Q
下載完之后加入谷歌擴(kuò)展程序即可使用
五.ElasticSearch優(yōu)化建議
1.調(diào)大系統(tǒng)的“最大打開文件數(shù)”,建議32k甚至64k
- ulimit -a (查看)
- ulimit -n 32000(設(shè)置)
2. 修改配置文件調(diào)整es的jvm內(nèi)存大小
修改bin/elasticsearch.in.sh中ES_MIN_MEM和ES_MAX_MEM的大小,建議設(shè)置一樣大,避免平凡的分配內(nèi)存,根據(jù)服務(wù)器內(nèi)存大小配置,一般分配60%左右(默認(rèn)256)
3.設(shè)置mlockall來鎖定進(jìn)程的物理內(nèi)存地址
- 避免交換(swapped)來提高性能
-修改文件 conf/elasticsearch.yml 中 bootstrap.mlockall:true
4.分片多的話可以提升建立索引的能力,5-20個(gè)比較合適,默認(rèn)5個(gè)
如果分片數(shù)過少或過多,都會(huì)導(dǎo)致檢索比較慢。分片數(shù)過多會(huì)導(dǎo)致檢索時(shí)打開比較多的文件,另外也會(huì)導(dǎo)致多臺(tái)服務(wù)器之間的通訊過慢。而分片數(shù)過少會(huì)導(dǎo)致單個(gè)分片索引過大,所以檢索速度會(huì)慢下來。建議單個(gè)分片最多儲(chǔ)存20G左右的索引數(shù)據(jù),所以,分片數(shù)=數(shù)據(jù)總量/20G
5.副本多的話,可以提升搜索能力,但是如果設(shè)置很多副本的話也會(huì)對(duì)服務(wù)器造成額外的壓力,因?yàn)樾枰綌?shù)據(jù),所以建議設(shè)置2-3個(gè)
PUT /gakj-1 { "settings": { "number_of_shards" : 5, "number_of_replicas" : 2 } }
6.定時(shí)優(yōu)化索引,segment越多,查詢速度越差
max_num_segments=1
7.去掉mappings _all域,索引創(chuàng)建時(shí)默認(rèn)會(huì)有_all域,這樣會(huì)給查詢帶來方面,但是增加索引時(shí)間和索引尺度
- "_all":{"enabled":"false"}
8.log輸出的水平默認(rèn)為trace,即查詢超過500ms即為慢查詢,就要打印日志,造成cpu和mem,io負(fù)載很高,把log輸出水平改為info,可減輕服務(wù)器的壓力
-修改ES_HOME/conf/logging.yaml文件
-或修改ES_HOME/conf/elasticsearch.yaml
六.Elastic安裝x-pack
安裝:進(jìn)入elastic 的bin下
命令:elasticsearch-plugin install x-pack
安裝完成后啟動(dòng)elasticsearch
初始化密碼:
bin/x-pack/setup-passwords auto
或者手動(dòng)設(shè)置密碼:
bin/x-pack/setup-passwords interactive
注意:x-pack目前部分功能是收費(fèi)的,試用期是一個(gè)月,基礎(chǔ)版需要申請(qǐng),基礎(chǔ)版免費(fèi)
七.ElasticSearch學(xué)習(xí)筆記及查詢語法
1.信息檢索與結(jié)果過濾
通過_source 返回指定的檢索字段集
2.kibana 中 sort排序不準(zhǔn)確的問題
3.match 檢索子句和_all參數(shù)的使用
匹配全部字段的檢索
4.match_phrase 在指定字段中匹配特定的檢索去
5.對(duì)于給定的內(nèi)容,query_string查詢使用查詢解析器來構(gòu)造實(shí)際的查詢
其中^2表示包含打開門鎖且其權(quán)重為2
6.prefix 找到某個(gè)字段以給定前綴開頭的文檔
7.range 范圍查詢
gte
大于或等于
gt
比...更棒
lte
小于或等于
lt
少于
8.more_like_this,fuzzy_like_this
查詢得到與所提供的文本相似的文檔
fields
like
9.multi_match 多字段中組合搜索
10.過濾查詢
查詢存在某個(gè)字段的日志
11.query_string 查詢
12.cat命令
1.GET /_cat
列出所有cat命令
2.GET /_cat/health?v
檢查集群健康狀況
3.GET /_cat/nodes?v
節(jié)點(diǎn)統(tǒng)計(jì)
4.GET /_cat/indices
獲取全部節(jié)點(diǎn)
13 設(shè)置最小節(jié)點(diǎn),防止腦裂,避免兩個(gè)主節(jié)點(diǎn)同時(shí)存在一個(gè)集群中
discovery.zen.minimum_master_nodes: 2
通過api修改正在運(yùn)行的節(jié)點(diǎn),設(shè)置最小節(jié)點(diǎn)
PUT /_cluster/settings
{
? ? ? ? ? "persistent" : {
? ? ? ? ? ? ? ? "discovery.zen.minimum_master_nodes" : 2
? ? }
? ? ? ? }
14.集群恢復(fù)方面的配置
阻止 Elasticsearch 在存在至少 8 個(gè)節(jié)點(diǎn)(數(shù)據(jù)節(jié)點(diǎn)或者 master 節(jié)點(diǎn))之前進(jìn)行數(shù)據(jù)恢復(fù)
gateway.recover_after_nodes: 8
配置集群中應(yīng)該有多少節(jié)點(diǎn),以及我們?cè)敢鉃檫@些節(jié)點(diǎn)等待多長(zhǎng)時(shí)間
gateway.expected_nodes: 10? ? ? gateway.recover_after_time: 5m
設(shè)置單播節(jié)點(diǎn)列表,防止節(jié)點(diǎn)無意加入集群
discovery.zen.ping.unicast.hosts: ["host1", "host2:port"]
防止同一個(gè)分片(shard)的主副本存在同一個(gè)物理機(jī)上
cluster.routing.allocation.same_shard.host: true
允許 JVM 鎖住內(nèi)存,禁止操作系統(tǒng)交換出去
bootstrap.mlockall: true
15.配置elasticsearch不要去配置垃圾回收和線程池
設(shè)置堆內(nèi)存
export ES_HEAP_SIZE=1g 或 ./bin/elasticsearch -Xmx1g -Xms1g
確保堆內(nèi)存最小值( Xms )與最大值( Xmx )的大小是相同的,防止程序在運(yùn)行時(shí)改變堆內(nèi)存大小, 這是一個(gè)很耗系統(tǒng)資源的過程。
設(shè)置禁用內(nèi)存交換 或 降低swappiness 的值
sudo swapoff -a? ? vm.swappiness = 1
16.查詢某個(gè)字段必須包含什么,必須排除什么
17.es內(nèi)置REST接口
1./index/_search 搜索指定索引下的數(shù)據(jù)
2./_aliases? 獲取或操作索引的別名
3./index/type/? 創(chuàng)建或操作類型
4./index/_mapping 創(chuàng)建或操作mapping
5./index/_settings? 創(chuàng)建或操作設(shè)置(number_of_shards 是不可更改的)
6./index/_open 打開指定被關(guān)閉的索引
7./index/_close 關(guān)閉指定索引
8./index/refresh? 刷新索引(使新加內(nèi)容對(duì)索引可見,不保證數(shù)據(jù)被寫入磁盤)
9./index/_flush? 刷新索引(會(huì)觸發(fā)lucene提交)
18.term查詢指定的精確值
19.使用 constant_score 查詢以非評(píng)分模式來執(zhí)行 term 查詢并以一作為統(tǒng)一評(píng)分
內(nèi)部過濾器的操作:
1.查找匹配文檔
term查詢?cè)诘古潘饕胁檎野搕erm的所有文檔,它描述了哪個(gè)文檔會(huì)包含該 term 。匹配文檔的標(biāo)志位是 1
2.創(chuàng)建bitset(一個(gè)包含0和1的數(shù)組)
3.迭代bitset(s)
一旦為每個(gè)查詢生成了 bitsets ,Elasticsearch 就會(huì)循環(huán)迭代 bitsets 從而找到滿足所 有過濾條件的匹配文檔的集合。執(zhí)行順序是啟發(fā)式的,但一般來說先迭代稀疏的 bitset (因?yàn)樗梢耘懦舸罅康奈臋n)
4.增量使用計(jì)數(shù)
Elasticsearch 能夠緩存非評(píng)分查詢從而獲取更快的訪
20.bool過濾器
must
所有的語句都 必須(must) 匹配,與 AND 等價(jià)。
must_not
所有的語句都 不能(must not) 匹配,與 NOT 等價(jià)。
should
至少有一個(gè)語句要匹配,與 OR 等價(jià)。
21.terms查找多個(gè)精確值
22.創(chuàng)建文檔索引
PUT /gakj
{
? "settings": {
? ? "number_of_shards": 5
? },
? "mappings": {
? ? "guoanjia":{
? ? ? "properties": {
? ? ? ? "id" :
? ? ? ? {
? ? ? ? ? "type" : "long",
? ? ? ? ? "store": true
? ? ? ? ?
? ? ? ? },?
? ? ? ? "url" :
? ? ? ? {
? ? ? ? ? "type" : "text",
? ? ? ? ? "index" :true,
? ? ? ? ? "omit_norms": "true",
? ? ? ? ? "store": true
? ? ? ? }
? ? ? }
? ? }
? }
}
23。創(chuàng)建索引時(shí)添加默認(rèn)過期時(shí)間
PUT my_index?
{?
? "mappings": {?
? ? "my_type": {?
? ? ? "_ttl": {?
? ? ? ? "enabled": true,?
? ? ? ? "default": "5m"?
? ? ? }?
? ? }?
? }?
}?
如果不添加ttl過期參數(shù)則文檔默認(rèn)不過期
? d
天
? ms(默認(rèn))
毫秒
m
分鐘
24.ik分詞器集成
https://github.com/medcl/elasticsearch-analysis-ik
下載后在elastic/plugins下創(chuàng)建ik文件夾,將下載的解壓,然后根目錄下所有文件拷貝進(jìn)ik文件夾,重新啟動(dòng)服務(wù),完成安裝
PUT /mytest
{
? "mappings": {
? ? "iktest":{
? ? ? ? "properties": {
? ? ? ? ? ? "content": {
? ? ? ? ? ? ? ? "type": "text",
? ? ? ? ? ? ? ? "analyzer": "ik_max_word",
? ? ? ? ? ? ? ? "search_analyzer": "ik_max_word"
? ? ? ? ? ? }
? ? ? ? }
? ? }
? }
}
GET /mytest/_analyze
{
? "text":"生活總是這樣,就像貓的花色遠(yuǎn)不只一種",
? "tokenizer": "ik_max_word"
}
GET /testik/ik/_search
{
? "query": {
? ? "match": {
? ? ? "content": "自首"
? ? }
? },
? "highlight" : {
? ? ? ? "pre_tags" : ["<tag1>", "<tag2>"],
? ? ? ? "post_tags" : ["</tag1>", "</tag2>"],
? ? ? ? "fields" : {
? ? ? ? ? ? "content" : {}
? ? ? ? }
? ? }
}
25.關(guān)于elastic預(yù)先定義文檔結(jié)構(gòu)后添入新字段會(huì)自動(dòng)添加問題elastic給出明確的回答
PUT /my_index
{
? ? "mappings": {
? ? ? ? "my_type": {
? ? ? ? ? ? "dynamic":"strict",
? ? ? ? ? ? "properties": {
? ? ? ? ? ? ? ? "title":? { "type": "text"},
? ? ? ? ? ? ? ? "stash":? {
? ? ? ? ? ? ? ? ? ? "type":? ? "object",
? ? ? ? ? ? ? ? ? ? "dynamic":? true
? ? ? ? ? ? ? ? }
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
默認(rèn)情況下,當(dāng)在文檔中找到先前未見的字段時(shí),Elasticsearch會(huì)將新字段添加到類型映射中。object 通過將dynamic參數(shù)設(shè)置為false(忽略新字段)或設(shè)置為strict(在遇到未知字段時(shí)拋出異常),可以在文檔和級(jí)別禁用此行為