簡介
??ELK stack 是以Elasticsearch旁壮、Logstash潘拨、Kibana三個開源軟件為主的數(shù)據(jù)處理工具鏈蒋畜,在于實時數(shù)據(jù)檢索和分析場合卒暂,三個通常是配合使用啄栓,而且又先后歸于Elastic.co公司名下,故有此簡稱介却。在5.0版本之后又加入Elastic公司的Beats工具谴供,改名叫Elastic Stack。
ELK Stack有如下幾個優(yōu)點:
- 處理方式靈活齿坷。Elasticsearch 是實時全文索引桂肌,不需要像 storm 那樣預(yù)先編程才能使用;
- 配置簡易上手永淌。Elasticsearch 全部采用 JSON 接口崎场,Logstash 是 Ruby DSL 設(shè)計,都是目前業(yè)界最通用的配置語法設(shè)計遂蛀;
- 檢索性能高效谭跨。雖然每次查詢都是實時計算,但是優(yōu)秀的設(shè)計和實現(xiàn)基本可以達到全天數(shù)據(jù)查詢的秒級響應(yīng)李滴;
- 集群線性擴展螃宙。不管是 Elasticsearch 集群還是 Logstash 集群都是可以線性擴展的;
- 前端操作炫麗所坯。Kibana 界面上谆扎,只需要點擊鼠標(biāo),就可以完成搜索芹助、聚合功能堂湖,生成炫麗的儀表板。
- 而ELK Stack加入Beats中的filebeat之后更加優(yōu)秀状土,filebeat是一個輕量級的日志收集處理工具无蜂,F(xiàn)ilebeat占用資源少,適合于在各個服務(wù)器上搜集日志后傳輸給Logstash蒙谓,官方也推薦此工具斥季。
ELK Stack組成
通常情況下的ELK是由Elasticsearch、Logstash和Kibana組成累驮。
ELK之間的合作機制:
- L(logstash)作為作為信息收集者泻肯,主要是用來對日志的搜集渊迁、分析、過濾灶挟,支持大量的數(shù)據(jù)獲取方式琉朽,一般工作方式為c/s架構(gòu)区赵,client端安裝在需要收集日志的主機上峭梳,server端負(fù)責(zé)將收到的各節(jié)點日志進行過濾、修改等操作在一并發(fā)往elasticsearch上去积蔚。
- E(Elasticsearch)作為數(shù)據(jù)的保存者惕医,保存來自L(Logstash)收集的系統(tǒng)日志數(shù)據(jù)耕漱,并建立索引,以及提供之后對數(shù)據(jù)的檢索抬伺。
- K(Kibana)作為展示者螟够,主要是將ES上的數(shù)據(jù)通過頁面可視化的形式展現(xiàn)出來。包括可以通過語句查詢峡钓、安裝插件對指標(biāo)進行可視化等妓笙。
一、Logstash
??Logstash 項目誕生于 2009 年 8 月 2 日能岩。其作者是世界著名的運維工程師喬丹西塞(JordanSissel)
??2013 年寞宫,Logstash 被 Elasticsearch 公司收購,ELK Stack 正式成為官方用語(隨著 beats 的加入改名為 Elastic Stack)拉鹃。Elasticsearch 本身 也是近兩年最受關(guān)注的大數(shù)據(jù)項目之一辈赋,三次融資已經(jīng)超過一億美元。在 Elasticsearch 開發(fā)人員的共同努力下膏燕,Logstash 的發(fā)布機制钥屈,插件架構(gòu)也愈發(fā)科學(xué)和合理。
??Logstash 是一個具有實時渠道能力的數(shù)據(jù)收集引擎坝辫。使用 JRuby 語言編寫篷就。logstash就像是一根具備實時數(shù)據(jù)傳輸能力的管道,負(fù)責(zé)將數(shù)據(jù)信息從管道的輸入端傳輸?shù)焦艿赖妮敵龆朔埽慌c此同時這根管道還可以讓根據(jù)需求在中間加上濾網(wǎng),Logstash提供里很多功能強大的濾網(wǎng)以滿足各種應(yīng)用場景鸦泳。
Logstash 安裝
官方下載地址:https://www.elastic.co/downloads/logstash
1银锻、安裝JDK
[root@linux ~]# tar -xf jdk-8u211-linux-x64.tar.gz
[root@linux ~]# mv jdk-8u211 /usr/local/java
[root@linux ~]# vim /etc/profile.d/jdk.sh
JAVA_HOME=/usr/local/java
PATH=$PATH:JAVA_HOME/bin
export JAVA_HOME PATH
[root@linux ~]# java -version
java version "1.8.0_211"
Java(TM) SE Runtime Environment (build 1.8.0_191-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.191-b12, mixed mode)
2、安裝Logstash
[root@linux ~]# tar -xf logstash-6.5.4.tar.gz
[root@linux ~]# mv logstash-6.5.4 /usr/local/logstash
① Logstash的stdin標(biāo)準(zhǔn)輸入
標(biāo)準(zhǔn)輸入(屏幕輸入)
標(biāo)準(zhǔn)輸出(輸出屏幕)
[root@linux ~]# cd /usr/local/logstash/
[root@linux logstash]# mkdir -p etc/conf.d
[root@linux logstash]# vim etc/conf.d/stdin.conf
input {
stdin {}
}
output {
stdout {
codec => rubydebug
}
}
[root@linux logstash]# bin/logstash -f etc/conf.d/stdin.conf
② Logstash的file輸入文件
logstash只有第一次讀取文件的時候會讀取整個文件的內(nèi)容做鹰,而后只會讀取更新的記錄
vim etc/conf.d/file.conf
input {
file {
path => "var/log/message"
start_position => beginning
}
}
output {
stdout {
codec => rubydebug
}
}
參數(shù)
? discover_interval
logstash每隔多久去檢查一次被監(jiān)聽的目錄下是否有新文件击纬,默認(rèn)是15秒
? exclude
可以排除不想監(jiān)聽的文件
? sincedb_write_interval
logstash 每隔多久寫一次 sincedb 文件,默認(rèn)是 15 秒钾麸。
? stat_interval
logstash 每隔多久檢查一次被監(jiān)聽文件狀態(tài)(是否有更新)更振,默認(rèn)是 1 秒炕桨。
? start_position
logstash 從什么位置開始讀取文件數(shù)據(jù),默認(rèn)是結(jié)束位置肯腕,也就是說 logstash 進程會以類似 tail -F 的形式運行献宫。如果你是要導(dǎo)入原有數(shù)據(jù),把這個設(shè)定改成 "beginning"实撒,logstash 進程就從頭開始讀取姊途,有點類似 cat,但是讀到最后一行不會終止知态,而是繼續(xù)變成 tail -F捷兰。
start_position 僅在該文件從未被監(jiān)聽過的時候起作用。如果 sincedb 文件中已經(jīng)有這個文件的 inode 記錄了负敏,那么 logstash 依然會從記錄過的 pos 開始讀取數(shù)據(jù)贡茅。所以重復(fù)測試的時候每回需要刪除 sincedb 文件
③ Logstash的tcp讀取網(wǎng)絡(luò)數(shù)據(jù)
[root@linux logstash]vim etc/conf.d/tcp.conf
input {
tcp {
port => 666
}
}
output {
stdout {
codec => rubydebug
}
}
[root@linux ~]# nc 127.0.0.1 666 < a.txt
根據(jù)logstash這個特性,可以通過配置接受filebeat傳的數(shù)據(jù)
④ Logstash過濾器之grok正則匹配
Grok是logstash最重要的插件
grok模式的語法如下:
%{SYNTAX:SEMANTIC}
SYNTAX: 代表匹配值的類型其做,例如3.44可以用NUMBER類型所匹配顶考,127.0.0.1可以 使用IP類型匹配
SEMANTIC:代表存儲該值的一個變量名稱,例如 3.44 可能是一個事件的持續(xù)時間,127.0.0.1可能是請求的client地址。所以這兩個值可以用 %{NUMBER:duration} %{IP:client} 來匹配庶柿。
begin 123.456 end
%{WORD} %{NUMBER:request_time:float} %{WORD}
filter {
grok {
match => {"message" => "%{COMBINEDAPACHELOG} %{QS:x_forwarded_for}"}
}
}
⑤ Logstash過濾器之mutate數(shù)據(jù)修改
filters/mutate 插件是 Logstash 另一個重要插件村怪。它提供了豐富的基礎(chǔ)類型數(shù)據(jù)處理能力。包括類型轉(zhuǎn)換浮庐,字符串處理和字段處理等甚负。
類型轉(zhuǎn)換
可以設(shè)置的轉(zhuǎn)換類型包括:"integer","float" 和 "string"审残。示例如下:
filter {
mutate {
convert => ["request_time", "float"]
}
}
⑥ Logstash過濾器之mutate數(shù)據(jù)處理
字符串處理
split
filter {
mutate {
split => ["message", "|"]
}
}
隨意輸入一串以|分割的字符梭域,比如 "123|321|adfd|dfjld*=123"
join
僅對數(shù)組類型字段有效
filter {
mutate {
split => ["message", "|"]
}
mutate {
join => ["message", ","]
}
}
filter 區(qū)段之內(nèi),是順序執(zhí)行的搅轿。所以最后看到的輸出結(jié)果是:
字段處理
rename
重命名某個字段病涨,如果目的字段已經(jīng)存在,會被覆蓋掉:
filter {
mutate {
rename => ["host", "host_name"]
}
}
update
更新某個字段的內(nèi)容璧坟。如果字段不存在既穆,不會新建。
replace
作用和 update 類似雀鹃,但是當(dāng)字段不存在的時候幻工,它會起到 add_field 參數(shù)一樣的效果,自動添加新的字段黎茎。
⑦ Logstash過濾器之GeoIP地址查詢
GeoIP 是最常見的免費 IP 地址歸類查詢庫囊颅,同時也有收費版可以采購。GeoIP 庫可以根據(jù) IP 地址提供對應(yīng)的地域信息,包括國別踢代,省市盲憎,經(jīng)緯度等,對于可視化地圖和區(qū)域統(tǒng)計非常有用胳挎。
配置示例
filter {
geoip {
source => “message”
}
}
GeoIP 庫數(shù)據(jù)較多饼疙,如果不需要這么多內(nèi)容,可以通過 fields 選項指定自己所需要的串远。下例為全部可選內(nèi)容:
filter {
geoip {
fields => ["city_name", "continent_code", "country_code2", "country_code3", "country_name", "dma_code", "ip", "latitude", "longitude", "postal_code", "region_name", "timezone"]
}
}
⑧ Logstash過濾器之useragent匹配歸類
可以獲取瀏覽器版本宏多、型號以及系統(tǒng)版本
配置示例
filter {
useragent {
target => "ua"
source => "useragent"
}
}
⑨ Logstash過濾器之split拆分事件
split 拆分事件
可以把一行數(shù)據(jù),拆分成多個事件
配置示例
filter {
split {
field => "message"
terminator => "#"
}
}
在 intputs/stdin 的終端中輸入一行數(shù)據(jù):"test1#test2",輸出結(jié)果如下
⑩ Logstash的output配置
標(biāo)準(zhǔn)輸出(stdout)
配置示例
output {
stdout {
codec => rubydebug
}
}
保存成文件(file)
配置示例
output {
file {
path => "/path/to/%{+yyyy/MM/dd/HH}/%{host}.log.gz"
message_format => "%{message}"
gzip => true
}
}
output/file 插件首先需要注意的就是message_format參數(shù)澡罚。插件默認(rèn)是輸出整個event的json形式數(shù)據(jù)伸但。所以需要定義為%{message},前提是在之前的filter插件中留搔,沒有使用remove_field或者update等參數(shù)刪除或修改%{message}字段的內(nèi)容
保存進elasticsearch
配置示例
output {
elasticsearch {
host => “IP”
index => “l(fā)ogstash-%{type}-%{+YYYY.MM.dd}”
index_type => “%{type}”
}
}
index => "索引名” 寫入的elasticsearch索引的名稱更胖,可以使用變量。還提供了%{+YYYY.MM.dd}這種寫法隔显。此外却妨,索引名中不能有大寫字母。
輸出到redis
配置示例
input { stdin {} }
output {
redis {
data_type => “channel”
key => “l(fā)ogstash-chan-%{+yyyy.MM.dd}”
}
}
Logstash的配置文件
二括眠、Elasticsearch
Elasticsearch 來源于作者 Shay Banon 的第一個開源項目 Compass 庫彪标,而這個 Java 庫最初的目的只是為了給 Shay 當(dāng)時正在學(xué)廚師的妻子做一個菜譜的搜索引擎。2010 年掷豺,Elasticsearch 正式發(fā)布捞烟。至今已經(jīng)成為 GitHub 上最流行的 Java 項目,不過 Shay 承諾給妻子的菜譜搜索依然沒有面世……
2015 年初当船,Elasticsearch 公司召開了第一次全球用戶大會 Elastic{ON}15题画。諸多 IT 巨頭紛紛贊助,參會德频,演講苍息。會后,Elasticsearch 公司宣布改名 Elastic壹置,公司官網(wǎng)也變成 http://elastic.co/竞思。這意味著 Elasticsearch 的發(fā)展方向,不再限于搜索業(yè)務(wù)钞护,也就是說盖喷,Elastic Stack 等機器數(shù)據(jù)和 IT 服務(wù)領(lǐng)域成為官方更加注意的方向。隨后幾個月患亿,專注監(jiān)控報警的 Watcher 發(fā)布 beta 版传蹈,社區(qū)有名的網(wǎng)絡(luò)抓包工具 Packetbeat、多年專注于基于機器學(xué)習(xí)的異常探測 Prelert 等 ITOA 周邊產(chǎn)品紛紛被 Elastic 公司收購步藕。
Elasticsearch核心概念
cluster
代表一個集群惦界,集群中有多個節(jié)點,其中有一個為主節(jié)點咙冗,這個主節(jié)點是可以通過選舉產(chǎn)生的沾歪,主從節(jié)點是對于集群內(nèi)部來說的。es的一個概念就是去中心化雾消,字面上理解就是無中心節(jié)點灾搏,這是對于集群外部來說的,因為從外部來看es集群立润,在邏輯上是個整體狂窑,你與任何一個節(jié)點的通信和與整個es集群通信是等價的。
node
代表集群中的一個節(jié)點桑腮,節(jié)點也有一個名稱(默認(rèn)是隨機分配的)泉哈,默認(rèn)節(jié)點會去加入一個名稱為“elasticsearch”的集群,如果直接啟動一堆節(jié)點破讨,那么它們會自動組成一個elasticsearch集群丛晦,當(dāng)然一個節(jié)點也可以組成一個elasticsearch集群,集群中一個節(jié)點會被選舉為主節(jié)點(master),它將臨時管理集群級別的一些變更提陶,例如新建或刪除索引烫沙、增加或移除節(jié)點等。主節(jié)點不參與文檔級別的變更或搜索隙笆,這意味著在流量增長的時候锌蓄,該主節(jié)點不會成為集群的瓶頸。
document&field
一個文檔是一個可被索引的基礎(chǔ)信息單元仲器,比如:一個document可以是一條客戶數(shù)據(jù)煤率,一條商品分類數(shù)據(jù),一條訂單數(shù)據(jù)等乏冀。通常用JSON數(shù)據(jù)結(jié)構(gòu)表示蝶糯,每個index下的type中,都可以去存儲多個document辆沦。一個document里面有多個field昼捍,每個field就是一個數(shù)據(jù)字段。
index
一個索引就是一個擁有幾分相似特征的文檔的集合肢扯。比如可以有一個客戶索引妒茬,商品分類索引,訂單索引等蔚晨。一個index包含很多document乍钻,一個index就代表了一類類似的或者相同的document肛循。
type
每個索引里都可以有一個或多個type,type是index中的一個邏輯數(shù)據(jù)分類银择,一個type下的document多糠,都有相同的field
shards
代表索引分片,es可以把一個完整的索引分成多個分片浩考,這樣的好處是可以把一個大的索引拆分成多個夹孔,分布到不同的節(jié)點上。構(gòu)成分布式搜索析孽。分片的數(shù)量只能在索引創(chuàng)建前指定搭伤,并且索引創(chuàng)建后不能更改。
replicas
代表索引副本袜瞬,es可以設(shè)置多個索引的副本怜俐,副本的作用一是提高系統(tǒng)的容錯性,當(dāng)某個節(jié)點某個分片損壞或丟失時可以從副本中恢復(fù)邓尤。二是提高es的查詢效率佑菩,es會自動對搜索請求進行負(fù)載均衡。
recovery
代表數(shù)據(jù)恢復(fù)或叫數(shù)據(jù)重新分布裁赠,es在有節(jié)點加入或退出時會根據(jù)機器的負(fù)載對索引分片進行重新分配殿漠,掛掉的節(jié)點重新啟動時也會進行數(shù)據(jù)恢復(fù)。
discovery.zen
代表es的自動發(fā)現(xiàn)節(jié)點機制佩捞,es是一個基于p2p的系統(tǒng)绞幌,它先通過廣播尋找存在的節(jié)點,再通過多播協(xié)議來進行節(jié)點之間的通信一忱,同時也支持點對點的交互莲蜘。
Transport
代表es內(nèi)部節(jié)點或集群與客戶端的交互方式,默認(rèn)內(nèi)部是使用tcp協(xié)議進行交互帘营,同時它支持http協(xié)議(json格式)票渠、thrift、servlet芬迄、memcached问顷、zeroMQ等的傳輸協(xié)(通過插件方式集成)。
ES數(shù)據(jù)架構(gòu)(與關(guān)系型數(shù)據(jù)庫mysql對比)
(1)關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)庫(DataBase)禀梳,等價于ES中的索引(Index)
(2)一個數(shù)據(jù)庫下面有N張表(Table)杜窄,等價于1個索引Index下面有N多類型(Type),
(3)一個數(shù)據(jù)庫表(Table)下的數(shù)據(jù)由多行(ROW)多列(column算途,屬性)組成塞耕,等價于1個Type由多個文檔(Document)和多Field組成。
(4)在一個關(guān)系型數(shù)據(jù)庫里面嘴瓤,schema定義了表扫外、每個表的字段莉钙,還有表和字段之間的關(guān)系。 與之對應(yīng)的筛谚,在ES中:Mapping定義索引下的Type的字段處理規(guī)則胆胰,即索引如何建立、索引類型刻获、是否保存原始索引JSON文檔、是否壓縮原始JSON文檔瞎嬉、是否需要分詞處理蝎毡、如何進行分詞處理等。
(5)在數(shù)據(jù)庫中的增insert氧枣、刪delete沐兵、改update、查search操作等價于ES中的增PUT/POST便监、刪Delete扎谎、改_update、查GET.
Elasticsearch的配置
#設(shè)置集群名字
cluster.name: cswuyg_qa_pair_test
#設(shè)置node名字
node.name: xxx-node
# 允許一個節(jié)點是否可以成為一個master節(jié)點,es是默認(rèn)集群中的第一臺機器為master,如果這臺機器停止就會重新選舉master.
node.master: true
# 允許該節(jié)點存儲數(shù)據(jù)(默認(rèn)開啟)
node.data: true
# 數(shù)據(jù)存儲位置
path.data: /data1/es-data/
#設(shè)置節(jié)點域名
network.host: x.x.x.x
#設(shè)置內(nèi)部傳輸端口和外部HTTP訪問端口
transport.tcp.port: 9300
http.port: 9200
#設(shè)置集群其它節(jié)點地址
discovery.zen.ping.unicast.hosts: ["xxxhost:yyyport"]
三烧董、Kibana
簡介:
Logstash 早期曾經(jīng)自帶了一個特別簡單的 logstash-web 用來查看 ES 中的數(shù)據(jù)毁靶。其功能太過簡單,于是 Rashid Khan 用 PHP 寫了一個更好用的 web逊移,取名叫 Kibana预吆。這個 PHP 版本的 Kibana 發(fā)布時間是 2011 年 12 月 11 日。
Kibana 迅速流行起來胳泉,不久的 2012 年 8 月 19 日拐叉,Rashid Khan 用 Ruby 重寫了 Kibana,也被叫做 Kibana2扇商。因為 Logstash 也是用 Ruby 寫的凤瘦,這樣 Kibana 就可以替代原先那個簡陋的 logstash-web 頁面了。
目前看到的 angularjs 版本 kibana 其實原名叫 elasticsearch-dashboard案铺,但跟 Kibana2 作者是同一個人蔬芥,換句話說,kibana 比 logstash 還早就進了 elasticsearch 名下控汉。這個項目改名 Kibana 是在 2014 年 2 月坝茎,也被叫做 Kibana3。全新的設(shè)計一下子風(fēng)靡 DevOps 界暇番。隨后其他社區(qū)紛紛借鑒嗤放,Graphite 目前最流行的 Grafana 界面就是由此而來,至今代碼中還留存有十余處 kbn 字樣壁酬。
2014 年 4 月次酌,Kibana3 停止開發(fā)恨课,ES 公司集中人力開始 Kibana4 的重構(gòu),在 2015 年初發(fā)布了使用 JRuby 做后端的 beta 版后岳服,于 3 月正式推出使用 node.js 做后端的正式版剂公。
Kibana是一個為Elasticsearch平臺分析和可視化的開源平臺,使用Kibana能夠搜索吊宋、展示存儲在Elasticsearch中的索引數(shù)據(jù)纲辽。使用它可以很方便用圖表、表格璃搜、地圖展示和分析數(shù)據(jù)拖吼。
Kibana能夠輕松處理大量數(shù)據(jù),通過瀏覽器接口能夠輕松的創(chuàng)建和分享儀表盤这吻,通過改變Elasticsearch查詢時間吊档,可以完成動態(tài)儀表盤。
Kibana模塊功能
discover
Discover標(biāo)簽頁用于交互式探索數(shù)據(jù)唾糯,可以訪問到匹配得上的索引模式的每個索引的每條記錄
設(shè)置時間過濾器
時間過濾器限制搜索結(jié)果在一個特定的時間周期內(nèi)怠硼。
搜索數(shù)據(jù)
在discover頁提交一個搜索,可以搜索匹配當(dāng)前索引模式的索引數(shù)據(jù)
保存搜索
可以在discover頁保存已加載的搜索移怯,也可以用作可視化的基礎(chǔ)
自動刷新頁面
可以配置一個刷新間隔自動刷新頁面的最新索引數(shù)據(jù)
按字段過濾
可以過濾搜索結(jié)果香璃,只顯示在某字段中包含了特定值的文檔,可以創(chuàng)建過濾器舟误。
Visualize
visualize用來設(shè)計可視化增显,保存的可視化可以添加合并到dashboard里。
visualize類型
Area chart (面積圖) 使用面積圖來可視化各種不同類型的總作用
Data table (數(shù)據(jù)表) 使用數(shù)據(jù)表來展示組合聚集的原始數(shù)據(jù)脐帝。
Line chart (線圖) 用來比較不同的類型
Markdown widget 用 Markdown 顯示自定義格式的信息或和儀表盤有關(guān)的用法說明
Metric (計數(shù)) 統(tǒng)計數(shù)目
Pie (餅圖) 用餅圖顯示每個數(shù)據(jù)源的總體占比
Tile map (地圖) 用地圖將聚合結(jié)果和經(jīng)緯度結(jié)合
Vertical bar chart (垂直條狀圖) 用垂直條形圖作為計數(shù)圖形
Dashboard
一個 Kibana dashboard 能自由排列一組已保存的可視化同云。然后可以保存這個儀表板,用來分享或者重載堵腹。
Timelion
Timelion是一個時間序列數(shù)據(jù)的可視化炸站,可以結(jié)合在一個單一的可視化完全獨立的數(shù)據(jù)源。它是由一個簡單的表達式語言驅(qū)動的疚顷,可以用來檢索時間序列數(shù)據(jù)旱易,進行計算,找出復(fù)雜的問題的答案腿堤,并可視化的結(jié)果阀坏。
APM
彈性應(yīng)用程序性能監(jiān)視(APM)自動從應(yīng)用程序內(nèi)部收集深入的性能指標(biāo)和錯誤。
Kibana中的APM頁面隨X-Pack基本許可證一起提供笆檀。它使開發(fā)人員能夠深入了解其應(yīng)用程序的性能數(shù)據(jù)忌堂,并快速找到性能瓶頸。
Dev Tools
原先的交互式控制臺Sense酗洒,使用戶方便的通過瀏覽器直接與Elasticsearch進行交互士修。從Kibana 5開始改名并直接內(nèi)建在Kibana枷遂,就是Dev Tools選項。
Monitoring
kibana中的X-Pack監(jiān)控棋嘲,可以實時查看Elasticsearch酒唉,Logstash和Beats的運行狀況和性能數(shù)據(jù)。
Management
管理應(yīng)用程序是執(zhí)行Kibana的運行時配置的地方沸移,包括索引模式的初始設(shè)置和持續(xù)配置痪伦,調(diào)整Kibana本身行為的高級設(shè)置,以及可以在整個Kibana中保存的各種“對象”雹锣,例如搜索网沾,可視化和儀表板。
四笆制、Beats
Filebeat是基于原先 logstash-forwarder 的源碼改造出來的。換句話說:filebeat 就是新版的 logstash-forwarder涣达,也會是 Elastic Stack 在 shipper 端的第一選擇在辆。
Metricbeat是一個輕量級的采集器,不但可以監(jiān)控服務(wù)器的性能指標(biāo)度苔,還可以監(jiān)控運行在服務(wù)區(qū)之上的應(yīng)用信息(eg.Apache匆篓、MongoDB、MySQL寇窑、Ngnix鸦概、PostgreSQL、Redis甩骏、Zookeeper窗市、System)。
Packetbeat 是一個實時網(wǎng)絡(luò)數(shù)據(jù)包分析工具饮笛,與elasticsearch一體來提供應(yīng)用程序的監(jiān)控和分析系統(tǒng)咨察。
winlogbeat 通過標(biāo)準(zhǔn)的 windows API 獲取 windows 系統(tǒng)日志,常見的有 application福青,hardware摄狱,security 和 system 四類。
Auditbeat是一個輕量級的傳輸器无午,以審核系統(tǒng)上用戶和進程的活動媒役。例如檢測關(guān)鍵文件(如二進制文件和配置文件)的更改,并識別潛在的安全策略違規(guī)宪迟。
Heartbeat是一個輕量級守護程序酣衷,可以安裝在遠程服務(wù)器上,定期檢查服務(wù)狀態(tài)并確定它們是否可用次泽。
filebeat的收集日志配置鸥诽,可以收集多個日志文件商玫,配置多個type模塊,enabled的值默認(rèn)設(shè)置是false,需要改成true牡借,paths指定日志文件的絕對路徑拳昌,tags是為了后續(xù)logstash對其進行篩選。
filebeat的輸出配置钠龙,因為這里輸出到logstash了炬藤,需要把elasticsearch的配置注釋,在logstash的模塊添加logstash的IP以及端口
Elastic Stack的架構(gòu)
數(shù)據(jù)收集的工作由filebeat完成碴里,因為它是個輕量級的logstash沈矿,安裝簡單,占用資源少咬腋,不會占用jvm內(nèi)存羹膳;數(shù)據(jù)的處理交由logstash;數(shù)據(jù)的存儲和數(shù)據(jù)的檢索是由elasticsearch完成的根竿,最后數(shù)據(jù)的各種聚合和可視化的工作是kibana的陵像。
理想的Elastic Stack架構(gòu)
這里多了個kafka消息隊列,kafka作為消息隊列解耦了處理過程寇壳,同時提高了可擴展性醒颖。具有峰值處理能力,使用消息隊列能夠使關(guān)鍵組件頂住突發(fā)的訪問壓力壳炎,而不會因為突發(fā)的超負(fù)荷的請求而完全崩潰泞歉。
Redis、Kafka和Rabbitmq的對比
Kafka是一種分布式的匿辩,基于發(fā)布/訂閱的消息系統(tǒng)腰耙。它遵從一般的MQ結(jié)構(gòu),producer铲球,broker沟优,consumer,以consumer為中心睬辐,消息的消費信息保存的客戶端consumer上挠阁,consumer根據(jù)消費的點,從broker上批量pull數(shù)據(jù)溯饵;無消息確認(rèn)機制侵俗。Kafka開發(fā)語言為Scala,支持跨平臺丰刊。
Kafka的優(yōu)點:
分布式高可擴展隘谣。Kafka 集群可以透明的擴展,增加新的服務(wù)器進集群;
高性能寻歧。Kafka 的性能大大超過傳統(tǒng)的ActiveMQ掌栅、RabbitMQ等MQ 實現(xiàn),尤其是Kafka 還支持batch 操作码泛;
容錯猾封。Kafka每個Partition的數(shù)據(jù)都會復(fù)制到幾臺服務(wù)器上。當(dāng)某個Broker故障失效時噪珊,ZooKeeper服務(wù)將通知生產(chǎn)者和消費者晌缘,生產(chǎn)者和消費者轉(zhuǎn)而使用其它Broker。
高吞吐量痢站。kafka內(nèi)部采用消息的批量處理磷箕,zero-copy機制,數(shù)據(jù)的存儲和獲取是本地磁盤順序批量操作阵难,具有O(1)的復(fù)雜度岳枷,消息處理的效率很高。
kafka的設(shè)計初衷是一個日志系統(tǒng)呜叫,其隊列中的數(shù)據(jù)能夠持久化一段時間空繁。因此后來的consumer能夠通過自定義offset來實現(xiàn)獲取之前的消息,而redis就不具備這樣的能力怀偷。RabbitMQ是一個Advanced Message Queuing Protocol(AMQP)的開源實現(xiàn)家厌,由以高性能播玖、可伸縮性出名的Erlang寫成椎工。RabbitMQ的broker由Exchange,Binding,queue組成,其中exchange和binding組成了消息的路由鍵蜀踏;客戶端Producer通過連接channel和server進行通信维蒙,Consumer從queue獲取消息進行消費(長連接,queue有消息會推送到consumer端果覆,consumer循環(huán)從輸入流讀取數(shù)據(jù))颅痊。rabbitMQ以broker為中心;有消息的確認(rèn)機制局待。RabbitMQ Server適用的OS有:Windows斑响、Linux/Unix和Mac OS X。
AMQP協(xié)議主要有3個組件:
交換器(Exchange):它是發(fā)送消息的實體
隊列(Queue):它是接收消息的實體
綁定器(Bind):將交換器和隊列連接起來钳榨,并且封裝消息的路由信息
rabbitMQ在吞吐量方面稍遜于kafka舰罚,他們的出發(fā)點不一樣,rabbitMQ支持對消息的可靠的傳遞薛耻,支持事務(wù)营罢,不支持批量的操作;基于存儲的可靠性的要求存儲可以采用內(nèi)存或者硬盤饼齿。