本章設(shè)置環(huán)境基于上一張elk內(nèi)容搭建,ELK-搭建實(shí)時(shí)日志ELK分析系統(tǒng),這一章新增一些配置,以更合適的應(yīng)用于實(shí)際日志場(chǎng)景。
filebeat配置
filebeat是按行讀取數(shù)據(jù)發(fā)送給logstash的,所以索引到elasticsearch的日志都是一行一行的,這不利于查看,尤其是查看一些報(bào)錯(cuò)的堆棧信息時(shí),希望能把這些信息合并為一條。
我的日志形式是以'['開頭的,在filebeat.yml中增加配置,合并多行:
paths:
- /home/appadmin/elk/logs/*
#- c:\programdata\elasticsearch\logs\*
multiline:
pattern: '^\['
negate: true
match: after
現(xiàn)在所有的堆棧信息都合并到了一起。
filebeat每次讀完數(shù)據(jù)都會(huì)記錄一個(gè)偏移量,下一次會(huì)根據(jù)記錄繼續(xù)讀取新的內(nèi)容,如果更改配置后需要重新讀取所有文件,先在elasticsearch中刪除之前的索引,然后殺掉filebeat,刪掉filebeat目錄的data目錄下的數(shù)據(jù),再重啟就可重新讀取所有文件。
logstash配置
默認(rèn)的索引到elasticsearch中的數(shù)據(jù)是按天來建立新索引的,每一天都會(huì)有一個(gè)新索引,這個(gè)時(shí)間是根據(jù)logstash中的@timestamp,這個(gè)字段默認(rèn)是logstash接收到數(shù)據(jù)的時(shí)間,如果你的日志系統(tǒng)及時(shí)性很好的話也沒什么大問題,但如果寫入量太大造成堵塞,或者導(dǎo)入一些歷史日志就會(huì)出現(xiàn)問題,因此最好是將@timestamp替換成日志記錄的時(shí)間,更改logstash中啟動(dòng)加載的配置文件如下配置:
# 數(shù)據(jù)過濾
filter {
grok {
match => { "message" => "%{TIMESTAMP_ISO8601:log_time}" }
}
geoip {
source => "clientip"
}
date{
match => ["log_time", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"]
target => "@timestamp"
}
mutate{
remove_field => ["log_time"]
}
}
TIMESTAMP_ISO8601是日志文件中的時(shí)間日期格式,將日志中的時(shí)間提取到字段log_time中,然后傳遞給@timestamp,文件中match => ["log_time", "yyyy-MM-dd HH:mm:ss,SSS", "ISO8601"],第一個(gè)是字段名,第二個(gè)是log_time的格式,第三個(gè)是要轉(zhuǎn)換的@timestamp格式。@timestamp要轉(zhuǎn)換成北京時(shí)間要+8h,在kibana中展示時(shí),kibana已經(jīng)默認(rèn)加上了這個(gè)時(shí)間差。
使用logstash收集多臺(tái)服務(wù)器filebeat傳遞數(shù)據(jù)時(shí)標(biāo)記來源并根據(jù)來源建立不同的索引
當(dāng)有多個(gè)項(xiàng)目,并且項(xiàng)目部署在多個(gè)服務(wù)器的時(shí)候,我們可能需要知道每個(gè)日志的來源服務(wù)器,并且根據(jù)不同的項(xiàng)目建立單獨(dú)的索引,所以可以添加以下配置完成:
- 在filebeat中添加屬性,標(biāo)記日志來源:
使用fields添加屬性,key和value都可以自己定義,如果和filebeat已存在的key重復(fù),將會(huì)替換它的值,使用屬性fields_under_root: true使得這些屬性在頂層結(jié)構(gòu)。添加的屬性會(huì)在索引到elasticsearch中的文檔中看到。
- type: log
# Change to true to enable this input configuration.
enabled: false
# Paths that should be crawled and fetched. Glob based paths.
enabled: true
paths:
- /home/appadmin/elk/logs/*
#- c:\programdata\elasticsearch\logs\*
fields:
log_ip: 10.1.12.18
log_source: 你的域名
fields_under_root: true
multiline:
pattern: '^\['
negate: true
match: after
注意:在編輯filebeat.yml時(shí)不要使用tab符,否則會(huì)報(bào)錯(cuò)。
- 在logstash中根據(jù)日志的來源建立不同的索引:
編輯啟動(dòng)logstash加載的配置文件,修改output:
# 輸出到本機(jī)的 ES
output {
elasticsearch {
hosts => [ "localhost:9201" ]
index => "log-%{[log_source]}-%{+YYYY.MM.dd}"
}
}
在index中引用filebeat中的log_source建立不同的索引。
- 在kibana中就可以根據(jù)不同的來源建立不同的index pattern,區(qū)分不同系統(tǒng)的日志。
配置elk權(quán)限與安全訪問:ELK-搭建實(shí)時(shí)日志ELK分析系統(tǒng)(3)-集成search-guard