1)关于Elasticsearch:
Elasticsearch 是一个开源分布式时实分析搜索引擎,建立在全文搜索引擎库Apache Lucene基础上,同时隐藏了Apache Lucene的复杂性。Elasticsearch将所有的功能打包成一个独立的动画片,索引副本机制,RESTful风格接口,多数据源。自动搜索等特点。
2)关于Logstash:
Logstash 是一个完全开源的工具,主要用于数据收集,同时可以对数据进行过滤和格式化(转成JSON格式),然后传给数据存储或者消息队列Broker,用于后续加工处理。
在Logstash中包含三个阶段,分别是输入(Input)、处理(Filter非必要)和输出(Output)
3)关于Kibana:
Kibana 是一个设计出来用于和 Elasticsearch 一起使用的开源的分析与可视化平台,可以用 kibana 搜索、查看、交互存放在Elasticsearch 索引里的数据,使用各种不同的图表、表格、地图等展示高级数据分析与可视化,基于浏览器的接口使你能快速创建和分享实时展现Elasticsearch查询变化的动态仪表盘,让大量数据变得简单,容易理解。
=========================================================================
ELK的关系图如下:
Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
二,安装及开发配置
本文安装Windows版本,请根据电脑系统自行安装,官方下载地址:下载 Elastic 产品 | Elastic
下载的安装包如下:
在本地选择安装目录直接解压即可。
1)启动ElasticSearch,找到文件 /elasticsearch-8.4.2bin/elasticsearch.bat 双击启动。
初次启动报错:
exception during geoip databases updateorg.elasticsearch.ElasticsearchException: not all primary shards of [.geoip_databases] index are active
启动时会去更新地图的一些数据库,这里直接禁掉即可,在 /conf/elasticsearch.yml中添加配置:
ingest.geoip.downloader.enabled: false
重新启动成功,但是访问http://localhost:9200/失败,这里先关闭认证校验,修改配置如下:
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
enabled: false
xpack.security.transport.ssl:
enabled: false
访问成功界面如下:
2)启动Kibana,找到文件/kibana-8.4.2/bin/kibana.bat,默认连接本地的ElasticSearch,由于没有开启用户认证,这里直接双击启动即可。访问地址:http://localhost:5601/
如上打开开发工具,输入命令就可以在ElasticSearch中创建索引。
3)启动Logstash,这里以文件方式启动。
- 找到默认文件/logstash-8.4.2/config/logstash-sample.conf,复制并重命名为logstash-test.conf
修改配置如下,从控制台输入输出:
input {
stdin {}
}
output {
stdout {}
}
- 打开CMD命令窗口
- 进入Logstash安装目录的bin路径,执行命令:
logstash -f ./config/logstash-test.conf
可以看到控制台已经在等待输入了,测试输入就能看到输出的内容如下:
=========================================================================
安装启动部分结束,下面我们在程序中配置日志,通过logstash收集日志,并输出到elasticSearch,最后通过kinaba进行管理。
=========================================================================
三,在项目中的使用:
1)pom.xml中添加依赖
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>7.2</version>
</dependency>
2)添加logback-spring.xml配置文件,并在application.yml中指定日志文件的路径
# =========================================================================
logging:
config: classpath:logback-spring.xml
# =========================================================================
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<!--spring boot提供的logback的默认配置,必须引用,否则日志无法输出-->
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<!--日志存储路径-->
<property name="LOG_HOME" value="appLogs" />
<!--日志输出格式-->
<property name="PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %c{50} %M %L -- %m%n"/>
<!-- 控制台输出 -->
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<!--输出格式化-->
<pattern>${PATTERN}</pattern>
</encoder>
</appender>
<!-- 按天生成日志文件 -->
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<!--日志文件名-->
<FileNamePattern>${LOG_HOME}/%d{yyyy-MM-dd}.log</FileNamePattern>
<!--保留天数-->
<MaxHistory>30</MaxHistory>
</rollingPolicy>
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${PATTERN}</pattern>
</encoder>
<!--日志文件最大的大小-->
<triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">
<MaxFileSize>512MB</MaxFileSize>
</triggeringPolicy>
</appender>
<!-- 向logstash输出日志 -->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<!--配置logStash 服务地址 -->
<destination>127.0.0.1:4560</destination>
<!-- 日志输出编码 -->
<encoder charset="UTF-8" class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
<providers>
<timestamp>
<timeZone>UTC</timeZone>
</timestamp>
<pattern>
<pattern>
{
"logLevel": "%level",
"serviceName": "${springAppName:-}",
"pid": "${PID:-}",
"thread": "%thread",
"class": "%logger{40}",
"message": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
</appender>
<!-- 日志输出级别 -->
<root level="INFO">
<appender-ref ref="LOGSTASH" />
<appender-ref ref="FILE" />
<appender-ref ref="CONSOLE" />
</root>
</configuration>
3)在logstash-8.4.2/config 中添加配置文件logstash-es.conf
从Logback输入,输出到ElasticSearch
注意这里配置的index,后面在kibana里创建索引时需要输入进行模糊匹配,例如logstash*
# Sample Logstash configuration for creating a simple
# Logback -> Logstash -> Elasticsearch pipeline.
input {
tcp {
port => 4560
codec => "json_lines"
}
}
output {
elasticsearch {
hosts => ["http://localhost:9200"]
index => "logstash-test-applog-%{+YYYY.MM.dd}"
#user => "elastic"
#password => "changeme"
}
}
4)添加测试代码
package com.qi.study.springboot.controller;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import com.qi.study.springboot.result.JsonResult;
import com.qi.study.springboot.util.JsonResultBuilder;
@RestController
@RequestMapping("/demo")
public class LogstashController {
private final static Logger LOGGER = LoggerFactory.getLogger(LogstashController.class);
@RequestMapping("/log/output")
public JsonResult testLog2ES(@RequestParam String msg){
LOGGER.info("LogstashController-测试日志输出:{}",msg);
int i = 0;
while (i < 10) {
LOGGER.info("Info log [" + msg + i + "].");
i++;
}
return JsonResultBuilder.ok();
}
}
5) 启动项目访问
- 启动elasticSearch
- 启动logstash 【logstash -f ./config/logstash-es.conf】
- 启动kibana
- 启动springboot项目
这是控制台日志:
- 访问kibana页面,查看elasticSearch中的日志情况:
第一步按照如下步骤创建索引:
这里输入 logstash*,匹配到以后会显示Timestamp field,点击保存。
下一步就是切换到DisCorver页面,选择创建好的索引查看:
=========================================================================
至此,在springboot项目中使用ELK管理日志文件演示结束,更多操作请结合实际需要进行配置。
=========================================================================
四,源代码下载地址:https://download.csdn.net/download/MyNoteBlog/86725229