ELK入門及搭建使用
一、ELK是什么?
ELK是三個開源軟件的縮寫,分別表示:Elasticsearch , Logstash, Kibana
1、Elasticsearch
這是一個基于Lucene的分布式全文搜索框架疹吃,可以對logs進行分布式存儲艇肴。此為ELK的核心組件帮哈,日志的處理以及存儲全部由Elasticsearch 完成憾筏。
2、Logstash
主要是用來日志的搜集刨肃、分析古拴、過濾日志的工具真友,用來部署到各自的服務(wù)器上收集Log日志,通過內(nèi)置的ElasticSearch插件解析后輸出日志到ElasticSearch中。
3刻帚、kibana
可以多維度的展示Elasticsearch 中的數(shù)據(jù)幔睬。提供了豐富的UI組件麻顶,簡化了使用難度。
二辅肾、ELK為什么用以及解決什么問題矫钓?
項目初期的時候,服務(wù)器數(shù)量較少舍杜,一般來說對日志沒有過多的考慮新娜,隨著應(yīng)用的越來越多,日志散落在各個服務(wù)器的logs文件夾下既绩,想要查找日志需要在眾多服務(wù)器上去逐一查找概龄,效率非常低而且確實有很大的不方便。
當(dāng)線上出現(xiàn)問題我們需要日志分析的時候大概會這么做:直接在日志文件中 grep ‘xx’ order.log就可以獲得自己想要的信息饲握。
那你們想過這種方式的問題嗎私杜?
1.日志量太大文本搜索太慢怎么辦、如何多維度查詢
2.應(yīng)用太多互拾,面臨數(shù)十上百臺應(yīng)用時你該怎么辦(難道只能一臺一臺的去服務(wù)器上找歪今?)
3.隨意登錄服務(wù)器查詢log對系統(tǒng)的穩(wěn)定性及安全性肯定有影響
4.如果開發(fā)人員對Linux不太熟練,會造一定的困擾
ELK因此就應(yīng)運而生颜矿,那么為什么要用ELK呢寄猩?ELK又能給我們解決哪些問題呢?
1.日志統(tǒng)一收集骑疆,管理田篇,訪問。查找問題方便安全
2.使用簡單箍铭,可以大大提高定位問題的效率
3.可以對收集起來的log進行分析(建立日志可視化界面泊柬,使得日志分析更加便捷)
4.能夠提供錯誤報告,監(jiān)控機制(當(dāng)異常觸發(fā)時能夠及時通過短信诈火、郵件等方式通知相關(guān)負責(zé)人員)
三兽赁、ELK架構(gòu)
3.1 Logstash作為日志收集器
這種架構(gòu)是比較原始的部署架構(gòu),在各應(yīng)用服務(wù)器端分別部署一個Logstash組件,作為日志收集器刀崖,然后將Logstash收集到的數(shù)據(jù)過濾惊科、分析、格式化處理后發(fā)送至Elasticsearch存儲亮钦,最后使用Kibana進行可視化展示馆截,這種架構(gòu)不足的是:
Logstash比較耗服務(wù)器資源,所以會增加應(yīng)用服務(wù)器端的負載壓力蜂莉。
3****.2 Filebeat作為日志收集器****(****目前使用最多的是****這****種部署架構(gòu)****,如果不需要logstash做過濾和監(jiān)控告警等特殊處理蜡娶,可以直接棄用logstash****)
該架構(gòu)與第一種架構(gòu)唯一不同的是:應(yīng)用端日志收集器換成了Filebeat,F(xiàn)ilebeat輕量映穗,占用服務(wù)器資源少窖张,將日志數(shù)據(jù)發(fā)送到Logstash或者Elasticsearch時,F(xiàn)ilebeat 使用背壓敏感協(xié)議蚁滋,以應(yīng)對更多的數(shù)據(jù)量荤堪。如果 Logstash 或者Elasticsearch正在忙于處理數(shù)據(jù),則會告訴 Filebeat 減慢讀取速度枢赔。一旦擁堵得到解決,F(xiàn)ilebeat 就會恢復(fù)到原來的步伐并繼續(xù)傳輸數(shù)據(jù)拥知,所以使用Filebeat作為應(yīng)用服務(wù)器端的日志收集器踏拜,一般Filebeat會配合Logstash一起使用(logstash主要是對日志消息進行過濾和傳輸及監(jiān)控告警),這種部署方式也是目前最常用的架構(gòu)低剔。
3****.3 引入緩存隊列的部署架構(gòu)
該架構(gòu)在第二種架構(gòu)的基礎(chǔ)上引入了Redis緩存隊列(還可以是其他消息隊列例如Kafka)速梗,將Filebeat收集到的數(shù)據(jù)發(fā)送至Redis,然后在通過Logstasth讀取Redis中的數(shù)據(jù)襟齿,這種架構(gòu)主要是解決大數(shù)據(jù)量下的日志收集方案姻锁,使用緩存隊列主要是解決數(shù)據(jù)安全與均衡Logstash與Elasticsearch負載壓力。
3****.4 以上三種架構(gòu)的總結(jié)
第一種部署架構(gòu)由于資源占用問題猜欺,現(xiàn)已很少使用位隶,目前使用最多的是第二種部署架構(gòu),至于第三種部署架構(gòu)除非是第二種架構(gòu)不能滿足性能要求或者有其他需求开皿,因為在數(shù)據(jù)量較大的情況下涧黄,F(xiàn)ilebeat 使用壓力敏感協(xié)議向 Logstash 或 Elasticsearch 發(fā)送數(shù)據(jù)。如果 Logstash 正在繁忙地處理數(shù)據(jù)赋荆,它會告知 Filebeat 減慢讀取速度笋妥。擁塞解決后,F(xiàn)ilebeat 將恢復(fù)初始速度并繼續(xù)發(fā)送數(shù)據(jù)窄潭。
四春宣、搭建ELK
版本:elasticsearch 5.6.12,logstash5.6.9,kibana5.3.0月帝,filebeat5.6.3 四個版本(JDK需要1.8)
2躏惋、安裝filebeat
(1)解壓filebeat:tar zxvf filebeat-5.6.3-linux-x86_64
(2)filebeat-5.6.3-linux-x86_64目錄下編輯filebeat.yml文件
filebeat.prospectors:
-
type: log
enabled: true
Paths that should be crawled and fetched. Glob based paths.
paths:
- /var/log/*.log
----------------------------- Logstash output --------------------------------
output.logstash:
The Logstash hosts
hosts: ["192.168.97.3:5044"] #logstash服務(wù)iP和端口,如果有多個logstash嫁赏,可以寫多個其掂。
bin目錄下啟動filebeat,啟動命令:./filebeat -e -c filebeat.yml
3.安裝logstash
(1)解壓logstash:tar zxvf logstash-5.6.9.tar.gz
(2)在config目錄創(chuàng)建配置文件:logstash.conf
(3)logstash.conf 做好input 潦蝇,filter款熬,output三大塊, 其中input是吸取logs文件下的所有l(wèi)og后綴的日志文件攘乒,filter是一個過濾函數(shù)贤牛,這里不用配置,output配置了導(dǎo)入到
hosts為192.168.97.3:9200的elasticsearch中则酝,每天建一個索引殉簸。
input {
#file {
# type => "log"
# path => "/logs/*.log"
# start_position => "beginning"
#}
beats {
port => 5044
}
}
output {
stdout {
codec => rubydebug { }
}
elasticsearch {
hosts => "192.168.97.3:9200"
index => "log-%{+YYYY.MM.dd}"
}
}
(4)bin目錄下啟動logstash,啟動命令:./logstash -f ../config/logstash.conf沽讹,如果想要后臺運行啟動:./logstash -f ../config/logstash.conf &
4般卑、安裝elasticSearch
elasticSearch啟動的時候需要注意,elasticSearch不能以root賬號啟動爽雄,所以還需要添加一個新賬戶蝠检。
4.1 解壓:tar zxvf elasticsearch-5.6.4.tar.gz
4.2 添加新賬戶:useradd es,
對新賬戶授權(quán):chown -R es:es /usr/local/soft/elasticsearch-5.6.4
4.3安裝過程中可能會遇到如下幾個問題:
(1)max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
解決方法:vi /etc/security/limits.conf
user hard nofile 65536
user soft nofile 65536
(2)max number of threads [1024] for user [apps] is too low, increase to at least [2048]
解決辦法:vi /etc/security/limits.d/90-nproc.conf
修改如下內(nèi)容:
- soft nproc 1024
修改為
- soft nproc 2048
(3)max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
解決辦法:vi /etc/sysctl.conf
添加下面配置:
vm.max_map_count=655360
并執(zhí)行命令:
sysctl -p
4.4 切換用戶角色:su es ,在bin 目錄下啟動elasticSearch挚瘟,啟動命令:./elasticsearch 叹谁,如果需要后臺啟動:./elasticsearch -d
以上elasticsearch只是單機安裝,集群安裝如下:
4.5 同一臺機器安裝三臺elasticsearch集群:cp -r elasticsearch-5.6.12 elasticsearch-n1乘盖、cp -r elasticsearch-5.6.12 elasticsearch-n2焰檩、cp -r elasticsearch-5.6.12 elasticsearch-n3。
elasticsearch-n1 目錄的config目錄下elasticsearch.yml文件編輯
cluster.name: my-es #集群名稱
node.name: node-01 # 節(jié)點名稱
node.master: true #主節(jié)點(候選)
node.data: true #存儲數(shù)據(jù)
network.host: 192.168.97.3
http.port: 9200 #es對外提供訪問的端口
transport.tcp.port: 9300 #es集群之間通信的端口
單播(unicast)協(xié)議订框,指定要發(fā)現(xiàn)的節(jié)點信息了析苫,可以不指定端口[默認(rèn)9300]
discovery.zen.ping.unicast.hosts: ["192.168.97.3","192.168.97.3:8300","192.168.97.3:7300"]
默認(rèn)是1看到的具有master節(jié)點資格的最小數(shù)量,然后才能在集群中做操作穿扳。官方的推薦值是(N/2)+1藤违,如果只有2個節(jié)點設(shè)為1
discovery.zen.minimum_master_nodes: 2
====================================================================
elasticsearch-n2 目錄的config目錄下elasticsearch.yml文件編輯
cluster.name: my-es
node.name: node-02
node.master: false
node.data: true
network.host: 192.168.97.3
http.port: 8200
transport.tcp.port: 8300
discovery.zen.ping.unicast.hosts: ["192.168.97.3","192.168.97.3:8300","192.168.97.3:7300"]
discovery.zen.minimum_master_nodes: 2
======================================================================
elasticsearch-n3 目錄的config目錄下elasticsearch.yml文件編輯
cluster.name: my-es
node.name: node-03
node.master: true
node.data: true
network.host: 192.168.97.3
http.port: 7200
transport.tcp.port: 7300
discovery.zen.ping.unicast.hosts: ["192.168.97.3","192.168.97.3:8300","192.168.97.3:7300"]
discovery.zen.minimum_master_nodes: 2
5.安裝kibana
(1)解壓:tar zxvf kibana-5.3.0-linux-x86_64.tar.gz
(2)在config目錄下的kibana.yml文件中指定一下你需要讀取的elasticSearch地址和可供外網(wǎng)訪問的bind地址就可以了
elasticsearch.url: "http://192.168.97.3:9200"
server.host: 0.0.0.0
(3)bin目錄下啟動kibana,啟動命令:./kibana 纵揍,如果想要后臺啟動 :./kibana &
注意:
在es和logstash都安裝成功后顿乒,一定要先往logstash里面寫入日志,直到es的索引創(chuàng)建成功再來啟動kibana泽谨。訪問:<u>http://localhost:5601</u> 此時會進入配置界面璧榄,如下所示:其中紅框的內(nèi)容是es的索引名字正則表達式特漩,和logstash里面(index => "log-%{+YYYY.MM.dd}")的一致。這里用log-*就可以匹配