為什么要做日志分析平臺(tái)幕与,隨著業(yè)務(wù)量的增大挑势,單個(gè)日志文件的大小達(dá)到幾個(gè)GB,這時(shí)候啦鸣,我們發(fā)現(xiàn)用系統(tǒng)自帶的工具潮饱,cat/grep/awk/tail越來(lái)越顯得力不從心,除了操作系統(tǒng)日志诫给,還有應(yīng)用系統(tǒng)的日志香拉,分布在各個(gè)服務(wù)器上,日志分析工作異常繁瑣中狂,開(kāi)發(fā)人員想獲取日志信息也異常麻煩缕溉。所以為了解決現(xiàn)狀,接下來(lái)我們將構(gòu)建這個(gè)日志分析平臺(tái)吃型。
1. 架構(gòu)圖
2.架構(gòu)圖分析
- 將filebeat部署到需要采集日志的服務(wù)器上证鸥,filebeat將采集到的日志數(shù)據(jù)傳輸?shù)絢afka中。
- kafka將獲取到的日志信息存儲(chǔ)起來(lái)勤晚,并且作為輸入(input)傳輸給logstash枉层。
- logstash將kafka中的數(shù)據(jù)作為輸入,并且把kafka中的數(shù)據(jù)進(jìn)行過(guò)濾等其他操作赐写,然后把操作后得到的數(shù)據(jù)輸入(output)到es(elasticsearch)中鸟蜡。
- es(基于lucene搜索引擎)對(duì)logstash中的數(shù)據(jù)進(jìn)行處理,并且將數(shù)據(jù)作為輸入傳送給kibana進(jìn)行顯示挺邀。
注:上圖使用了kafka揉忘,es集群架構(gòu)圖,我本次實(shí)驗(yàn)并不使用集群端铛。旨在疏通整個(gè)流程泣矛,并實(shí)現(xiàn)可用。對(duì)于做大數(shù)據(jù)采集分析的一般會(huì)使用這種集群架構(gòu)禾蚕。提高公司內(nèi)部的日志分析及排錯(cuò)效率您朽,非集群架構(gòu)也足夠。
3.部署該平臺(tái)需要的環(huán)境以及軟件换淆,軟件及版本如下
172.17.217.131 filebeat 1Core 1GB
172.17.217.130 kafka logstash 1Core 2GB
172.17.217.129 elasticsearch kibana 2Core 8GB
4.安裝以及配置各軟件
1.安裝filebeat
[root@web-server softwares]# tar -xf filebeat-6.1.3-linux-x86_64.tar.gz
[root@web-server softwares]# mv filebeat-6.1.3-linux-x86_64 /usr/local/filebeat6.1
[root@web-server filebeat6.1]# pwd
/usr/local/filebeat6.1
[root@web-server filebeat6.1]# cp filebeat.yml filebeat.yml.bak
[root@web-server filebeat6.1]# > filebeat.yml #清空文件
#修改filebeat.yml文件
[root@web-server filebeat6.1]# cat filebeat.yml
filebeat.prospectors:
- type: log
#設(shè)置為true使該配置生效
enabled: true
paths:
#收集日志路徑哗总,多個(gè)的話繼續(xù)往下寫(xiě)即可
- /var/log/messages
fileds:
#自定義屬性几颜,用來(lái)區(qū)分不同服務(wù)器上的日志
log_source: 172.17.217.131-system
- type: log
enabled: true
paths:
- /var/log/nginx/accesss.log
fields:
log_source: 172.17.217.131-nginx
#下面三個(gè)屬性配置根據(jù)[ 將Java異常堆棧收集為一條消息,也可以在logstash中配置
multiline.pattern: '^\['
multiline.negate: true
multiline.match: after
#該屬性可以配置只收集error級(jí)別和warn級(jí)別的日志讯屈,如果與配置多行收集蛋哭,一定要將這個(gè)配置放在多行的后面
include_lines: ['ERROR','WARN']
#該屬性配置不收集DEBUG級(jí)別的日志,如果配置多行涮母,這個(gè)配置也要放在多行的后面
exclude_lines: ['DEBUG']
output.logstash:
#如果是多個(gè)logstash具壮,將下面的三條屬性打開(kāi)
#hosts: ["localhost:5044","localhost:5045"]
#loadbalance: true
#worker: 3
hosts: ["172.17.217.130:5044"]
#這個(gè)index的值也可以自定義,用來(lái)修改@metadata[beat]值哈蝇,默認(rèn)是filebeat
index: "filebeat"
配置解釋:
type: log 讀取日志文件的每一行(默認(rèn))
enabled: true 該配置是否生效,如果改為false,將不收集該配置的日志
paths: 要抓取日志的全路徑
fields: 自定義屬性,可以定義多個(gè),繼續(xù)往下排就行
multiline.pattern: 正則表達(dá)式
multiline.negate: true 或 false棺妓;默認(rèn)是false,匹配pattern的行合并到上一行炮赦;true怜跑,不匹配pattern的行合并到上一行
multiline.match: after 或 before,合并到上一行的末尾或開(kāi)頭
include_lines: ['ERROR','WARN'] 該屬性可以配置只收集error級(jí)別和warn級(jí)別的日志,如果有配置多行收集,一定要將這個(gè)配置放在多行的后面
exclude_lines: ['DEBUG'] 該屬性配置不收集DEBUG級(jí)別的日志,如果配置多行 這個(gè)配置也要放在多行的后面
hosts: Logstash所在的主機(jī)
loadbalance: 如果設(shè)置為T(mén)RUE和配置了多臺(tái)logstash主機(jī)吠勘,輸出插件將負(fù)載均衡的發(fā)布事件到所有l(wèi)ogstash主機(jī)性芬。如果設(shè)置為false,輸出插件發(fā)送所有事件到隨機(jī)的一臺(tái)主機(jī)上剧防,如果選擇的不可達(dá)將切換到另一臺(tái)主機(jī)植锉。默認(rèn)是false。
worker: 每個(gè)配置的主機(jī)發(fā)布事件到Logstash的工作者數(shù)量峭拘。這最適用于啟用負(fù)載平衡模式俊庇。示例:如果您有2個(gè)主機(jī)和3個(gè)工作人員,則共有6個(gè)工作人員啟動(dòng)(每個(gè)主機(jī)3個(gè))鸡挠。
2.安裝logstash
[root@git softwares]# tar -xf logstash-6.2.3.tar.gz
[root@git softwares]# mv logstash-6.2.3 /usr/local/logstash6.2.3
[root@git softwares]# cd /usr/local/logstash6.2.3/
#創(chuàng)建logstash.conf文件并編輯
[root@git logstash6.2.3]# cat logstash.conf
input {
beats {
port => 5044
}
}
output {
elasticsearch {
hosts => ["http://172.17.217.129:9200"]
index => "%{[fields][log_source]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
}
}
3.安裝elasticsearch
[root@jenkins softwares]# tar -xf elasticsearch-6.1.3.tar.gz
[root@jenkins softwares]# mv elasticsearch-6.1.3 /usr/local/elasticsearch6.1.3
[root@jenkins softwares]# cd /usr/local/elasticsearch6.1.3/
[root@jenkins elasticsearch6.1.3]# cd config/
[root@jenkins config]# ls
elasticsearch.yml jvm.options log4j2.properties
[root@jenkins config]# cp elasticsearch.yml elasticsearch.yml.bak
[root@jenkins config]# vim elasticsearch.yml
修改IP和端口即可
[root@jenkins config]# useradd elastic
[root@jenkins config]# chown -R elastic /usr/local/elasticsearch6.1.3/
[root@jenkins config]# su - elastic
[elastic@jenkins ~]$ pwd
/home/elastic
[elastic@jenkins ~]$ cd /usr/local/elasticsearch6.1.3/
[elastic@jenkins elasticsearch6.1.3]$ ls
bin config lib LICENSE.txt modules NOTICE.txt plugins README.textile
[elastic@jenkins elasticsearch6.1.3]$ ./bin/elasticsearch