Spring boot 弹簧靴和麋鹿

Spring boot 弹簧靴和麋鹿,spring-boot,docker,elastic-stack,Spring Boot,Docker,Elastic Stack,我有一系列使用SpringBoot构建的微服务,它们作为DockerCompose的docker容器运行。我想集中日志文件,所以我想用另一个容器中运行的ELK。如何将日志文件从基于Spring Boot的docker容器推送到ELK,它们是从容器推送到ELK还是从容器推送到ELK 任何示例配置或最新库都将不胜感激 您可以使用数据采集器将数据从源发送到ELK 其中之一就是 假设您有一个运行在Ubuntu服务器上的Spring启动应用程序 假设您已将应用程序配置为将日志存储在/home/user/l

我有一系列使用SpringBoot构建的微服务,它们作为DockerCompose的docker容器运行。我想集中日志文件,所以我想用另一个容器中运行的ELK。如何将日志文件从基于Spring Boot的docker容器推送到ELK,它们是从容器推送到ELK还是从容器推送到ELK


任何示例配置或最新库都将不胜感激

您可以使用数据采集器将数据从源发送到ELK

其中之一就是

假设您有一个运行在Ubuntu服务器上的Spring启动应用程序

假设您已将应用程序配置为将日志存储在/home/user/log/文件夹中

现在将此日志数据发送给ELK

一,。您需要安装Filebeat

更多细节

二,。打开Filebeat conf并添加日志位置

在同一文件的Elastic/Logstash和Kibana部分中更改麋鹿的IP

注意:您可以将输出启用为Elastic或Logstash,以便取消对任何一个部分的注释。 我建议先试试橡皮筋

三,。启动Filebeat以发送日志

注意:ELK服务器应该已经启动并运行,并且可以从spring引导服务器访问

开始

sudo filebeat -e
如果一切顺利,你应该看到filebeat日志说

Harvesting Data from your log path.
刷新Kibana仪表板并开始查看日志。默认情况下,创建的索引将是filebeat-*
您可以使用数据采集器将数据从源发送到ELK

其中之一就是

假设您有一个运行在Ubuntu服务器上的Spring启动应用程序

假设您已将应用程序配置为将日志存储在/home/user/log/文件夹中

现在将此日志数据发送给ELK

一,。您需要安装Filebeat

更多细节

二,。打开Filebeat conf并添加日志位置

在同一文件的Elastic/Logstash和Kibana部分中更改麋鹿的IP

注意:您可以将输出启用为Elastic或Logstash,以便取消对任何一个部分的注释。 我建议先试试橡皮筋

三,。启动Filebeat以发送日志

注意:ELK服务器应该已经启动并运行,并且可以从spring引导服务器访问

开始

sudo filebeat -e
如果一切顺利,你应该看到filebeat日志说

Harvesting Data from your log path.
刷新Kibana仪表板并开始查看日志。默认情况下,创建的索引将是filebeat-* 两个问题:

您不想分析日志文件。因为没有人想编写用于解析的正则表达式,而且它很容易出错。 如果有更动态的容器设置,则不希望登录到文件,因为所有绑定安装的目录或文件的设置都是PITA。 要解决第一个问题,请向log To JSON添加日志追加器。我在这里使用Logback,您需要添加net.logstash.Logback:logstash Logback编码器依赖项:

<appender name="json" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH:-.}/your-app-name.json</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>your-app-name.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <mdc/>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "log.level": "%level",
                    "service.name": "${springAppName:-}",
                    "process.pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger",
                    "mdc": "%mdc",
                    "message": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>
第二个问题有点棘手。我将使用Docker提供的默认JSON日志,这样您的Java应用程序就可以简单地登录到控制台:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{36} [%thread] - %mdc - %msg %n</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>
为了避免第一部分中的解析问题,您实际上需要将JSON记录到控制台,然后收集它。

两个问题:

您不想分析日志文件。因为没有人想编写用于解析的正则表达式,而且它很容易出错。 如果有更动态的容器设置,则不希望登录到文件,因为所有绑定安装的目录或文件的设置都是PITA。 要解决第一个问题,请向log To JSON添加日志追加器。我在这里使用Logback,您需要添加net.logstash.Logback:logstash Logback编码器依赖项:

<appender name="json" class="ch.qos.logback.core.rolling.RollingFileAppender">
    <file>${LOG_PATH:-.}/your-app-name.json</file>
    <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
        <fileNamePattern>your-app-name.json.%d{yyyy-MM-dd}.gz</fileNamePattern>
        <maxHistory>7</maxHistory>
    </rollingPolicy>
    <encoder class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <mdc/>
            <timestamp>
                <timeZone>UTC</timeZone>
            </timestamp>
            <pattern>
                <pattern>
                    {
                    "log.level": "%level",
                    "service.name": "${springAppName:-}",
                    "process.pid": "${PID:-}",
                    "thread": "%thread",
                    "class": "%logger",
                    "mdc": "%mdc",
                    "message": "%message"
                    }
                </pattern>
            </pattern>
        </providers>
    </encoder>
</appender>
第二个问题有点棘手。我将使用Docker提供的默认JSON日志,这样您的Java应用程序就可以简单地登录到控制台:

<appender name="console" class="ch.qos.logback.core.ConsoleAppender">
    <encoder>
        <pattern>[%d{yyyy-MM-dd HH:mm:ss.SSS}] %-5level %logger{36} [%thread] - %mdc - %msg %n</pattern>
        <charset>utf8</charset>
    </encoder>
</appender>

为了避免第一部分中的解析问题,您实际上需要将JSON记录到控制台,然后收集它。

您可以使用下面的架构

春季开机应用->卡夫卡->麋鹿

对于这种架构, 1.在log4jxml文件上配置Kafka appender。然后,日志会自动推送到卡夫卡主题。 2.将日志存储配置配置为Kafka主题上的订阅服务器。 3.以及您可以使用任何过滤器的日志存储


参考:

您可以使用以下架构

春季开机应用->卡夫卡->麋鹿

对于这种架构, 1.在log4jxml文件上配置Kafka appender。然后,日志会自动推送到卡夫卡主题。 2.将日志存储配置配置为Kafka主题上的订阅服务器。 3.以及您可以使用任何过滤器的日志存储


ref:

这将有帮助:这将有帮助:非常感谢您提供的信息,我将尝试设置此项。我有一个问题,我正在docker容器中运行Spring boot应用程序。我应该将filebeat添加到每个容器中,还是应该在每个主机上将filebeat作为单独的容器。我计划单独运行filebeat以发送到。这取决于要求。如果您可以一次收集所有spring引导容器日志
使用一个filebeat进行阳离子交换。但从长远来看,我建议使用容器级别的filebeat来避免单点故障。这是一个很好的起点,但有两个问题:第一,整个日志消息只是一个字符串,您无法聚合或过滤日志级别或其他字段;您需要解析日志消息。第二,像stacktraces这样的多行日志将被逐行分解,这使得它们几乎毫无用处。谢谢@xeraa指出。即使是我也面临着你提到的问题。非常感谢你提供的信息,我会尝试设置这个。我有一个问题,我正在docker容器中运行Spring boot应用程序。我应该将filebeat添加到每个容器中,还是应该在每个主机上将filebeat作为单独的容器。我计划单独运行filebeat以发送到。这取决于要求。如果您可以使用一个filebeat在一个位置收集所有spring引导容器日志。但从长远来看,我建议使用容器级别的filebeat来避免单点故障。这是一个很好的起点,但有两个问题:第一,整个日志消息只是一个字符串,您无法聚合或过滤日志级别或其他字段;您需要解析日志消息。第二,像stacktraces这样的多行日志将被逐行分解,这使得它们几乎毫无用处。谢谢@xeraa指出。就连我也面临着你提到的问题。很好的观点。。。老实说,我相信使用appender比将文件写入磁盘并配置filebeats自动发现要好得多。。。老实说,我相信使用appender比将文件写入磁盘并配置filebeats自动发现要好得多。