快速安装ELK
1.1 ELK各个组件说明
- Elasticsearch:用于存储收集到的日志信息;
- Logstash:用于收集日志,SpringBoot应用整合了Logstash以后会把日志发送给Logstash,Logstash再把日志转发给Elasticsearch;
- Kibana:通过Web端的可视化界面来查看日志。
1.2 使用前说明
使用的Docker镜像 sebp/elk:793
注意该容器使用的内存大约在2.1G左右
服务器需要安装Docker、Docker-compose
这个镜像是Elasticsearch、Logstash、Kibana集成容器镜像,使用docker或者docker-compose启动后各个组件就会启动成功
1.3 使用前配置
1.3.1 服务器配置
在启动该容器前需要设置一下一个进程可以拥有的VMA(虚拟内存区域)的数量
sysctl -w vm.max_map_count=262144
# 使上个命令立即生效
sysctl -p
1.3.2 配置启动文件
创建docker-compose.yml文件
version: "3.5"
services:
elk:
image: sebp/elk:7.12.0
volumes:
- ./elk/02-beats-input.conf:/etc/logstash/conf.d/02-beats-input.conf
environment:
ES_JAVA_OPTS: -Xms512m -Xmx512m
ports:
#Kibana 网络界面
- "5601:5601"
# Elasticsearch JSON 接口
- "9200:9200"
# Logstash Beats 接口
- "5044:5044"
1.3.2 Logstash配置
在docker-compose.yml文件目录下创建elk文件夹,创建Logstash配置文件 02-beats-input.conf
mkdir elk && cd elk
vi 02-beats-input.conf
02-beats-input.conf 配置文件内容
input {
tcp {
port => 5044
codec => json_lines
}
}
output{
elasticsearch {
hosts => ["localhost:9200"]
index => "beat-%{+YYYY.MM.dd}"
}
}
1.4 启动ELK
在docker-compose.yml目录下启动elk
docker-compose up -d elk
访问Kibana地址: ip:5601
说明:现在是看不到日志的,ES里还没有Index,需要创建应用打印日志
1.5 创建应用
创建应用spring-boot-elk
,POM文件引用如下。注意必须要引入logstash-logback-encoder
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--集成logstash-->
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>6.6</version>
</dependency>
修改application.yml
文件为
spring:
application:
name: elk-test
logging:
logstash:
destination: 192.168.67.68:5044
创建日志配置文件logback-spring.xml
,如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<springProperty scope="context" name="SPRING_APPLICATION_NAME" source="spring.application.name"/>
<springProperty scope="context" name="LOGSTASH_DESTINATION" source="logging.logstash.destination"/>
<!-- 控制台 appender -->
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger - %msg%n</pattern>
<charset>UTF-8</charset>
</encoder>
</appender>
<!-- 为logstash输出的JSON格式的Appender -->
<appender name="logstash" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>${LOGSTASH_DESTINATION}</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"app": "${SPRING_APPLICATION_NAME:-}",
"level": "%level",
"trace": "%X{x-trace-id}",
"span": "%X{X-B3-SpanId:-}",
"thread": "%thread",
"class": "%logger{40}",
"message": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!--日志打印的包的范围,及分类日志文件存储 -->
<logger name="cn.amoqi.springbootelk" additivity="false">
<level value="DEBUG"/>
<appender-ref ref="STDOUT"/>
<appender-ref ref="logstash"/>
</logger>
<!--控制台打印资源加载信息-->
<root level="WARN">
<appender-ref ref="STDOUT"/>
<appender-ref ref="logstash"/>
</root>
</configuration>
创建IndexController来打印日志如下
@RestController
@Slf4j
public class IndexController {
@RequestMapping
public void index(){
log.info("我爱北京天安门");
log.error("我爱北京天安门");
log.debug("我爱北京天安门");
log.warn("我爱北京天安门");
}
public void testException(){
throw new RuntimeException("111111111111");
}
}
启动应用访问:localhost:8080
打印日志如下
16:55:32.700 [http-nio-8080-exec-1] INFO cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] ERROR cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] DEBUG cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
16:55:32.700 [http-nio-8080-exec-1] WARN cn.amoqi.springbootelk.controller.IndexController - 我爱北京天安门
1.6 配置Kibana
在浏览器上输入地址 http://192.168.67.68:5601/
访问kibana,注意192.168.67.68
为启动Docker的服务器
点击左上角菜单,下拉选择Management-> Stack Management
点击左边导航栏的Index Patterns
->Create index Pattern
输入设置的beat-*,点击next->step
选择@timestamp
,点击Create index pattern
显示下面这个页面就配置好了
1.7 查看日志
点击左上角的菜单按钮,点击Kibana
栏目下的Discover
,日志就显示出来了。大功告成(▽)
结语
一名四年工作经验的程序猿,目前从事物流行业的工作,有自己的小破网站amoqi.cn。欢迎大家关注公众号【CoderQi】,一起来交流JAVA知识,包括但不限于SpringBoot+微服务,更有奇奇学习过程中学习的视频、面试资料和专业书籍等免费放送,希望大家能够喜欢。