一塞琼、搜索引擎基礎(chǔ)
搜索引擎是倒排索引赠叼,Elasticsearch必須成為索引才支持查詢
搜索引擎兩大組件:
搜索組件:搜索數(shù)據(jù)扒袖,運(yùn)行查詢胰蝠,將查詢結(jié)構(gòu)顯示給用戶
索引組件:將獲得的數(shù)據(jù)構(gòu)建成能夠讓搜索引擎中的搜索功能完成數(shù)據(jù)查詢
搜索引擎關(guān)鍵組件: 顯示數(shù)據(jù)-->獲取數(shù)據(jù)-->構(gòu)建文檔-->分析文檔(切詞,詞法分析等操作震蒋,正規(guī)化的過程)-->索引文檔--->索引(相當(dāng)于數(shù)據(jù)庫)---> 運(yùn)行搜索-->構(gòu)建搜索-->將結(jié)果呈現(xiàn)個(gè)用戶
索引部分:lucene茸塞、sphinx
搜索部分:Solr(單機(jī)版,構(gòu)建集群不容易)查剖、Elasticsearch(集群服務(wù))
lucene:分析文檔钾虐,索引文檔,索引笋庄,需要爬蟲相關(guān)組件來獲取數(shù)據(jù)效扫,組合使用
Elasticsearch:搜索組件,只提供搜索直砂,支持分布式
可以使多個(gè)多個(gè)分析器菌仁。構(gòu)建查詢,運(yùn)行查詢静暂,把查詢結(jié)果呈現(xiàn)個(gè)用戶
Elasticsearch和lucene實(shí)現(xiàn)的功能:分析分檔济丘,索引分檔,索引洽蛀,構(gòu)建查詢摹迷,運(yùn)行查詢,將查詢結(jié)果呈現(xiàn)個(gè)用戶(命令行模式)郊供,缺少獲取數(shù)據(jù)和簡(jiǎn)單版的用戶界面需要其他組件來實(shí)現(xiàn)
用戶界面:kibana
抓取數(shù)據(jù)組件:站內(nèi)分析峡碉,如日志分析,需要在需要抓取數(shù)據(jù)服務(wù)器安裝agent從而獲取數(shù)據(jù)
構(gòu)建文檔:將不是文檔的內(nèi)容構(gòu)建成文檔的格式驮审,將文檔發(fā)送給lucene鲫寄,然后才能完成以后的工作
實(shí)現(xiàn)抓取數(shù)據(jù)和構(gòu)建文檔的組件:logstash,即使服務(wù)端疯淫,又是agent塔拳,又能抓取數(shù)據(jù),又能構(gòu)建文檔峡竣,但是比較重量級(jí)靠抑,不適合放在分布式文件系統(tǒng),替換組件filebeat适掰,只充當(dāng)agnet颂碧,將數(shù)據(jù)發(fā)送給logstash荠列,構(gòu)建文檔發(fā)送給elasticsearch處理
倒排索引
切詞,并且標(biāo)記每一個(gè)詞出現(xiàn)的次數(shù)和出現(xiàn)在那一個(gè)文檔中
詞頻:出現(xiàn)在同一個(gè)文件中的次數(shù)越多载城,權(quán)限越高肌似,出現(xiàn)在其他文檔中次數(shù)越多,權(quán)限越低诉瓦,根據(jù)一個(gè)算法來搜索:TF-IDF
Elasticsearch相關(guān)概念
lucene:組織成文檔才能進(jìn)行分析
index:相當(dāng)于關(guān)系型數(shù)據(jù)庫中的database
type:相當(dāng)于關(guān)系型數(shù)據(jù)庫中的table
document:相當(dāng)于關(guān)系型數(shù)據(jù)庫中的行
elasticsearch集群屬于無中心節(jié)點(diǎn)性川队,會(huì)將所有查詢發(fā)送給所有節(jié)點(diǎn)
常用結(jié)構(gòu)
redis消息隊(duì)列防止數(shù)據(jù)將logstash壓垮,若redis的消息隊(duì)列過長(zhǎng)睬澡,說明logstash負(fù)載過大固额,所以在增加一個(gè)即可
日志搜索存儲(chǔ)的組合:
- es+filebeat
- es+logstash server+filebeat
- es+logstash server+redis+filebeat
- es+fluentd
二、Elasticsearch安裝及集群配置
Elasticsearch安裝,需要部署JVM環(huán)境
1.官方往網(wǎng)站https://www.elastic.co/downloads/elasticsearch煞聪,選擇所需要的版本下載
2.安裝
[root@~]# rpm -ivh elasticsearch-5.6.10.rpm
3.軟件包文件說明
配置文件相關(guān)
/etc/elasticsearch/elasticsearch.yml:主配置文件
/etc/elasticsearch/jvm.options:JVM的配置文件斗躏,其中包括一些調(diào)堆內(nèi)存的配置
/etc/elasticsearch/log4j2.properties :elasticsearch日志相關(guān)
elasticsearch.service:?jiǎn)?dòng)的unit file
程序文件:
/usr/share/elasticsearch/bin/elasticsearch
/usr/share/elasticsearch/bin/elasticsearch-keystore
/usr/share/elasticsearch/bin/elasticsearch-plugin:管理插件程序
端口相關(guān):
- 搜索服務(wù)端口:tcp/ 9200
- 集群相關(guān)端口:tcp/9300
所有節(jié)點(diǎn)選舉一個(gè)主節(jié)點(diǎn),負(fù)責(zé)調(diào)整整個(gè)集群的狀態(tài)昔脯,其中啄糙,急群眾的每一個(gè)服務(wù)都是正常的則為green狀態(tài),若數(shù)據(jù)不丟失的情況下?lián)p壞一個(gè)節(jié)點(diǎn)則為yellow狀態(tài)云稚,若集群中有節(jié)點(diǎn)損壞隧饼,并且數(shù)據(jù)也有損壞則為red狀態(tài)
4.集群服務(wù)配置相關(guān)
因?yàn)樗械募憾紩?huì)有一個(gè)問題那就是如果集群之間若發(fā)生網(wǎng)絡(luò)故障,那么就會(huì)有發(fā)生腦裂的可能静陈,所以所有的集群服務(wù)節(jié)點(diǎn)都需要是奇數(shù)桑李,而且有一個(gè)超過半數(shù)的一般才會(huì)繼續(xù)提供服務(wù),所以以下實(shí)驗(yàn)是根據(jù)3個(gè)節(jié)點(diǎn)搭建的集群服務(wù)
版本說明:各個(gè)組件需要使用相同版本
主配置文件參數(shù)說明
cluster.name: myes #集群名稱窿给,來識(shí)別一個(gè)集群內(nèi)的所有節(jié)點(diǎn)
node.name:hostname #定義主機(jī)名
node.attr.rack:r1 #機(jī)架感知贵白,大型網(wǎng)絡(luò)常用,分片時(shí)不會(huì)分到同一個(gè)機(jī)架上
path.data:數(shù)據(jù)路徑崩泡,需要修改路徑的屬主數(shù)組
path.logs:日志路徑禁荒,需要修改路徑的屬主數(shù)組
bootstrap.memory_lock: true #是否鎖定內(nèi)存
network.host #綁定的IP地址,監(jiān)聽的地址
http.port:9200 #監(jiān)聽端口
discovery.zen.ping.unicast.hosts: ["172.18.100.2", "172.18.100.6","172.18.100.7"] #因?yàn)镋lasticsearch在集群之間是單播角撞,所以需要將集群中每一個(gè)地址都填到此處
discovery.zen.minimum_master_nodes: 1 #防止腦裂
gateway.reconver_after_nodes #重啟后擁有幾個(gè)節(jié)點(diǎn)才會(huì)激活集群
查看命令
curl -XGET http://192.168.1.1:9200/ #顯示頭部信息呛伴, 一些版本信息
curl -XGET http://192.168.1.1:9200/_cluster/health?pretty=true #集群健康狀態(tài)
curl -XGET http://192.168.1.1:9200/_cluster/state?pretty #統(tǒng)計(jì)數(shù)據(jù),包括各個(gè)節(jié)點(diǎn)信息等等
curl -XGET http://192.168.1.1:9200/_cat/ #查看各種信息
curl -XGET http://192.168.1.1:9200/_cat/indices #查看索引列表
curl -XGET http://192.168.1.1:9200/_cat/nodes #查看節(jié)點(diǎn)
curl -XPUT 'http://192.168.1.1:9200/索引名/' #創(chuàng)建索引
curl -XPUT http://192.168.1.1:9200/索引名/類型名/1 -d '{"key": "值"},{"key": "值"}' #創(chuàng)建文檔支持5.6版本
curl -H "Content -Type: application/json" -XPUT http://192.168.1.1:9200/索引名/類型名/1 -d '{"key": "值"},{"key": "值"}' #6版本需要自己添加首部信息
curl -XGET http://192.168.1.1:9200/索引名/_search?pretty #搜索指定索引中有那些type
curl -XDELETE http://192.168.1.1:9200/索引名/類型名稱/文檔編號(hào) #刪除文檔
RESTful表征狀態(tài)轉(zhuǎn)移
搜索語句
查詢:
ELS:很多API
_cluster, _cat, _search
curl -X GET '<SCHEME://<HOST>:<PORT>/[INDEX/TYPE/]_search?q=KEYWORD&sort=DOMAIN:[asc|desc]&from=#&size=#&_source=DOMAIN_LIST'
/_search:搜索所有的索引和類型谒所;
/INDEX_NAME/_search:搜索指定的單個(gè)索引热康;
/INDEX1,INDEX2/_search:搜索指定的多個(gè)索引;
/s*/_search:搜索所有以s開頭的索引劣领;
/INDEX_NAME/TYPE_NAME/_search:搜索指定的單個(gè)索引的指定類型姐军;
簡(jiǎn)單字符串的語法格式
http://lucene.apache.org/core/6_6_0/queryparser/org/apache/lucene/queryparser/classic/package-summary.html#package.description
查詢類型:Query DSL,簡(jiǎn)單字符串;
文本匹配的查詢條件:
(1) q=KEYWORD, 相當(dāng)于q=_all:KEYWORD
(2) q=DOMAIN:KEYWORD
{
"name" : "Docker in Action",
"publisher" : "wrox",
"datatime" : "2015-12-01",
"author" : "Blair"
}
_all: "Docker in Action Wrox 2015-12-01 Blair"
curl http://192.168.1.1:9200/books/_search?q=book_name:docker&pretty=tree&size=10
三奕锌、日志收集工具logstash高度插件化著觉,支持很多種插件
數(shù)據(jù)導(dǎo)入工具,可以充當(dāng)服務(wù)器惊暴,也可以當(dāng)agent饼丘,但是比較重量級(jí),系統(tǒng)資源消耗比較大辽话,可以使用filebeat或者fluentd來充當(dāng)agent
1.官方網(wǎng)站https://www.elastic.co/downloads/logstash肄鸽,根據(jù)需要下載相對(duì)應(yīng)的軟件包
2.安裝
[root@tomcat2 ~]# rpm -ivh logstash-5.6.10.rpm
3.軟件包文件說明
配置文件相關(guān)
/etc/logstash/conf.d:配置文件,設(shè)置輸入輸出和格式轉(zhuǎn)換等信息
/etc/logstash/jvm.options:JVM虛擬機(jī)的參數(shù)配置
/etc/logstash/log4j2.properties:日志相關(guān)
/etc/logstash/logstash.yml:主配置文件
啟動(dòng)相關(guān)
/usr/share/logstash/bin/logstash:?jiǎn)?dòng)油啤,可以用來測(cè)試配置文件和臨時(shí)啟動(dòng)
其中擴(kuò)展配置文件的主要格式
input{ 輸入插件
###定義輸入
}
filter{ #過濾插件
###過濾器
}
output{ #輸出插件
###輸出
}
4.幾種常用的輸入輸出和過濾器插件
input
1.標(biāo)準(zhǔn)輸入
input {
stdin {}
}
2.標(biāo)準(zhǔn)輸出
output {
stdout {
codec => rubydebug #編碼格式
codec => json #編碼格式
}
}
3.從文件輸入
input {
file{
path => ["文件路徑"] #文件典徘,可以為多個(gè)
start_position => "beginning(第一行)|end(最后讀取)" #首次啟動(dòng)從何處讀取
}
}
4.過濾器插件grok,轉(zhuǎn)換格式的插件村砂,將一個(gè)多個(gè)內(nèi)容分割出多行,并且將每一個(gè)段增加key屹逛,可以參考官方文檔础废,有直接寫好的模式,地址:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
freter{
grok {
match =>{
message => "%{變量}" #指定模式匹配罕模,進(jìn)行二次切分
patterns_dir #指定自己定義的模式文件
}
}
}
5.刪除全文數(shù)據(jù)message
filter{
grok{
match =>{
message => "%{變量}" #指定模式匹配评腺,進(jìn)行二次切分
}
remove_field => "message" #刪除指定字段
}
}
6.更改時(shí)間戳的日期格式date
filter{
grok{
match =>{
message => "%{變量}" #指定模式匹配,進(jìn)行二次切分
}
remove_field => "message" #刪除指定字段
}
date { #更改時(shí)間格式插件
match => ["timestamp","dd/MMM/YYYY:H:m:s Z"] #替換原有的@timestamp
remove_field => "timestamp" #刪除
}
}
7.按需求更改字段中的內(nèi)容淑掌,比如修改名等蒿讥。mutate
fiilter {
mutate{
rename => {
"agent" => "user_agent"
}
}
}
8.geoip插件,是根據(jù)IP地址來定義地域抛腕,但是需要各個(gè)IP地址的數(shù)據(jù)庫文件芋绸,可以下載網(wǎng)上下載IP地址搜索Maxmind組織,直到城市的位置担敌,有免費(fèi)摔敛,也有收費(fèi)版的
filter {
geoip {
source => "clientip" #客戶端IP地址的字段
target => "geoip" #根據(jù)geoip來定義位置
database => "數(shù)據(jù)庫地址" #生產(chǎn)環(huán)境需要定制計(jì)劃任務(wù),來更新地址
}
}
9.將數(shù)據(jù)保存至redis
* 從redis中取數(shù)據(jù)
input {
redis {
batch_count => 1 #一次讀取幾個(gè)數(shù)據(jù)
data_type => "list" #以什么格式存數(shù)據(jù),支持消息隊(duì)列和消息訂閱
key => "key" #創(chuàng)建鍵值名
host => "" #主機(jī)地址
port => 6379 #端口
threads => 5 #開幾個(gè)進(jìn)程來響應(yīng)
}
}
* 將數(shù)據(jù)存入redis
output{
redis {
data_type => "channel" #消息訂閱
key => "logstash-%{+yyy.MM.dd}"
}
}
10.將數(shù)據(jù)存入elasticsearch中
output {
elasticsearch {
hosts => ["http://node1:9200/","http://node2:9200/","http://node3:9200/"]
user => "ec18487808b6908009d3"
password => "efcec6a1e0"
index => "logstash-%{+YYYY.MM.dd}" #索引名稱
document_type => "apache_logs" #類型名稱
}
}
四全封、kibana基礎(chǔ)配置
kibana是圖形化顯示工具
配置相關(guān)
/etc/kibana/kibana.yml
server.port:5601 #監(jiān)聽端口
server.host: "0.0.0.0" #通訊地址
server.basePath "" #對(duì)外通過什么rul輸出信息马昙,默認(rèn)/
server.name: #主機(jī)名
elasticsearch.url:"" #指向els集群,若有Nginx反向代理刹悴,直接填寫即可
elasticsearch.preserverHost: true #是否顯示反向代理時(shí)的主機(jī)頭
kibana.index: "kibana" #元數(shù)據(jù)
###ssl功能也可以設(shè)置
圖形配置
可視化配置
將多個(gè)圖整合到一塊展示
五行楞、filebeat,用來獲取本地?cái)?shù)據(jù)土匀,并將數(shù)據(jù)轉(zhuǎn)發(fā)給如redis等服務(wù)
相關(guān)配置文件
/etc/filebeat/filebeat.full.yml #模板文件
/etc/filebeat/filebeat.yml #主配置文件
filebeat.prospectors:
configurations.
- input_type: log
paths.
paths:
- /var/log/httpd/access_log* #日志路徑
redis相關(guān)配置
output.redis:
hosts: ["172.18.100.4:6379"]
port: 6379
key: filebeat #key的名字
password: centos #密碼
db: 0 #默認(rèn)存入那個(gè)數(shù)據(jù)庫
datatype: list #數(shù)據(jù)類型
worker: 2 #開機(jī)個(gè)進(jìn)程
loadbalance: true #是否隨機(jī)發(fā)送給多臺(tái)redis服務(wù)器