一.搜索引擎的介紹
(1)索引組件:獲取數(shù)據(jù)-->建立文檔-->文檔分析-->文檔索引(倒排索引)
(2)搜索組件:用戶搜索接口-->建立查詢(將用戶鍵入的信息轉(zhuǎn)換為可處理的查詢對象)-->搜索查詢-->展現(xiàn)結(jié)果
索引組件:Lucene(apache 旗下的產(chǎn)品)
Lucene Core:Apache Lucene? 是一個高性能仅胞,全功能的文本搜索引擎庫,全部由Java編寫。其技術(shù)上幾乎適合任何需要全文搜索的應(yīng)用程序藐翎,尤其是對跨平臺的應(yīng)用碌更。
(3)搜索組件:Solr, ElasticSearch(基于Lucene core來工作的搜索組件)
- Solr(企業(yè)級搜索應(yīng)用服務(wù)器):是一個高性能溉跃,采用Java5開發(fā)引润,基于Lucene的全文搜索服務(wù)器宪赶。同時(shí)對其進(jìn)行了擴(kuò)展鹤树,提供了比Lucene更為豐富的查詢語言,同時(shí)實(shí)現(xiàn)了可配置逊朽、可擴(kuò)展并對查詢性能進(jìn)行了優(yōu)化罕伯,并且提供了一個完善的功能管理界面,是一款非常優(yōu)秀的全文搜索引擎叽讳。
- ElasticSearch: 是一個分布式的 RESTful 風(fēng)格的搜索和數(shù)據(jù)分析引擎追他,能夠解決不斷涌現(xiàn)出的各種用例。作為 Elastic Stack 的核心岛蚤,它集中存儲數(shù)據(jù)邑狸,可以發(fā)現(xiàn)意料之中以及意料之外的情況。
二.Elastic Stack
(1)ELK的組成
1.ElasticSearch
2.Logstash:
Logstash 是開源的服務(wù)器端數(shù)據(jù)處理管道涤妒,能夠同時(shí) 從多個來源采集數(shù)據(jù)单雾、轉(zhuǎn)換數(shù)據(jù),然后將數(shù)據(jù)發(fā)送到指定的的 “存儲庫” 中她紫。
3.Kibana:
Kibana 讓您能夠可視化 Elasticsearch 中的數(shù)據(jù)并操作 Elastic Stack硅堆,因此您可以在這里解開任何疑問。
4.Beats:
平臺集合了多種單一用途數(shù)據(jù)采集器贿讹。這些采集器安裝后可用作輕量型代理渐逃,從成百上千或成千上萬臺機(jī)器向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。
(2)ELS集群的工作邏輯
1.多播民褂,單播:9300(集群端口)/tcp茄菊,服務(wù)器端口:9200
2.關(guān)鍵因素:clustername
所有的節(jié)點(diǎn)選舉一個主節(jié)點(diǎn)疯潭,負(fù)責(zé)管理整個集群狀態(tài)以及各shards(切片,默認(rèn)切為5個分片)的分布式方式
三種狀態(tài):green yellow red
green:健康狀態(tài)面殖,所有主副切片都存在
Yellow:缺少某些切片竖哩,但是可以恢復(fù)
red:缺少某些切片,并且不可恢復(fù)
3.實(shí)驗(yàn):創(chuàng)建一個小的集群
步驟:
(1)配置三個節(jié)點(diǎn)并安裝ES,官方下載地址:www.elastic.co選擇download——選擇rpm包進(jìn)行下載
因?yàn)樵撍阉饕媸腔趈ava語言開發(fā)的所以要安裝jvm
yum install java-1.8.0-openjdk-devel,其他兩個節(jié)點(diǎn)做相同操作
(2)創(chuàng)建新的目錄
mkdir -pv /els/{data,logs}
chown -R /els/*
(3)修改配置文件
vim /etc/elasticsearch/elasticsearch.yml
修改如下
cluster.name: myels1
node.name: node1
path.data: /els/data
path.logs: /els/logs
network.host: 172.18.254.242
http.port: 9200
discovery.zen.ping.unicast.hosts: ["node1", "node3","node4"]
discovery.zen.minimum_master_nodes: 2——選舉機(jī)制防止腦裂脊僚,同意機(jī)制必須超過半數(shù)
其他節(jié)點(diǎn)同上相叁,只需要將節(jié)點(diǎn)名和network.host修改即可
啟動之前還要vim jvm.options
修改完成后systemctl start elasticsearch.service
觀察9200和9300端口是否打開
(4)使用curl進(jìn)行測試
curl -XGET '172.18.254.242:9200/'
curl -XGET '172.18.250.223:9200/'
curl -XGET '172.18.254.242:9200/_cluster/?pretty'——漂亮模式顯示
4.三個特殊端點(diǎn)
(1)/_cluster
curl -XGET '172.18.254.242:9200/_cluster/?pretty'——漂亮模式顯示
(2),/_cat
curl -XGET '172.18.254.242:9200/_cat/indices?pretty'
查看文檔命令,正常為空吃挑,所以可以使用-XPUT來創(chuàng)建文檔
實(shí)驗(yàn)創(chuàng)建一個書的文檔钝荡,名字為computer(分類名)
curl -XGET '172.18.254.242:9200/books/computer/1' -d '{
"name": "Elasticsearch in Action",——書的名字
"date": "DEC3,2015",——日期
"author": "Radu"——作者
}'
(3)/_search
curl -XGET '172.18.254.242:9200'/books/computer/_search?pretty' ——查看有關(guān)computer的所有匹配到文檔
curl -XGET '172.18.254.242:9200/books/computer/_search?pretty' -d '
{
"query": {
"match_all": {}
}
}'
屬于query模式的全部匹配模式
curl -XGET '172.18.254.242:9200/books/computer/_search?q=elasticsearch&pretty=true'
curl -XGET '172.18.254.242:9200/books/computer/_search?q=_all:kubernete&pretty=true'——查詢一本名叫kubernete的書
curl -XGET '172.18.254.242:9200/books/computer/_search?q=_all:kubernete~&pretty=true'——加入波浪符代表模糊匹配允許字符有一個不相同
(3)安裝elasticsearch-head插件
通過該插件可以實(shí)現(xiàn)在web端對elasticsearch集群的管理
1.vim /etc/elasticsearch/elasticsearch.yml
2.安裝head
git clone htttp://github.com/mobz/elasticsearch-head.git
cd elasticsearch-head
執(zhí)行npm install npm run start &——后臺啟動并運(yùn)行
ss -ntl 發(fā)現(xiàn)9100端口被打開
重啟elasticsearch.service
此時(shí)可以在web頁面上管理集群
三.logstash
在上述中已經(jīng)介紹了logstash的作用街立,其主要的作用就是對來源數(shù)據(jù)采集(input),轉(zhuǎn)換數(shù)據(jù)(filter),發(fā)送數(shù)據(jù)(output)到指定的存儲庫
在官網(wǎng)上下載www.ealstic.co/download/logstash-5.5.1.rpm
然后rpm -ivh logstash-5.5.1.rpm
rpm -ql logstash |less
/usr/share/logstash/bin/logstash --help來查看幫助
其中最常用的是-t和-f,-t用來檢查語法舶衬,-f指定要啟動哪個文件
- 例:
cd /etc/logstash/conf.d
vim test.conf
input {
stdin {}
}
output {
stdout {}
}
vim test.conf
input {
stdin {}
}
output {
stdout {
codec => rubydebug
}
}
logstash中三個重要的插件
1.input plugins
[圖片上傳中...(搜狗截圖20171207103040.png-91526f-1512613953070-0)]
2.filter plugins
3.output plugins
主要查件的介紹與使用
(1)input中的file方式來獲取數(shù)據(jù)
vim test.conf
input {
file {
path => ["/var/log/httpd/access_log"]
start_position => "beginning"
}
}
output {
stdout {
codec => rubydebug
}
}
在另一個客戶端訪問node4的httpd
curl http//:172.18.250.89/
執(zhí)行/usr/share/logstash/bin/logstash -f ./test.conf
(2)filter查件——grok
grok的作用是將各種描述信息按照需要進(jìn)行切分
vim test.conf
加入filter
input {
file {
path => ["/var/log/httpd/access_log"]
start_position => "beginning"
}
}
filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
}
output {
stdout {
codec => rubydebug
}
}
/usr/share/logstash/bin/logstash -f ./test.conf
(3)output的file文件
指定輸出內(nèi)容到某指定的路徑文件中去
vim test.conf
將output修改即可
output {
file {
path => ["/tmp/httpd_access_log.json"]
}
}
檢查語法沒有錯誤后,執(zhí)行test.conf
(4)output elasticsearch
output {
elasticsearch{
hosts=> ["http://172.18.254.242:9200","http://172.18.250.223:9200"]
index => "logstash-%{+YYYY.MM.dd}"
action => "index"——構(gòu)建索引
}
}
檢查語法正確就可以執(zhí)行
輸出的數(shù)據(jù)就會存儲到elasticsearch集群的并新建了一個logstash
在elasticsearch集群中使用curl命令來訪問node3
此時(shí)在elasticsearch集群中就可以查詢訪日的內(nèi)容
只搜索集群的某個地址
curl -XGET '172.18.250.223:9200/logstash-*/_search?q=clientip=172.18.250.223&pretty'
(5)beats插件
Beats 平臺集合了多種單一用途數(shù)據(jù)采集器赎离。這些采集器安裝后可用作輕量型代理逛犹,從成百上千或成千上萬臺機(jī)器向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。
官網(wǎng)下載beats
rpm -ql filebeat
注意:filebeat本身可以直接將輸出數(shù)據(jù)輸送到elasticsearch中梁剔,也可以先發(fā)送到logstash.service虽画,然后由logstash發(fā)送到elasticsearch中
本實(shí)驗(yàn)為了方便將filebeat和logstash放在同一主機(jī)上進(jìn)行運(yùn)行測試
配置文件 /etc/filebeat/filebeat.yml
vim /etc/filebeat/filebeat.yml
-input_type: log
paths:
- /var/log/httpd/access_log*
output.elasticsearch:
hosts: ["172.18.254.242:9200", "172.18.250.223:9200"]
protocol: "http"
上述配置是將輸出數(shù)據(jù)直接發(fā)送到elasticsearch中
curl命令測試一下
再次編輯filebeat.yml配置文件進(jìn)行修改,實(shí)現(xiàn)基于filebeat通過Logstash.service將數(shù)據(jù)發(fā)送到elasticsearch中
vim filebeat.yml
output.logstash:
hosts: ["172.18.250.89:5044"]
輸入不變荣病,只改變輸出類型即可
并且還要修改/etc/logstash/conf.d/test.conf
input {
beats {
port => 5044
}
}
此時(shí)不需要執(zhí)行/usr/share/logstash/bin/logstash -f ./test.conf
而是直接執(zhí)行
systemctl start logstash.service
systemctl restart filebeat.service
ss -ntl 5044端口打開
curl -XGET '172.18.250.223:9200/logstash-*/_search?pretty'
(6)mutate插件
filter {
grok {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
mutate {
rename => {
"clientip" => "client_ip"
}
}
date {
match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
}
}
curl -XGET '172.18.250.223:9200/logstash-*/_search?q=clientip=172.18.250.223&pretty'
(7)geoip
vim geoip.conf
input {
beats {
port => 5044
}
}
filter {
match => {
"message" => "%{COMBINEDAPACHELOG}"
}
}
date {
match => ["timestamp","dd/MMM/YYYY:H:m:s Z"]
}
geoip {
source => "clientip"
target => "geoip"
database => "/etc/logstash/GeoLite2-City.mmdb"
}
}
output {
elasticsearch{
hosts=> ["http://172.18.254.242:9200","http://172.18.250.223:9200"]
index => "logstash-%{+YYYY.MM.dd}"
action => "index"
}
}
echo '72.18.250.223 - - [07/Dec/2017:18:13:41 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0" >> /var/log/httpd/access_log
echo 202.18.250.223 - - [07/Dec/2017:18:13:41 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0" '>> /var/log/httpd/access_log
將公網(wǎng)ip追加到httpd的日志文件中码撰,否則用私網(wǎng)ip訪問是無法顯示ip地址的來源地區(qū)的
四.集群方式實(shí)現(xiàn)
具體實(shí)施步驟
(1)在node5上yum install java-1.8.0-openjdk-devel
rpm -ivh logstash-5.5.1.rpm
將之前的test.conf腳本復(fù)制到本機(jī)上
(2)在node6上 yum install httpd
rpm -ivh filebeat-5.5.1-x86_64.rpm
systemctl start httpd
vim /var/www/html/index.html
test node7
在elasticsearch中的服務(wù)上訪問Node6的http服務(wù)
(3)編輯filebeat的配置文件
paths
- /var/log/httpd/access_log
開啟output.logstash
hosts: ["172.18.250.62:5044"]——node5的ip地址
(4)在node5上配合redis服務(wù)
yum install redis
vim /etc/redis.conf
bind 0.0.0.0
requirepass magedu
啟動redis
(5)編輯redis-input.conf
vim /etc/logstash/conf.d/redis-input.conf
修改input即可
input {
redis{
host => "172.18.250.89"
port => 6379
data_type => "list"
db => "0"
key => "filebeat"
password => "magedu"
}
}
在Node6 vim /etc/filebeat/filebeat.yml
自定義output.redis
重啟filebeat.service
(6)在客戶端多訪問幾次Node6的http服務(wù)
redis-cli -a magedu
LINDEX filebeat 0
LINDEX filebeat 1
LINDEX filebeat 2
在node5上檢查redis.conf腳本沒有錯誤后
執(zhí)行該腳本
此時(shí)發(fā)現(xiàn)LINDEX中的filebeat文件消失了,這是因?yàn)閞edis中的filebeat數(shù)據(jù)被elasticsearch集群提走
綜上可以將上述中的geoip.conf最為conf.d的配置守護(hù)文件个盆,將其他文件移除到/root/目錄下脖岛,然后開啟logstash服務(wù)
五.基于kibana的集群訪問
(1)在node5上rpm -ivh kibana-5.5.1-x86_64.rpm
vim /etc/kibana/kibana.yml
開啟服務(wù)發(fā)現(xiàn)5601端口被打開
在web頁面打開kibana
(2)在node6上
cd /var/log/httpd/
while true; do echo "$[$RANDOM%224+1].$[$RANDOM%256].$[$RANDOM%256].$[$RANDOM%255+1] - - [07/Dec/2017:22:32:53 +0800] "GET / HTTP/1.1" 200 16 "-" "curl/7.29.0"" >> access_log;sleep 1;done
在kibana界面可以查詢訪問情況
此時(shí)就可以在kibana界面上來管理elasticsearch集群了
在kibana界面上可以觀察geoip的相關(guān)信息
也可以通過圖形的方式來進(jìn)行監(jiān)控和觀察
根據(jù)自身要求來創(chuàng)建圖形的顯示方式
創(chuàng)建新的視圖來顯示客戶端ip地址的地理位置
根據(jù)需要創(chuàng)建后來查看顯示結(jié)果
以上圖形如果想要以后繼續(xù)查看可以點(diǎn)擊save,并命令后保存即可
為了更好地視圖的體驗(yàn)颊亮,可以通過編輯Dashbord來中和兩個圖形
其他選項(xiàng)柴梆,如在Visualize中,選擇markdown進(jìn)行文本編輯