什么是ELK?
ELK 是一个开源的实时日志分析平台,它主要由 Elasticsearch、Logstash 和 Kiabana 三部分组成。
Logstash
Logstash 主要用于收集日志,它是一个开源数据收集引擎,具有实时管道功能。Logstash 可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。
Logstash 收集数据的过程主要分为以下三个部分:
- 输入:数据(包含但不限于日志)往往都是以不同的形式、格式存储在不同的系统中,而 Logstash 支持从多种数据源中收集数据(File、Syslog、https://cloud.tencent.com/product/cdb?from=10680、消息https://cloud.tencent.com/product/tdmq?from=10680等等)。
- 过滤器:实时解析和转换数据,识别已命名的字段以构建结构,并将它们转换成通用格式。
- 输出:Elasticsearch 并非存储的唯一选择,Logstash 提供很多输出选择。
Elasticsearch
Elasticsearch (ES)是一个分布式的 Restful 风格的搜索和数据分析引擎,它具有以下特点:
- 查询:允许执行和合并多种类型的搜索 — 结构化、非结构化、地理位置、度量指标 — 搜索方式随心而变。
- 分析:Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和模式。
- 速度:很快,可以做到亿万级的数据,毫秒级返回。
- 可扩展性:可以在笔记本电脑上运行,也可以在承载了 PB 级数据的成百上千台服务器上运行。
- 弹性:运行在一个分布式的环境中,从设计之初就考虑到了这一点。
- 灵活性:具备多个案例场景。支持数字、文本、地理位置、结构化、非结构化,所有的数据类型都欢迎。
Kibana
Kibana 可以使海量数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。其搭建过程也十分简单,您可以分分钟完成 Kibana 的安装并开始探索 Elasticsearch 的索引数据 — 没有代码、不需要额外的基础设施。
在 ELK 中,三大组件的大概工作流程如下图所示,由 Logstash 从各个服务中采集日志并存放至Elasticsearch 中,然后再由 Kiabana 从 Elasticsearch 中查询日志并展示给终端用户。
ELK的大致工作流程如下图所示:
ELK 安装部署
ES安装
logstash安装
kibana安装
简单 ELK 日志搭建
我们首先从简单的ELK日志框架开始搭建,简单的讲logstash中的数据输出到es中,然后再kibana进行展示。
首先我们需要再Logstash处进行相关的设置:
-
Logstash 基于插件开发和应用,包括输入、过滤器和输出三大类插件。输入插件指定了数据来源,过滤器插件则对数据做过滤清洗,而输出插件则指定了数据将被传输到哪里。在实际应用中,通常都是使用配置文件指定插件。
-
配置文件的语法形式与命令行相同,要使用的插件是通过插件名称来指定。 例如,想要向 Elasticsearch 中发送数据,则应该使用名称为 elasticsearch 的输出插件。在Logstash 安装路径下的config目录中,有一个名为logstash-sample.conf 的文件,提供了配置插件的参考。
-
这个文件配置的输入插件为 beats,输出插件为 elasticsearch。复制这个文件并重命名为 logstash-es. conf (通过cp命令, 也可以直接创建空文件),下面通过修改这个文件配置一个从命令行提取输入,并传输到 Elasticsearch 的 Logstash 实例。
按如下内容修改 logstash-es. conf 文件的输入输出插件:
input {
stdin {
}
}
output {
elasticsearch {
hosts => ["http://192.168.42.111:9200"]
index => "mylogstash1"
#user => "elastic"
#password => "changeme"
}
}
- 在上面的配置中,easticsearch 输出插件中的 hosts 参数指定了 Elasticsearch 地址和端口,index 参数则指定了存储的索引。Elasticsearch 索引不需要预先创建,但要保证它启动的地址和端口与配置文件中的一致。按如下方式启动 Logstash:
./logstash -f ../config/logstash-es.conf
- 其中,-f 参数后面指定了配置文件的路径。启动后如果没有异常,可在命令行窗口中输入"Hello world!" 等任意字符串,Logstash 将把输入内容提取到指定的 Elastiesearch 服务中。通过 Kibana 开发工具输入 GET _cat/indices, 可以 看到 mylogstash1 这个索引已经创建出来了。
- 输入GET /mylogstash1/_search,则返回结果为
- 通过上图可以看到,Elasticsearch 为输入创建了一个 mylogstash1 索引,在命令行输入的字符已经被索引,在返回结果的_ source 字段上可以看到文档内容。
Spring boot 集成 ELK
ELK 收集 Spring boot 项目中的日志信息其实很简单,我们只需要做如下几步即可:
Logstash 配置
首先我们要对 Logstash 进行相关配置,将 input 设置为 从服务上获取数据,然后将数据输出到ES中。(如果是在服务器上操作,记得开放端口号)
可以自行创建一个新配置文件,启动的时候指定就可以了。
./logstash -f ../config/logstash-es.conf
配置文件:
input {
tcp {
mode => "server"
host => "0.0.0.0"
port => 4560
codec => json_lines
}
}
output {
elasticsearch {
hosts => "localhost:9200"
index => "springboot-logstash-%{+YYYY.MM.dd}"
}
}
Spring boot 项目
-
引入依赖
<!--集成logstash--> <dependency> <groupId>net.logstash.logback</groupId> <artifactId>logstash-logback-encoder</artifactId> <version>5.3</version> </dependency>
-
添加日志文件
在资源文件夹下面创建日志文件:logback-spring.xml;配置的地址要和logstash配置的input相同。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration>
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<springProperty scope="context" name="appName" source="spring.application.name"/>
<!-- 日志在工程中的输出位置 -->
<property name="LOG_FILE" value="${BUILD_FOLDER:-build}/${appName}"/>
<!-- 控制台的日志输出样式 -->
<property name="CONSOLE_LOG_PATTERN" value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}}"/>
<!-- 控制台输出 -->
<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
<!-- 日志输出编码 -->
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
<charset>utf8</charset>
</encoder>
</appender>
<!--logstash配置-->
<appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
<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}",
"rest": "%message"
}
</pattern>
</pattern>
</providers>
</encoder>
<!--<encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>-->
</appender>
<root level="INFO">
<appender-ref ref="LOGSTASH"/>
<appender-ref ref="CONSOLE"/>
</root>
</configuration>
- 接口创建
创建一个接口输出日志用来测试;
@Slf4j
@RestController
public class TestController {
@GetMapping("/test")
public void test(){
log.info("测试日志!");
}
}
测试
首先分别将 logstash ,es,kibana 启动,然后启动spring boot 项目调用接口。(es 中的数据可能会有延时,稍等会)
接口调用之后,我们就可以到 kibana 界面查看了,我们首先需要创建 index pattern 这样才能查询数据:
最后在 discover 界面选择对应索引就可以查看数据了。文章来源:https://www.toymoban.com/news/detail-425090.html
文章来源地址https://www.toymoban.com/news/detail-425090.html
到了这里,关于ELK 日志框架搭建 (springboot 接入 elk)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!