Elastic+logstash+head簡(jiǎn)單介紹

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í)別禁用此行為

















?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容