拨开荷叶行,寻梦已然成。仙女莲花里,翩翩白鹭情。
IMG-LOGO
主页 文章列表 在Docker中访问Spring Boot日志

在Docker中访问Spring Boot日志

白鹭 - 2021-11-24 354 0 0

1.概述

在本教程中,我们将说明如何从本地开发到可持续的多容器解决方案访问Docker中的Spring Boot日志。

2.基本控制台输出

首先,让我们从上一篇文章构建我们的Spring Boot Docker映像:

$> mvn spring-boot:build-image

然后,当我们运行容器时,我们可以立即在控制台中看到STDOUT日志

$> docker run --name=demo-container docker.io/library/spring-boot-docker:0.0.1-SNAPSHOT

 Setting Active Processor Count to 1

 WARNING: Container memory limit unset. Configuring JVM for 1G container.

该命令遵循类似Linux shell tail -f命令的日志。

application.properties文件中添加一行来为我们的Spring Boot应用程序配置一个日志文件追加程序:

logging.file.path=logs

然后,我们可以通过在运行容器中tail -f

$> docker exec -it demo-container tail -f /workspace/logs/spring.log > $HOME/spring.log

 Setting Active Processor Count to 1

 WARNING: Container memory limit unset. Configuring JVM for 1G container.

单容器解决方案就是这样。在下一章中,我们将学习如何分析日志历史记录和组合容器的日志输出。

3.日志文件的Docker卷

如果必须从主机文件系统访问日志文件,则必须创建一个Docker卷

为此,我们可以使用以下命令运行应用程序容器:

$> mvn spring-boot:build-image -v /path-to-host:/workspace/logs

然后,我们可以在/path-to-host目录中spring.log

从上一篇有关Docker Compose的文章开始,我们可以从Docker Compose文件运行多个容器。

如果使用的是Docker Compose文件,则应添加卷配置:

network-example-service-available-to-host-on-port-1337:

 image: karthequian/helloworld:latest

 container_name: network-example-service-available-to-host-on-port-1337

 volumes:

 - /path-to-host:/workspace/logs

然后,让我们运行文章Compose文件:

$> docker-compose up

日志文件位于/path-to-host目录中。

现在,我们已经回顾了基本的解决方案,让我们探索更高级的docker logs命令。

在以下各章中,我们假定将Spring Boot应用程序配置为将日志打印到STDOUT。

4.多个容器的Docker日志

一旦我们一次运行多个容器,我们将不再能够从多个容器中读取混合日志。

我们可以在Docker Compose文档中找到默认情况下使用json-file日志驱动程序设置容器的示例,该驱动程序支持docker logs命令。

让我们看看它如何与我们的Docker Compose示例一起工作。

首先,让我们找到我们的容器ID:

$> docker ps

 CONTAINER ID IMAGE COMMAND

 877bb028a143 karthequian/helloworld:latest "/runner.sh nginx"

然后,我们可以使用docker logs -f命令显示容器日志。我们可以看到,尽管使用json-file驱动程序,输出仍然是纯文本-JSON仅在Docker内部使用:

$> docker logs -f 877bb028a143

 172.27.0.1 - - [22/Oct/2020:11:19:52 +0000] "GET / HTTP/1.1" 200 4369 "

 172.27.0.1 - - [22/Oct/2020:11:19:52 +0000] "GET / HTTP/1.1" 200 4369 "

-f选项的行为类似于tail -f shell命令:它在生成日志时回显日志。

请注意,**如果我们以Swarm模式运行容器,则应改用docker service psdocker service logs**命令。

在文档中,我们可以看到docker logs命令支持有限的输出选项: json-filelocal,journald

5.用于日志聚合服务的Docker驱动程序

docker logs命令对于实时监视特别有用:它不提供复杂的过滤器或长期统计信息。

为此, **Docker支持多个日志聚合服务驱动程序**。在上一篇文章中研究Graylog时,我们将为此平台配置适当的驱动程序。

daemon.json文件中的主机此配置可以是全局的。它位于Linux主机上的/etc/docker或Windows服务器上的C:\ProgramData\docker\config

daemon.json文件不存在,则应创建该文件:

{

 "log-driver": "gelf",

 "log-opts": {

 "gelf-address": "udp://1.2.3.4:12201"

 }

 }

Graylog驱动程序称为GELF我们只需指定Graylog实例的IP地址即可。

我们还可以在运行单个容器时覆盖此配置

$> docker run \

 --log-driver gelf –-log-opt gelf-address=udp://1.2.3.4:12201 \

 alpine echo hello world

六,结论

在本文中,我们回顾了在Docker中访问Spring Boot日志的不同方法。

记录到STDOUT使得从单个容器的执行中观察日志变得非常容易。

但是,如果我们想从Docker日志记录功能中受益,那么使用文件追加器不是最佳选择,因为容器与适当的服务器没有相同的约束。

标签:

0 评论

发表评论

您的电子邮件地址不会被公开。 必填的字段已做标记 *