最近在做 Spring Cloud 相關系列框架的搭建,在做到整合微服務跟蹤-Sleuth后,項目添加了Sleuth后已經能夠正常的輸出跟蹤信息日志,接下來要對整個日志進行分析處理,這里選取使用配合ELK來做,首先需要搭建整個ELK環境。
ELK介紹
ELK (官網)其實是三個不同的內容,一般配合一起使用。分別是:
- ElasticSearch
- Logstash
- Kibana
具體的介紹可以看官網的每個產品介紹
Windows 環境搭建
可以參考:https://blog.csdn.net/pilihaotian/article/details/52452010 ,基本上比較詳細了,但是也可以看出windows安裝比較繁瑣,而且還會耗費機器本身資源,本文介紹使用Docker安裝搭建。
Docker 環境搭建
ELK對應的有很多版本,本文均使用最新版本
安裝 elasticsearch
拉取鏡像
docker pull elasticsearch
啟動容器
docker run -d -p 9200:9200 --name leon_elasticsearch elasticsearch
此時訪問地址:<u>http://192.168.9.151:9200/</u>,看到如下效果說明啟動成功:
安裝插件 elasticsearch-head
一般情況下,安裝插件只需要執行命令:
elasticsearch-plugin install mobz/elasticsearch-head
那么我們現在進入到容器中對應的目錄:/usr/share/elasticsearch/bin/,然后執行上述命令,但是發現報錯:
查閱相關文檔得知以下信息:
– for Elasticsearch 5.x:
site plugins are not supported. Run elasticsearch-head as a standalone server
也就是說5.X以上的版本,需要單獨啟動 elasticsearch-head 服務。
那么單獨啟動運行插件容器:
docker run -d -p 9100:9100 --name leon_elasticsearch-head mobz/elasticsearch-head:5
注意后面跟的版本5,一定要對應自己的版本。
容器啟動后,訪問地址:</font><u>http://192.168.9.151:9100/</u>
此時代表插件服務已經啟動,但是點擊連接,發現無法連接elasticsearch服務,需要修改配置文件,文件地址為容器中的:/usr/share/elasticsearch/config/elasticsearch.yml
我們進入容器,發現無法使用VI命令修改文件,這個時候可以安裝VI工具然后修改文件,或者使用另外一種粗暴的方法,在外面修改然后覆蓋文件。這里因為安裝VI總是出錯,所以使用第二種方式。
首先將容器中的配置文件導出來:
docker cp leon_elasticsearch:/usr/share/elasticsearch/config/elasticsearch.yml /home/px2/elasticsearch.yml
在文件中添加以下內容:
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/ 就可以連接上了(此時還沒有數據)
注意:如果還是不能連接,可以訪問地址來連接:http://localhost:9100/?auth_user=elastic&auth_password=changeme
安裝logstash
這里有個比較坑的問題,使用Docker官方Hub里的鏡像 docker pull logstash 啟動的容器總是會自動停掉,無法運行,后來選擇使用官網中的鏡像地址:
docker run --name leon_logstash docker.elastic.co/logstash/logstash:6.2.4
修改配置文件,進入容器:
docker exec -it leon_logstash /bin/bash
進入目錄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 ,看到如下效果
此時報錯中間紅色部分,無法進行創建,找到資料得知:
看官網的解釋說這是因為初次設置的時候logstash沒有加載到數據導致的。所以先要保證logstash能夠加載到數據。
配置數據
進入到容器中:
docker exec -it leon_logstash /bin/bash
然后進入如下目錄:
cd pipeline/
打開配置文件:vi logstash.conf
修改內容如下:
input {
file {
codec=> json
path => "/usr/local/*.json"
}
}
filter {
#定義數據的格式
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的地址,而且還指定了內容輸入地址:/usr/local/*.json,需要在usr/local下有json格式的數據,接下來將項目生成的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容器,在重新訪問頁面,可以看到可以進行create了。
點擊create創建成功后,點擊Discovery,選擇時間為一年內,可以看到之前的數據:
并且訪問9100地址也能加載出節點信息了:
至此,整個ELK環境就搭建起來了。