前言

温馨提醒:阅读本文需要10分钟

ELK介绍

  • ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
  • Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
  • Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
  • Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据

安装es和kibana以及logstash

本次使用的是es7.5版本,实验平台为windows。es和kibana的安装不在介绍,中规中矩。介绍下logstash的安装以及配置。

首先官网下载,下载与elasticSearch同一个版本,zip格式。

  1. CMD直接运行

  2. 配置文件运行,并用bat文件

    • 进入bin目录,新建文件 logstash_test.conf 或者直接使用logstash.conf 内容如下:

      input {
        tcp {
          mode => "server"
          host => "0.0.0.0"
          port => 4560
          codec => json_lines
        }
      }
      output {
        elasticsearch {
          hosts => "localhost:9200"
          index => "logstash-bywin-elk-%{+YYYY.MM.dd}"
        }
      }
      
  3. 在bin目录,新文件文件 run_default.bat 内容如下:

    logstash -f logstash_default.conf
    

    启动 run_default.bat 启动logstash。

maven引包

<dependencies>
        <!--logstash收集日志工具类-->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
        </dependency>

配置logback-spring.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <include resource="org/springframework/boot/logging/logback/defaults.xml" />
    <property name="LOG_FILE" value="${LOG_FILE:-${LOG_PATH:-${LOG_TEMP:-${java.io.tmpdir:-/tmp}}}/spring.log}"/>
    <!-- 定义日志的根目录 -->
    <property name="LOG_HOME" value="logs"/>
    <!-- 定义日志文件名称 -->
    <property name="appName" value="bywin_Elk_"/>
    <include resource="org/springframework/boot/logging/logback/console-appender.xml" />

    <!--输出到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="LOGSTASH"/>
    </root>
</configuration>

然后再在yml中配置log信息

logging:
  config: classpath:logback-spring.xml
  level:
    root: info
    org.springframework: INFO
    com.bywin: debug
  path: ./logs

怎么使用呢?

只需要像从前一样使用log打印日志就可以自动记录到es中,我们使用kibana来进行查看

@RestController
public class testController {
    private static final Logger LOGGER = LoggerFactory.getLogger(testController.class);

    @ApiOperation("测试elk日志controller")
    @RequestMapping(value = "testLog",method = RequestMethod.POST, produces = "application/json")
    public Result caseSearch(@RequestBody  JSONObject object) {
        String pram =object.get("pram").toString();
        LOGGER.info("这是一个测试elk日志的info日志{}",pram);
        LOGGER.debug("这是一个测试elk日志的debug日志{}",pram);
        LOGGER.error("这是一个测试elk日志的error日志{}",pram);
        return ResultUtil.success("ok");
    }
}

Kibana选择设置

elk1.png

总结

知识只有分享出来才有价值。如果有问题的话,可以在关于我的页面,通过我的邮箱联系我进行探讨。

Q.E.D.


Remain true to our original aspiration.