最近在做 Spring Cloud 相關(guān)系列框架的搭建汹碱,在做到整合微服務(wù)跟蹤-Sleuth后廉赔,項目添加了Sleuth后已經(jīng)能夠正常的輸出跟蹤信息日志芋浮,接下來要對整個日志進(jìn)行分析處理招狸,這里選取使用配合ELK來做婿滓,首先需要搭建整個ELK環(huán)境甜孤。
ELK介紹
ELK (官網(wǎng))其實是三個不同的內(nèi)容协饲,一般配合一起使用。分別是:
- ElasticSearch
- Logstash
- Kibana
具體的介紹可以看官網(wǎng)的每個產(chǎn)品介紹
Windows 環(huán)境搭建
可以參考:https://blog.csdn.net/pilihaotian/article/details/52452010 缴川,基本上比較詳細(xì)了茉稠,但是也可以看出windows安裝比較繁瑣,而且還會耗費(fèi)機(jī)器本身資源把夸,本文介紹使用Docker安裝搭建而线。
Docker 環(huán)境搭建
ELK對應(yīng)的有很多版本,本文均使用最新版本
安裝 elasticsearch
拉取鏡像
docker pull elasticsearch
啟動容器
docker run -d -p 9200:9200 --name leon_elasticsearch elasticsearch
此時訪問地址:<u>http://192.168.9.151:9200/</u>恋日,看到如下效果說明啟動成功:
安裝插件 elasticsearch-head
一般情況下膀篮,安裝插件只需要執(zhí)行命令:
elasticsearch-plugin install mobz/elasticsearch-head
那么我們現(xiàn)在進(jìn)入到容器中對應(yīng)的目錄:/usr/share/elasticsearch/bin/,然后執(zhí)行上述命令岂膳,但是發(fā)現(xiàn)報錯:
查閱相關(guān)文檔得知以下信息:
– for Elasticsearch 5.x:
site plugins are not supported. Run elasticsearch-head as a standalone server
也就是說5.X以上的版本誓竿,需要單獨(dú)啟動 elasticsearch-head 服務(wù)。
那么單獨(dú)啟動運(yùn)行插件容器:
docker run -d -p 9100:9100 --name leon_elasticsearch-head mobz/elasticsearch-head:5
注意后面跟的版本5谈截,一定要對應(yīng)自己的版本筷屡。
容器啟動后,訪問地址:</font><u>http://192.168.9.151:9100/</u>
此時代表插件服務(wù)已經(jīng)啟動簸喂,但是點擊連接毙死,發(fā)現(xiàn)無法連接elasticsearch服務(wù),需要修改配置文件娘赴,文件地址為容器中的:/usr/share/elasticsearch/config/elasticsearch.yml
我們進(jìn)入容器规哲,發(fā)現(xiàn)無法使用VI命令修改文件,這個時候可以安裝VI工具然后修改文件诽表,或者使用另外一種粗暴的方法唉锌,在外面修改然后覆蓋文件。這里因為安裝VI總是出錯竿奏,所以使用第二種方式袄简。
首先將容器中的配置文件導(dǎo)出來:
docker cp leon_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /home/px2/elasticsearch.yml
在文件中添加以下內(nèi)容:
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
然后在替換容器中的文件:
docker cp /home/px2/elasticsearch.yml leon_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml
重啟容器,然后重新訪問:http://localhost:9100/ 就可以連接上了(此時還沒有數(shù)據(jù))
注意:如果還是不能連接泛啸,可以訪問地址來連接:http://localhost:9100/?auth_user=elastic&auth_password=changeme
安裝logstash
這里有個比較坑的問題绿语,使用Docker官方Hub里的鏡像 docker pull logstash 啟動的容器總是會自動停掉,無法運(yùn)行,后來選擇使用官網(wǎng)中的鏡像地址:
docker run --name leon_logstash docker.elastic.co/logstash/logstash:6.2.4
修改配置文件,進(jìn)入容器:
docker exec -it leon_logstash /bin/bash
進(jìn)入目錄cd config
打開并修改配置文件 vi logstash.yml:
http.host: "0.0.0.0"
xpack.monitoring.elasticsearch.url: http://192.168.9.151:9200
xpack.monitoring.elasticsearch.username: elastic
xpack.monitoring.elasticsearch.password: changeme
安裝kibana
拉取鏡像
docker pull kibana
啟動容器
docker run --name leon_kibana -p 5601:5601 -d -e ELASTICSEARCH_URL=http://192.168.9.151:9200 kibana
配置
訪問地址:http://192.168.9.151:5601 吕粹,看到如下效果
此時報錯中間紅色部分种柑,無法進(jìn)行創(chuàng)建,找到資料得知:
看官網(wǎng)的解釋說這是因為初次設(shè)置的時候logstash沒有加載到數(shù)據(jù)導(dǎo)致的匹耕。所以先要保證logstash能夠加載到數(shù)據(jù)聚请。
配置數(shù)據(jù)
進(jìn)入到容器中:
docker exec -it leon_logstash /bin/bash
然后進(jìn)入如下目錄:
cd pipeline/
打開配置文件:vi logstash.conf
修改內(nèi)容如下:
input {
file {
codec=> json
path => "/usr/local/*.json"
}
}
filter {
#定義數(shù)據(jù)的格式
grok {
match => { "message" => "%{DATA:timestamp}\|%{IP:serverIp}\|%{IP:clientIp}\|%{DATA:logSource}\|%{DATA:userId}\|%{DATA:reqUrl}\|%{DATA:reqUri}\|%{DATA:refer}\|%{DATA:device}\|%{DATA:textDuring}\|%{DATA:duringTime:int}\|\|"}
}
}
output {
elasticsearch{
hosts=> "http://192.168.9.151:9200"
}
}
其中指定了輸出地址:elasticsearch的地址,而且還指定了內(nèi)容輸入地址:/usr/local/*.json稳其,需要在usr/local下有json格式的數(shù)據(jù)驶赏,接下來將項目生成的json格式的日志文件上傳到該目錄。
docker cp /home/px2/logs/shop-user-consumer.json leon_logstash:/usr/local/shop-user-consumer.json
docker cp /home/px2/logs/shop-user-provider.json leon_logstash:/usr/local/shop-user-provider.json
然后重啟logstash容器既鞠,在重新訪問頁面煤傍,可以看到可以進(jìn)行create了。
點擊create創(chuàng)建成功后嘱蛋,點擊Discovery,選擇時間為一年內(nèi)蚯姆,可以看到之前的數(shù)據(jù):
并且訪問9100地址也能加載出節(jié)點信息了:
至此,整個ELK環(huán)境就搭建起來了浑槽。