文章目录
一、ELK介绍
ELK是Elasticsearch、Logstash、 Kibana的三款软件的整合,是一套开源的、完整的日志收集、存储以及展示监控系统。
- Elasticsearch:开源分布式搜索引擎,提供搜集、分析、存储数据功能。
- Logstash:日志搜集、分析、过滤,支持大量数据获取。其自带输入(input)、过滤语法(grok)、输出(output)三部分。其输入有两种方式:①由各beat采集器输入,经过滤后输出到ES ②本机数据输入,经过滤后输出到ES。
- Kibana:数据可视化分析软件。数据存储到ES中后,可以在Kibana中进行检索以及监控。
本文中使用:Springboot应用+Logstash+Elasticsearch+Kibana来实现ELK技术栈的使用
二、ELK容器镜像版本选择
dockerhub ELK最新镜像是8.6.2
Elasticsearch 7.17.9
Kibana 7.17.9
Logstash 7.17.9
三、ELK容器镜像拉取
docker pull elasticsearch:7.17.9
docker pull logstash:7.17.9
docker pull kibana:7.17.9
四、docker-compose编排
1. 编排compose文件
vim docker-compose.yml
version: '3' #compose版本
services:
elasticsearch: #服务名
image: elasticsearch:7.17.9 #镜像版本
container_name: es-elasticsearch-1 #容器名称
networks: #网络
- host
environment: #环境变量(在dockerhub上面查看)
cluster.name: 'elasticsearch' #设置集群名称为elasticsearch
discovery.type: 'single-node' #以单一节点模式启动
ES_JAVA_OPTS: '-Xms512m -Xmx512m' #设置使用jvm内存大小
xpack.security.enabled: 'true'
xpack.security.http.ssl.enabled: 'false'
ELASTIC_PASSWORD: 'es123456'
volumes:
- /opt/module/docker-compose/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件文件挂载
- /opt/module/docker-compose/elk/elasticsearch/data:/usr/share/elasticsearch/data #数据文件挂载
ports:
- 9200:9200
kibana:
image: kibana:7.17.9
container_name: es-kibana-1
networks:
- host
links:
- elasticsearch:es #容器名:给容器取的别名(kibana中可以使用es访问elasticsearch)
depends_on:
- elasticsearch #kibana在elasticsearch启动之后再启动
environment:
elasticsearch.hosts: 'http://es:9200' #设置访问elasticsearch的地址
volumes:
- /opt/module/docker-compose/elk/kibana/config:/usr/share/kibana/config #配置文件挂载
ports:
- 5601:5601
logstash:
image: logstash:7.17.9
container_name: es-logstash-1
networks:
- host
volumes:
- /opt/module/docker-compose/elk/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf #挂载logstash的配置文件
- /opt/module/docker-compose/elk/logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
depends_on:
- elasticsearch #logstash在elasticsearch启动之后再启动
links:
- elasticsearch:es #容器名:给容器取的别名(logstash中可以使用es访问elasticsearch)
ports:
- 4560:4560
networks:
host:
2.准备操作
- 创建挂载目录
- 设置Elasticsearch数据目录权限
chmod 777 /opt/module/docker-compose/elk/elasticsearch/data```
- 设置内核参数
# 改变设置
sysctl -w vm.max_map_count=262144
# 使之立即生效
sysctl -p
注:这一步是为了防止启动容器时,报出如下错误:
bootstrap checks failed max virtual memory areas vm.max_map_count [65530] likely too low, increase to at least [262144]
Elasticsearch关于vm.max_map_count的解释
- 创建logstash.conf
/opt/module/docker-compose/elk目录下面执行 vim logstash.conf
input{
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output{
stdout{
codec => rubydebug
}
elasticsearch {
hosts => ["elasticsearch:9200"]
}
}
- 创建logstash.yml
/opt/module/docker/logstash目录下面执行 vim logstash.yml
xpack.monitoring.enabled: "true"
xpack.monitoring.elasticsearch.hosts: "http://es:9200"
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "es123456"
3.构建并运行ELK相关容器
docker-compose -f docker-compose-dev.yml up -d
4.Logstash安装json_lines插件
# 进入logstash容器
docker exec -it es-logstash-1 /bin/bash
# 进入bin目录
cd /bin/
# 安装插件
logstash-plugin install logstash-codec-json_lines
# 退出容器
exit
# 重启logstash服务
docker restart eslogstash-1
五、SpringBoot集成Logstash
pom文件引入Logstash依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
<version>2.7.5</version>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version>
</dependency>
在application.yml中引用logback-spring配置
如果配置文件名称为:logback-spring.xml 或者 logback.xml则无需引用
logging:
config: classpath:logback.xml
logback-spring.xml的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="TRACE"/>
<!--日志输出到logstash-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<destination>192.168.10.110:4560</destination>
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
</appender>
<!-- 开发、测试环境 -->
<springProfile name="dev,test">
<logger name="org.springframework.web" level="INFO"/>
<logger name="org.springboot.sample" level="INFO"/>
<logger name="com.jiayuan" level="DEBUG"/>
</springProfile>
<!-- 生产环境 -->
<springProfile name="prod">
<logger name="org.springframework.web" level="ERROR"/>
<logger name="org.springboot.sample" level="ERROR"/>
<logger name="com.jiayuan" level="ERROR"/>
</springProfile>
<root level="DEBUG">
<appender-ref ref="LOGSTASH"/>
</root>
</configuration>
六、kibana可视化日志分析
1.Kibana创建索引匹配模式
-
打开Kibana的Stack Management功能
-
2.创建索引匹配模式
然后我们就可以看见刚刚创建的索引规则了
-
接下来打开Discover功能,我们就可以看到Springboot应用中产生的日志信息了。
2.日志分析
- 添加过滤器来检索日志,例如我们检索:level是ERROR的日志
- 使用KQL(Kibana Query Language)进行检索日志,例如:我们检索level是info的日志