松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
Spring Boot 如何攀上高大上的 ELK?今天松哥手把手教你将 Spring Boot 日志实时输入到 Es 中!
以下是视频笔记:
注意,笔记只是视频内容的一个简要记录,因此笔记内容比较简单,完整的内容可以查看视频。
30.1 Logstash
一个具备实时数据传输能力的管道。它可以将数据从输入端(Spring Boot 日志)传送到输出端(Es)。数据在 Logstash 中传输的过程中,可以加入过滤器 Filter,对数据进行过滤。
30.2 安装
- 
可以使用 Docker 安装(不推荐)。
 - 
直接安装
 
2.1 下载 Logstash:https://www.elastic.co/cn/downloads/logstash
2.2 解压下载后的文件。
2.3 在 config 目录下,添加 logstash-springboot.conf 文件,内容如下:
input {
  tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    codec => json_lines
  }
}
filter {
}
output {
  elasticsearch {
    hosts => ["127.0.0.1:9200","127.0.0.1:9201","127.0.0.1:9202"]
    index => "log-javaboy-dev-%{+yyyy.MM.dd}" 
  }
}
2.4 在 config/pipelines.yml 文件中,加载 logstash-springboot.conf 配置文件:
- pipeline.id: log_dev
  path.config: "/Users/sang/workspace/elasticsearch/logstash-7.10.2/config/logstash-springboot.conf"
2.5 启动 Logstash
进入到 bin 目录下,执行 ./logstash 命令启动即可(启动之前确保 Es 已经启动)。看到如下内容表示启动成功:

30.3 Spring Boot 日志
首先创建一个 Spring Boot 工程,引入 web 依赖 和 logstash 相关的依赖:
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>6.6</version>
</dependency>
然后在 resources 目录下创建 logback-spring.xml 文件(具体参考:Spring Boot 日志各种用法),将日志输出到 logstash 中:
<?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/console-appender.xml"/>
    <!--应用名称-->
    <property name="APP_NAME" value="logstash"/>
    <!--日志文件保存路径-->
    <property name="LOG_FILE_PATH" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/logs}"/>
    <contextName>${APP_NAME}</contextName>
    <!--每天记录日志到文件appender-->
    <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${LOG_FILE_PATH}/${APP_NAME}-%d{yyyy-MM-dd}.log</fileNamePattern>
            <maxHistory>30</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
        </encoder>
    </appender>
    <!--输出到logstash的appender-->
    <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.LogstashEncoder"/>
    </appender>
    <root level="INFO">
        <appender-ref ref="CONSOLE"/>
        <appender-ref ref="FILE"/>
        <appender-ref ref="LOGSTASH"/>
    </root>
</configuration>
最后再创建一个 HelloController 用来测试:
@RestController
public class HelloController {
    private static final Logger logger = LoggerFactory.getLogger(HelloController.class);
    @GetMapping("/hello")
    public void hello() {
        logger.info("hello logstash!");
    }
}
接下来启动 Spring Boot 工程。
30.4 Kibana
在 Kibana 中,点击创建一个索引规则:

接下来创建一个索引规则:

输入索引名称规则:

然后点击下一步,选择 @timestamp。
最后,在 discover 中可以查看日志信息。

ElasticSearch 系列其他文章:
- 
打算出一个 ElasticSearch 教程,谁赞成,谁反对? 
 - 
ElasticSearch 从安装开始 
 - 
ElasticSearch 第三弹,核心概念介绍 
 - 
ElasticSearch 中的中文分词器该怎么玩? 
 - 
ElasticSearch 索引基本操作 
 - 
ElasticSearch 文档的添加、获取以及更新 
 - 
ElasticSearch 文档的删除和批量操作 
 - 
ElasticSearch 文档路由,你的数据到底存在哪一个分片上? 
 - 
ElasticSearch 并发的处理方式:锁和版本控制 
 - 
ElasticSearch 中的倒排索引到底是什么? 
 - 
ElasticSearch 动态映射与静态映射 
 - 
ElasticSearch 四种字段类型详解 
 - 
ElasticSearch 中的地理类型和特殊类型 
 - 
ElasticSearch 23 种映射参数详解 
 - 
ElasticSearch 如何配置某个字段的权重? 
 - 
ElasticSearch 23 种映射参数详解【3】 
 - 
ElasticSearch 映射模版 
 - 
ElasticSearch 搜索入门 
 - 
ElasticSearch 全文搜索怎么玩? 
 - 
ElasticSearch 打错字还能搜索到?试试 fuzzy query! 
 - 
ElasticSearch 复合查询,理解 Es 中的文档评分策略! 
 - 
想搜索附近评分较高的餐厅,ElasticSearch 大显身手! 
 - 
ElasticSearch 如何像 MySQL 一样做多表联合查询? 
 - 
ElasticSearch 地理位置查询与特殊查询 
 - 
ElasticSearch 搜索高亮与排序 
 - 
ElasticSearch 指标聚合 
 - 
ElasticSearch 桶聚合 
 - 
ElasticSearch 管道聚合 
 - 
Java 操作 ElasticSearch,so easy! 
 - 
ElasticSearch Java 高级客户端索引操作~ 
 - 
ElasticSearch Java 高级客户端如何操作索引? 
 - 
使用 Java 客户端添加 ElasticSearch 文档 
 - 
使用 Java 客户端对 ElasticSearch 文档进行删改查 
 
本文分享自微信公众号 - 江南一点雨(a_javaboy)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
