SpringBoot整合ELK日志收集
ELK简介
ELK是Elasticsearch+Logstash+Kibana简称
Elasticsearch 是一个分布式的搜索和分析引擎,可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 基于 Lucene 开发,现在是使用最广的开源搜索引擎之一。
Logstash 简单来说就是一根具备实时数据传输能力的管道,负责将数据信息从管道的输入端传输到管道的输出端,与此同时这根管道还可以让你根据自己的需求在中间加上滤网,Logstash提供了很多功能强大的滤网以满足你的各种应用场景。
Kibana 是一个开源的分析与可视化平台,设计出来用于和Elasticsearch一起使用的。你可以用kibana搜索、查看、交互存放在Elasticsearch索引里的数据,使用各种不同的图标、表格、地图等,kibana能够很轻易的展示高级数据分析与可视化。
ELK下载安装
可以去官网分别下载安装:https://www.elastic.co/cn/downloads/past-releases#(我这里下载的6.3.1)
需要提前安装JDK1.8。
启动顺序为:Logstash >= Elasticsearch > Kibana
1. Elasticsearch
# 解压
tar -zxvf elasticsearch-6.3.1.tar.gz
# 切换目录
cd elasticsearch-6.3.1/
修改配置文件 config/elasticsearch.yml
network.host: 192.168.37.189
http.port: 9200
启动es
启动的时候会报root权限不够、内存大小不够。报错关键字搜百度很多解决文章
// ./bin/elasticsearch -d 加-d后台运行
./bin/elasticsearch
启动成功,访问192.168.37.189:9200
{
"name" : "cTP-_7z",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "6tnImaw3RyKHlErGQrtuvw",
"version" : {
"number" : "6.3.1",
"build_flavor" : "default",
"build_type" : "zip",
"build_hash" : "eb782d0",
"build_date" : "2018-06-29T21:59:26.107521Z",
"build_snapshot" : false,
"lucene_version" : "7.3.1",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
2. Logstash
# 解压
tar -zxvf logstash-6.3.1.tar.gz
# 切换目录
cd logstash-6.3.1/
修改配置文件 config/logstash.yml
http.host: "192.168.37.189"
新建配置文件 vim logstash.conf
input {
tcp {
#模式选择为server
mode => "server"
#ip和端口根据自己情况填写,端口默认4560,对应下文logback.xml里appender中的destination
host => "192.168.37.189"
port => 4560
#格式json
codec => json_lines
}
}
filter {
#过滤器,根据需要填写
}
output {
elasticsearch {
action => "index"
#这里是es的地址,多个es要写成数组的形式
hosts => "192.168.37.189:9200"
#用于kibana过滤,可以填项目名称
index => "applog"
}
}
启动
./bin/logstash -f logstash.conf
访问http://192.168.37.189:9600,成功的话会显示一个JSON串
{
host: "gitlab.example.com",
version: "6.3.1",
http_address: "192.168.37.189:9600",
id: "004101d4-96cd-49c9-81c5-931c7327016e",
name: "gitlab.example.com",
build_date: "2018-06-29T22:43:59Z",
build_sha: "b79493047db01afca1e11c856fe8538d7ecb5787",
build_snapshot: false
}
3. Kibana
# 解压
tar -zxvf kibana-6.3.1-linux-x86_64.tar.gz
# 切换目录
cd kibana-6.3.1-linux-x86_64/
修改配置文件 config/logstash.yml
http.host: "192.168.37.189"
#修改为es的地址
elasticsearch.url: http://192.168.37.189:9200
启动
./bin/kibana
启动成功访问页面:http://192.168.37.189:5601
三、SpringBoot相关
1. pom.xml
<properties>
<ch.qos.logback.version>1.2.3</ch.qos.logback.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-core</artifactId>
<version>${ch.qos.logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>${ch.qos.logback.version}</version>
</dependency>
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-access</artifactId>
<version>${ch.qos.logback.version}</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>5.1</version>
</dependency>
</dependencies>
2. logback.xml
<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="false" scan="true" scanPeriod="1 seconds">
<include resource="org/springframework/boot/logging/logback/base.xml" />
<contextName>logback</contextName>
<appender name="stash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.37.189:4560</destination>
<!-- encoder必须配置,有多种可选 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder" />
</appender>
<root level="info">
<appender-ref ref="stash" />
</root>
</configuration>
3. Test.java
@RequestMapping("/test1")
public String test(){
logger.info("你好啊e");
logger.warn("This is a warn message!");
logger.error("This is error message!");
return "server被调用了!:" +port;
}
四、测试
运行测试用例后回到kibana界面,Management --> Index Patterns,填入Logstash配置中index的值,此处为applog
第二步 此处选择"@timestamp"
回到Discover,大功告成!