ELK介紹
引用網上別人的介紹:
Logstash:日誌收集工具,可以從本地磁盤,網絡服務(自己監聽端口,接受用戶日誌),消息隊列中收集各種各樣的日誌,然後進行過濾分析,並將日誌輸出到Elasticsearch中。
Elasticsearch:日誌分佈式存儲/搜索工具,原生支持集羣功能,可以將指定時間的日誌生成一個索引,加快日誌查詢和訪問。
Kibana:可視化日誌Web展示工具,對Elasticsearch中存儲的日誌進行展示,還可以生成炫麗的儀表盤。
環境配置
準備工作
- 首先建議在linux上配置ELK會更爲方便,Windows對組件兼容較差,官網上各種版本都有可以自行下載。
附上傳送門:https://www.elastic.co/cn/downloads - 服務器需要java運行環境,配置方式也不贅述了,不會的請移步傳送門:
http://www.runoob.com/w3cnote/win7-linux-java-setup.html - 在根目錄創建名爲elk的文件夾
mkdir elk
將下載好的三個文件解壓進文件夾中
博客中文件夾的結構爲:
elk:
elasticsearch
logstash
kibana
配置Elasticsearch
vi /elk/elasticsearch/config/elasticsearch.yml
//配置外網連接,如果不能用請檢查防火牆配置
network.host: 0.0.0.0
http.port: 9200
//後臺啓動elasticsearch服務
/elk/elasticsearch/bin/elasticsearch &
啓動沒有報錯成功後,在瀏覽器輸入ip:9200端口,顯示下圖所示爲啓動成功
配置Kibana
vi /elk/kibana/config/kibana.yml
//常用配置:
elasticsearch.url: "http:localhost:9200" //配置elasticsearch所在的IP和端口
server.port: 8888 //設置服務端口即可視化頁面映射端口
server.host: "IP" //設置服務IP
啓動測試
/elk/kibana/bin/kibana &
啓動完成沒有報錯後,在瀏覽器輸入IP:Ports,在配置文件中配置的地址,
出現如下頁面爲成功
配置Logstash
我們在項目中使用的是springboot自帶的logback,我們使用自定義的配置文件
首先在logstash目錄中創建一個文件夾
mkdir /elk/logstash/webconfig
創建並編輯一個新配置文件
vi /elk/logstash/webconfig/log_elk.conf
在配置文件中添加
配置文件詳細入門參考傳送門:https://www.cnblogs.com/moonlightL/p/7760512.html
input {
# 我們創建了兩個微服務demo 所以建立兩個不同的輸入,將兩個服務的日誌分別輸入到不同的索引中
tcp {
mode => "server"
host => "0.0.0.0" # 允許任意主機發送日誌
type => "elk1" # 設定type以區分每個輸入源
port => 4567
codec => json_lines # 數據格式
}
tcp {
mode => "server"
host => "0.0.0.0"
type => "elk2"
port => 4667
codec => json_lines
}
}
filter {
#Only matched data are send to output.
}
output {
# For detail config for elasticsearch as output,
# See: https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html
if [type] == "elk1" {
elasticsearch {
action => "index" # 輸出時創建映射
hosts => "192.168.87.136:9200" # ElasticSearch 的地址和端口
index => "elk1" # 指定索引名
codec => "json"
}
}
if [type] == "elk2" {
elasticsearch {
action => "index" #The operation on ES
hosts => "192.168.87.136:9200" #ElasticSearch host, can be array.
index => "elk2" #The index to write data to.
codec => "json"
}
}
}
啓動Logstash
//-f後可以接指定的配置文件,也可以是一個目錄,它會自動將目錄中的所有配置文件一起導入合成一個配置文件,實現多配置文件啓動
//單文件:
/elk/logstash/bin/logstash -f /elk/logstash/wegconfig/log_elk.conf &
//目錄:
/elk/logstash/bin/logstash -f /elk/logstash/wegconfig &
Logstash啓動比較慢,最後啓動成功後顯示:
準備微服務
使用idea創建springboot項目,勾選web組件。
在resource文件夾下創建配置文件logback-spring.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml" />
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--配置logstash的ip和端口,在logstash配置文件中-->
<destination>localhost:4567</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
新建一個IndexController類
@RestController
public class IndexController {
private final Logger logger = LoggerFactory.getLogger(getClass());
@GetMapping("/index")
public Object index() {
logger.debug("======ELK2測試=======");
logger.info("======ELK2測試=======");
logger.warn("======ELK2測試=======");
logger.error("======ELK2測試=======");
return "success";
}
}
在另一個微服務中也同理創建,只需要修改logback-spring.xml中的Logstash端口號,在Controller中日誌輸出的內容也可以做簡單區分。
最後啓動兩個微服務。
運行測試
- 依次啓動Elasticsearch,Kibana,Logstash和兩個微服務
- 打開Kibana頁面
頁面中已經有了我們配置的兩個索引,其中有11條日誌是在我們啓動微服務時springboot輸出的日誌,在有第一條日誌通過tcp發送到Logstash,Logstash將它轉發到Elasticsearch時Elasticsearch自動爲我們創建了索引。
接着我們在Kibana中添加該索引
兩個索引添加完成後
我們在瀏覽器中訪問兩個微服務的index地址後刷新kibana頁面。
簡單的搭建到此就結束了