SpringBoot + ELK 快速搭建日志分析系统

版本信息

Spring Boot 2.1.3.RELEASE
ELK 7.9.0

下载地址

logstash https://artifacts.elastic.co/downloads/logstash/logstash-7.9.0.zip
elasticsearch https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.9.0-linux-x86_64.tar.gz
kibana https://artifacts.elastic.co/downloads/kibana/kibana-7.9.0-linux-x86_64.tar.gz

开始搭建

为ELK创建系统用户

因为Elasticsearch禁止root用户运行,所以需要创建并切换用户。

1
2
useradd -G elk elk
su elk

Elasticsearch

  1. 解压安装包到/usr/local目录下

  2. 进入根目录/usr/local/elasticsearch-7.9.0,修改配置

    ./config/elasticsearch.yml
    1
    2
    node.name: node-1
    cluster.initial_master_nodes: ["node-1"]

    默认配置是node-1、node-2双节点集群,这里先改为单节点,否则会出现找不到主节点无法正常工作的问题。

  3. 启动./bin/elasticsearch

    默认监听127.0.0.1:9200,看到日志输出started,可在浏览器访问127.0.0.1:9200

  4. 启动失败常见问题

    • 开始使用root用户启动失败后,需要删除logs目录下的文件,否则用elk用户启动会出现文件权限问题。
    • 开始没有修改单节点配置启动失败后,需要删除data目录下的文件,否则会因为缓存造成修改配置没有生效。
    • 启动报max file descriptors [xxx] for elasticsearch process is too low,切换root用户修改配置:

      /etc/security/limits.conf
      1
      2
      3
      4
      # 在最后追加
      elk soft nofile 65535
      elk hard nofile 65535
      # 保存后不用重启,重新登录生效
    • 启动报max virtual memory areas vm.max_map_count [xxx] is too low,切换root用户修改配置:

      /etc/sysctl.conf
      1
      2
      3
      # 在最后追加
      vm.max_map_count=655360
      # 保存后执行 sysctl -p 生效

配置Logstash

  1. 解压安装包到/usr/local目录下

  2. 进入根目录/usr/local/logstash-7.9.0,配置输入输出

    ./config/logstash.conf
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    # 定义输入来源
    input {
    tcp {
    # 监听地址
    host => "0.0.0.0"
    port => 9600
    codec => json_lines
    }
    }
    # 定义输出目标
    output {
    elasticsearch {
    hosts => ["http://localhost:9200"]
    # 设置索引,*不能包含大写字母!*
    index => "spring_logs-%{+YYYY.MM.dd}"
    }
    }
  3. 启动./bin/logstash -f ./config/logstash.conf

    看到日志输出Successfully started Logstash API endpoint {:port=>9601},可在浏览器访问127.0.0.1:9601

Spring Boot

配置logback输出日志到logstash

  1. 添加依赖

    1
    2
    3
    4
    5
    <dependency>
    <groupId>net.logstash.logback</groupId>
    <artifactId>logstash-logback-encoder</artifactId>
    <version>5.1</version>
    </dependency>
  2. 配置logback-spring.xml

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    <appender name="LOG_STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
    <!-- 输出到logstash -->
    <destination>127.0.0.1:9600</destination>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
    <providers>
    <!-- 配置输出信息 -->
    <pattern>
    <pattern>
    {
    "app":"${springAppName}",
    "level":"%level",
    "message":"${CONSOLE_LOG_PATTERN}"
    }
    </pattern>
    </pattern>
    </providers>
    </encoder>
    <keepAliveDuration>5 minutes</keepAliveDuration>
    </appender>
    <root level="INFO">
    <appender-ref ref="LOG_STASH"/>
    </root>
  3. 启动Spring Application

Kibana

  1. 解压安装包到/usr/local目录下

  2. 进入根目录/usr/local/kibana-7.9.0,修改配置

    ./config/kibana.yml
    1
    2
    3
    4
    # 允许外网访问
    server.host: "0.0.0.0"
    # 中文界面
    i18n.locale: "zh-CN"
  3. 启动./bin/kibana

    看到日志输出http server running at http://0.0.0.0:5601,可在浏览器访问127.0.0.1:5601

  4. 查看日志

    4.1. 首先需要创建索引模式

    4.2. 索引模式名称使用spring_logs-*匹配所有日志索引,时间字段选择默认的@timestamp

    4.3. 左侧菜单栏选择Kibana->Discover,即可查看日志记录了