一、概述
日志有什么用?
日志主要包括系統(tǒng)日志坏怪、應(yīng)用程序日志和安全日志。系統(tǒng)運(yùn)維和開發(fā)人員可以通過日志了解服務(wù)器軟硬件信息绊茧、檢查配置過程中的錯(cuò)誤及錯(cuò)誤發(fā)生的原因铝宵。經(jīng)常分析日志可以了解服務(wù)器的負(fù)荷,性能安全性按傅,從而及時(shí)采取措施糾正錯(cuò)誤捉超。-
何為ELK?
ELK 由ElasticSearch 唯绍、 Logstash 和 Kibana 三個(gè)開源工具組成,是一個(gè)開源實(shí)時(shí)日志分析平臺(tái)枝誊。- Elasticsearch 是個(gè)開源分布式搜索引擎况芒,它的特點(diǎn)有:分布式,零配置叶撒,自動(dòng)發(fā)現(xiàn)绝骚,索引自動(dòng)分片,索引副本機(jī)制祠够, restful 風(fēng)格接口压汪,多數(shù)據(jù)源,自動(dòng)搜索負(fù)載等古瓤。
- Logstash 是一個(gè)完全開源的工具止剖,他可以對(duì)你的日志進(jìn)行收集、分析落君,并將其存儲(chǔ)供以后使用(如穿香,搜索)。
- kibana 也是一個(gè)開源和免費(fèi)的工具绎速,他 Kibana 可以為 Logstash 和ElasticSearch 提供的日志分析友好的 Web 界面皮获,可以幫助您匯總、分析和搜索重要數(shù)據(jù)日志纹冤。
圖解1
圖解2
二洒宝、系統(tǒng)環(huán)境
- System: Centos release 7.0 (Final)
- ElasticSearch: 5.4.0
- Logstash: 5.4.0
- Kibana: 5.4.0
- Java: openjdk version ”1.8.0_102″
- ELK下載: https://www.elastic.co/downloads/
三、安裝篇
ElasticSearch安裝
后續(xù)操作以elk目錄為主
# 下載解壓
cd /opt
mkdir elk
cd elk
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.0.tar.gz
tar -xzf elasticsearch-5.4.0.tar.gz
cd elasticsearch-5.4.0
# 配置cofng/elasticsearch.yml
http.hosts 不設(shè)置默認(rèn)localhost
# 啟動(dòng), -d后臺(tái)運(yùn)行
./bin/elasticsearch -d
# 查看是否安裝成功
curl -XGET '192.168.100.242:9200/?pretty'
## 刪除指定索引
curl -XDELETE '192.168.100.242:9200/hl4pl_prod-*?pretty'
ElasticSearch Head 插件安裝 (待完善)
Logstash 安裝
# 切換到elk目錄
# 下載解壓
https://artifacts.elastic.co/downloads/logstash/logstash-5.4.0.tar.gz
tar -xzf logstash-5.4.0.tar.gz
cd logstash-5.4.0
# 新建shipper.conf配置文件,添加內(nèi)容如下:
input { stdin { } }
output {
elasticsearch { hosts => ["localhost:9200"] }
stdout { codec => rubydebug }
}
# 啟動(dòng)
bin/logstash -f shipper.conf
# nohup 啟動(dòng)
nohup bin/logstash -f shipper.conf &
Kibana 安裝
# 下載解壓并安裝
kibana-5.4.0-linux-x86_64.tar.gz
cd kibana-5.4.0-linux-x86_64
# 修改config/kibana.yml
設(shè)置elasticsearch.url為http://localhost:9200
# 配置ip地址和端口
四萌京、配置篇
Logstash
shipper.conf 以正則表達(dá)式進(jìn)行匹配
input {
file {
type => "log4j"
path => [
"/home/hoolinks/hl4pl/service/service.log",
"/home/hoolinks/hl4pl/csp_web/logs/catalina.out",
"/home/hoolinks/hl4pl/cp_web/logs/catalina.out"]
codec => multiline { ## 通過配置識(shí)別日志開頭雁歌,來保證多行可以被合并
pattern => "^[\d{2}:\d{2}:\d{2}.\d+)]" ## 正則匹配以什么作為日志開頭標(biāo)志
negate => true
what => "previous"
}
start_position => "beginning"
}
}
filter {
if [type] == "log4j" {
grok {
match => {
"message" => [
"(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<thread>\[[^]]*\]{1})\s(?<level>\w+)\s(?<class>\[[^]]*\]{1})\s?(?<content>[\s|\S]*)",
"(?<time>\d{2}:\d{2}:\d{2}.\d+)\s(?<level>\w+)\s(?<class>\[[^]]*\]{1})\s?(?<content>[\s|\S]*)"
]
}
remove_field => ["message"]
}
date {
match => ["time", "HH:mm:ss Z"]
}
}
}
output {
stdout { ## 輸出到控制端
codec => rubydebug
}
elasticsearch { ## 輸出到es
hosts => ["localhost:9200"] ## es地址和端口
flush_size => 5000
index => "dev-%{+YYYY.MM.dd}" ## kibana的檢索index,不同環(huán)境需要調(diào)整
idle_flush_time => 10
}
}