springboot - 2.7.3版本 - (五)整合Elasticsearch+Logstash+Kibana(ELK)

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值