【ELK+Filebeat】Windows搭建ELK+Filebeat并在SpringBoot项目中使用

下载ELK+Filebeat

ElasticSearch:https://www.elastic.co/cn/downloads/elasticsearch
Logstash:https://www.elastic.co/cn/downloads/logstash
Kibana:https://www.elastic.co/cn/downloads/kibana
Filebeat:https://www.elastic.co/cn/downloads/beats/filebeat
下载zip文件

ElasticSearch

  1. 解压zip文件;
  2. 进入config文件夹,可以看见elasticsearch-plugins.example.yml文件,这个文件是官方给出的配置文件的一个示例,我们需要根据这个文件创建一个自己的配置文件;
  3. 创建elasticsearch.yml文件,配置以下内容:
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
xpack.security.http.ssl:
  enabled: false  # 注意这里改成false
  keystore.path: certs/http.p12
xpack.security.transport.ssl:
  enabled: true
  verification_mode: certificate
  keystore.path: certs/transport.p12
  truststore.path: certs/transport.p12
cluster.initial_master_nodes: ["xxxxxx"]  # xxxxxx表示集群节点的名字
http.host: 0.0.0.0
http.cors.enabled: true  # 跨域配置
http.cors.allow-origin: "*"
  1. 保存并退出;
  2. 进入到bin目录下,这个目录下的elasticsearch.bat就是我们需要执行的脚本文件,可以直接双击运行;也可以通过cmd命令运行:
elasticsearch.bat
  1. ElasticSearch的默认端口为9200,启动后访问localhost:9200即可查看是否启动成功。
    查看ElasticSearch是否启动成功

Logstash

  1. 解压zip文件;
  2. 进入config文件夹,可以看见logstash-sample.conf文件,这个文件是官方给出的配置文件的一个示例,我们需要根据这个文件创建一个自己的配置文件;
  3. 创建logstash.conf文件,配置以下内容:
input { 
  beats {
    port => 4560  # 记住这个端口,一会需要在filebeat里面配置
  }
}

output {
  stdout{  codec => rubydebug  { metadata => true }} 
  elasticsearch {  # 输出到es中
    hosts => ["localhost:9200"]
    index => "elk-demo-%{+YYYY.MM.dd}"  # 注册到es中的数据视图名字
  }
}
  1. 保存并退出;
  2. 进入到bin目录下,在当前路径下打开cmd窗口,运行以下命令:
logstash -f ./config/logstash.conf
  1. logstash默认端口是9600,启动后访问localhost:9600即可查看是否启动成功。
    查看logstash是否启动成功

kibana

  1. 解压zip文件;
  2. 进入到bin目录下,这个目录下的kibana.bat就是我们需要执行的脚本文件,可以直接双击运行;也可以通过cmd命令运行;
  3. kibana默认端口是5601,启动后访问localhost:5601即可查看是否启动成功。
    查看kibana是否启动成功

filebeat

  1. 解压zip文件;
  2. filebeat.yml文件即是配置文件,修改此文件:
filebeat.inputs:
- type: log
  enabled: true  # 是否开启日志收集 如果为false则不收集
  paths:  # 需要监控的文件路径 可配置多个
    - D:\elk\logs\warn\*.log
    - D:\elk\logs\info\*.log
    - D:\elk\logs\error\*.log
    - D:\elk\logs\*.log
  multiline:  # 对收集到的日志格式进行调整
        pattern: '^\d{4}-\d{1,2}-\d{1,2}'
        negate: true
        match: after
  tail_files: true  # filebeat默认读取log文件会一次性从头读取所有数据,当读取文件持续更新时,每次从头读取会重复读取以前的历史数据。tail_files配置项只保证第一次读取时从文件末尾开始,不读首行内容
  
output.logstash:  
  hosts: ["localhost:4560"]  # logstash中配置的端口
  1. 保存并退出;
  2. 通过命令启动filebeat
.\filebeat -e -c filebeat.yml

搭建SpringBoot项目

  1. 引入相关依赖
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- logback -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.2.3</version>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.35</version>
        </dependency>
    </dependencies>
  1. 配置logback.xml文件
<configuration>
    <timestamp key="bySecond" datePattern="yyyy-MM-dd'T'HH:mm:ss"/>
    <!-- 日志目录 -->
    <property name="LOG_HOME" value="D:/elk/logs"/>

    <appender name="INFO_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--
            返回DENY,日志将立即被抛弃不再经过其他过滤器;
            返回NEUTRAL,有序列表里的下个过滤器接着处理日志;
            返回ACCEPT,日志会被立即处理,不再经过剩余过滤器
             -->
            <level>INFO</level>
            <onMatch>NEUTRAL</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 按照每天生成日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出名 -->
            <fileNamePattern>${LOG_HOME}/info/%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志保留天数 -->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[%d][%-5level][%thread][%logger][%X{TRACE_ID}][%msg]%n</pattern>
        </encoder>
    </appender>

    <appender name="WARN_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--
            返回DENY,日志将立即被抛弃不再经过其他过滤器;
            返回NEUTRAL,有序列表里的下个过滤器接着处理日志;
            返回ACCEPT,日志会被立即处理,不再经过剩余过滤器
             -->
            <level>WARN</level>
            <onMatch>NEUTRAL</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 按照每天生成日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出名 -->
            <fileNamePattern>${LOG_HOME}/warn/%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志保留天数 -->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[%d][%-5level][%thread][%logger][%X{TRACE_ID}][%msg]%n</pattern>
        </encoder>
    </appender>

    <appender name="ERROR_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <filter class="ch.qos.logback.classic.filter.LevelFilter">
            <!--
            返回DENY,日志将立即被抛弃不再经过其他过滤器;
            返回NEUTRAL,有序列表里的下个过滤器接着处理日志;
            返回ACCEPT,日志会被立即处理,不再经过剩余过滤器
             -->
            <level>ERROR</level>
            <onMatch>NEUTRAL</onMatch>
            <onMismatch>DENY</onMismatch>
        </filter>
        <!-- 按照每天生成日志文件 -->
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <!-- 日志文件输出名 -->
            <fileNamePattern>${LOG_HOME}/error/%d{yyyy-MM-dd}.log</fileNamePattern>
            <!-- 日志保留天数 -->
            <MaxHistory>7</MaxHistory>
            <totalSizeCap>10GB</totalSizeCap>
        </rollingPolicy>
        <encoder>
            <pattern>[%d][%-5level][%thread][%logger][%X{TRACE_ID}][%msg]%n</pattern>
        </encoder>
    </appender>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>[%d][%-5level][%thread][%logger][%X{TRACE_ID}][%msg]%n</pattern>
        </encoder>
    </appender>

	<!-- 仅针对这个Controller收集日志 -->
    <logger name="org.example.controller.ElkController">
        <appender-ref ref="INFO_FILE"/>
        <appender-ref ref="WARN_FILE"/>
        <appender-ref ref="ERROR_FILE"/>
    </logger>

    <root level="INFO">
        <appender-ref ref="STDOUT"/>
    </root>

</configuration>
  1. 将logback.xml配置到application.yml文件中
logging:
  config: classpath:logback.xml
  1. 创建ElkController
@RestController
@Slf4j
@RequestMapping("/elk")
public class ElkController {

    private final static Logger logger = LoggerFactory.getLogger(ElkController.class);
    private final String LoggerTemplate = "code:{},msg:{},param:{}";

    @GetMapping("/logs")
    public R testLogs(){
        logger.warn("这是一条warn测试");  // 这条记录会在warn文件夹下
        logger.info("这是一条info测试");  // 这条记录会在info文件夹下
        try {
            int i = 5 / 0;
        }catch (Exception e){
            logger.error(LoggerTemplate,200,"这是一条error测试",e);  // 这条记录会在error文件夹下
        }
        return R.ok("200","操作成功");
    }
}
  1. 运行该项目,并通过postman发请求后,在日志存放的路径下就可以看见收集到的日志:
    创建的日志文件
  2. 进入到kibana中配置数据视图
    点击Stack Management
    在这里插入图片描述
    在这里插入图片描述
    然后保存
  3. 到discover中查看收集到的日志
    在这里插入图片描述
    在这里插入图片描述
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
通常,日志被分散的储存不同的设备上。如果你管理数十上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志。这样是不是感觉很繁琐和效率低下。开源实时日志分析ELK平台能够完美的解决日志收集和日志检索、分析的问题,ELK就是指ElasticSearch、Logstash和Kiabana三个开源工具。 因为ELK是可以跨平台部署,因此非常适用于多平台部署的应用。 二 环境准备 1. 安装JDK1.8环境 2. 下载ELK软件包 logstash: https://artifacts.elastic.co/downloads/logstash/logstash-5.5.0.zip elasticsearch:https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.5.0.zip kibana: https://artifacts.elastic.co/downloads/kibana/kibana-5.5.0-windows-x86.zip 分别解压下载的软件,elasticsearch,logstash,kibana 可以放在一个统一文件夹下 三 部署 1.配置logstash 在logstash文件夹的下bin目录创建配置文件logstash.conf ,内容如下: input { # 以文件作为来源 file { # 日志文件路径 path => "F:\test\dp.log" } } filter { #定义数据的格式,正则解析日志(根据实际需要对日志日志过滤、收集) grok { match => { "message" => "%{IPV4:clientIP}|%{GREEDYDATA:request}|%{NUMBER:duration}"} } #根据需要对数据的类型转换 mutate { convert => { "duration" => "integer" }} } # 定义输出 output { elasticsearch { hosts => ["localhost:9200"] #Elasticsearch 默认端口 } }   在bin目录下创建run.bat,写入一下脚本: logstash.bat -f logstash.conf 执行run.bat启动logstash。 2. 配置Elasticsearch elasticsearch.bat即可启动。 启动后浏览器访问 127.0.0.1:9200 ,出现以下的json表示成功。 3.配置kibana Kibana启动时从文件kibana.yml读取属性。默认设置配置Kibana运行localhost:5601。要更改主机或端口号,或者连接到在其他机器上运行的Elasticsearch,需要更新kibana.yml文件。 kibana.bat启动Kibana。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值