ELK监控spring-boot日志环境搭建-Linux

1,221 阅读5分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第4天,点击查看活动详情

之前写了两篇ELK在docker以及windows中的开发环境搭建步骤,今天来一篇在linux中搭建开发环境的步骤。

下载elk

下载地址:

官网华为镜像elastic中文社区

网上有的教程选择去一些镜像网站下载,我这里用的是WSL的ubuntu 18.04,就直接通过windows访问的eastic中文社区,复制下载地址下载的。

然后直接在终端中执行:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.2-linux-x86_64.tar.gz 其中的连接地址就是从网页上复制的。

桌面版的可按照上述方式或者其余的方式分别下载好elasticsearch、kibana、logstash。

也可以直接执行下面的命令下载7.15.2版本。

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

下载完毕之后分别解压:

运行es的用户

  1. 创建运行es的用户。

    root用户操作必选,非root用户可选。

    elasticsearch为了安全考虑,不能用root用户运行,所以需要创建一个普通的用户,用普通的用户来运行。我这里创建一个es 用户为例。

    将下面的命令中的<elasticsearch path> 换成你的elasticsearch的磁盘路径,将它的权限赋予给es用户(你的用户不是es就需要换成你创建的用户名)。

    sudo chown -R es <elasticsearch path>
    

    分别将kibana以及logstash的权限也赋予es用户

    然后切换到es用户,下面的操作用es用户进行。

    su es
    
  2. 非root用户,对用户以及相关权限管理要求不那么高的,就可以直接运行,跳过创建用户这一步骤

    我用的不是root用户操作,直接就可以跑起来的。当然首先需要查看确认一下你当前登录的用户有这个文件的执行权限。

    查看文件的权限

部署Elasticsearch

配置

编辑.../elasticsearch-7.15.2/config/elasticsearch.yml (前面的... 代表你的磁盘存放路径,下文中的也是同样含义)文件:

path.logs: /home/spy/elastic-stack/elasticsearch-7.15.2/logs
path.data: /home/spy/elastic-stack/elasticsearch-7.15.2/data

这里配置了日志以及数据的路径,端口如果有冲突的就需要自己额外配置,默认是9200。

启动

执行.../elasticsearch-7.15.2/bin/elasticsearch 文件,日志信息只要没有error级别的报错,就问题不大,没有日志刷新后就代表启动成功了。

启动成功后访问:http://localhost:9200 ,出现下面的界面就代表部署成功。

部署Kibana

配置(可选)

编辑.../kibana-7.15.2-linux-x86_64/config/kibana.yml 文件,按照下面代码片段进行配置中文。

# Supported languages are the following: English - en , by default , Chinese - zh-CN .
i18n.locale: "zh-CN"

elasticsearch默认的端口号是9200,kibana中默认配置的elasticsearch实例为下图所示,所以如果你的elasticsearch的端口或者ip(不是部署在同一台机器上)与之不符,就需要自己根据实际的ip端口来进行配置。

启动

执行.../kibana-7.15.2-linux-x86_64/bin/kibana 文件启动kibana,同样的,启动过程中只要没有error级别的报错,就不影响。

启动成功之后访问:http://localhost:5601 ,出现下面的界面就代表部署成功。

部署Logstash

配置

  1. 配置pinple

    logstash启动必须要有pinple的配置才能正常启动,默认有一个.../logstash-7.15.2/config/logstash-sample.conf 的配置文件,你可以基于这个进行编辑,我这里选择的是额外创建一个目录来存放conf配置文件。

    如下图创建一个conf文件夹。

    在conf文件夹下新建my-logstash.conf并编辑文件内容如下

    input {
      tcp {
        port => 4560
        codec => json_lines
        ssl_enable => false
      }
    }
    
    output {
      elasticsearch {
        hosts => ["http://localhost:9200"]
        index => "app-%{+YYYY.MM.dd}-log"
      }
      stdout{
        codec=>rubydebug
      }
    }
    

    上面的代码片段配置了一个tcp的4560端口来监听日志输入,然后将其输出到配置的elasticsearch 实例以及控制台。elasticsearch 实例里面的index配置了日志推送到elasticsearch 之后存放的索引。

  2. 配置logstash.yml文件中的conf文件路径配置项

    编辑.../logstash-7.15.2/config/logstash.yml 文件,在文件末尾增加或者修改其被注释的配置项,配置的值若使用的默认的conf文件就填写默认的conf文件路径,若自己新建文件夹存放了conf配置文件的就可以参考下面进行配置,但是注意将logstash-7.15.2之前的磁盘路径换成你自己的。

    path.config: /home/spy/elastic-stack/logstash-7.15.2/conf/*.conf
    
  3. 配置spring boot程序

    可以新建一个spring boot程序,也可以在现有的程序配置

    pom.xml增加依赖:

    <!-- logstash -->
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>7.2</version>
    </dependency>
    

    logback-spring.xml:其中logstash相关的<appender>以及<appender-ref> 标签中的内容是增加的。

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- 当scan属性设置为true时, 配置文件如果发生改变, 将会被重新加载, 默认值为true -->
    <configuration scan="true">
    
      <!-- 定义日志文件的存储地址 -->
      <property name="LOG_PATH" value="./log"></property>
    
      <!-- 打印在控制台的日志 -->
      <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
          <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %-5level [%thread] %logger.%method(%F:%L):%msg%n</pattern>
          <charset>UTF-8</charset>
        </encoder>
      </appender>
    
      <!-- logstash,将日志推送到logstash -->
      <appender name="LOGSTASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
        <destination>172.24.56.231:4560</destination>
        <encoder charset="UTF-8" class="net.logstash.logback.encoder.LogstashEncoder"/>
      </appender>
    
      <!-- 总环境日志配置 -->
      <root level="info">
        <appender-ref ref="LOGSTASH"/>
        <appender-ref ref="CONSOLE" />
      </root>
    </configuration>
    

启动

执行.../logstash-7.15.2/bin/logstash 脚本文件

启动报错了,解决报错过程

上图是启动成功了的,但是spring boot程序报错了(报错时上面的logback-spring.xml文件中destination标签配置的ip为localhost,现在改为具体的ip是报错的解决办法):

我的是在WSL里面弄了个Ubuntu18.04来弄的,elasticsearch以及kibana都可以通过localhost成功访问,外部Windows外部也能telnet成功:localhost 4560 ,telnet成功之后还能从键盘捕获输入推送到lostash。

上面的操作截图让我认为我的网络是没有问题的,在WSL中跑程序访问也从没用过分配的虚拟ip,都是直接使用的localhost。后来是在虚拟机里面重新弄了一次,需要配置host,才灵光一闪猜测有可能WSL也是需要配置一下虚拟的ip,所以就回头看了下我WSL的ip,将logstash暴露的http api host配置成172.24.56.231试一下。

再次编辑.../logstash-7.15.2/config/logstash.yml 文件,配置地址为eth0的ip地址。

然后spring boot对应的logback配置也修改过来,启动成功,那个连接拒绝的报错消失

logstash控制台也能看到抓取的日志了。

去kibana查看一下,日志已经过来了。

image.png

查看索引日志

在kibana的网页中点击索引模式,创建一个索引模式,根据我们推送的索引名,编写一个能匹配的名称,选择一下时间戳字段,然后保存。

然后就可以基于条件进行搜索日志了

成功!