Elasticsearch使用

一塞琼、搜索引擎基礎(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è)用戶


image.png

索引部分: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)


image.png

redis消息隊(duì)列防止數(shù)據(jù)將logstash壓垮,若redis的消息隊(duì)列過長(zhǎng)睬澡,說明logstash負(fù)載過大固额,所以在增加一個(gè)即可
日志搜索存儲(chǔ)的組合:
  1. es+filebeat
  2. es+logstash server+filebeat
  3. es+logstash server+redis+filebeat
  4. 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高度插件化著觉,支持很多種插件

1.png

數(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è)置

圖形配置


image.png

可視化配置


image.png

image.png

將多個(gè)圖整合到一塊展示
image.png

五行楞、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ù)器

基于filebeat+redis+logstash+elasticseach+

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末子房,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌池颈,老刑警劉巖尾序,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異躯砰,居然都是意外死亡每币,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門琢歇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來兰怠,“玉大人,你說我怎么就攤上這事李茫〗冶#” “怎么了?”我有些...
    開封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵魄宏,是天一觀的道長(zhǎng)秸侣。 經(jīng)常有香客問我,道長(zhǎng)宠互,這世上最難降的妖魔是什么味榛? 我笑而不...
    開封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮予跌,結(jié)果婚禮上搏色,老公的妹妹穿的比我還像新娘。我一直安慰自己券册,他們只是感情好频轿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著烁焙,像睡著了一般航邢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上骄蝇,一...
    開封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天翠忠,我揣著相機(jī)與錄音,去河邊找鬼乞榨。 笑死秽之,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的吃既。 我是一名探鬼主播考榨,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼鹦倚!你這毒婦竟也來了河质?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎掀鹅,沒想到半個(gè)月后散休,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乐尊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年戚丸,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片扔嵌。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡限府,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痢缎,到底是詐尸還是另有隱情胁勺,我是刑警寧澤,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布独旷,位于F島的核電站署穗,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏嵌洼。R本人自食惡果不足惜案疲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望咱台。 院中可真熱鬧络拌,春花似錦俭驮、人聲如沸回溺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遗遵。三九已至,卻和暖如春逸嘀,著一層夾襖步出監(jiān)牢的瞬間车要,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來泰國打工崭倘, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留翼岁,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓司光,卻偏偏與公主長(zhǎng)得像琅坡,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子残家,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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