跨Docker容器重启持久化日志

6
我有一个微服务在.NET Core下作为Docker容器运行,从EventHub获取大量数据并写入SQL Server时记录到Azure的Application Insights中。然而,偶尔会出现未处理的SqlException异常,这似乎是在后台线程上抛出的,因此我无法捕获和处理它,也无法修复此错误。
解决方法是将重启策略设置为“始终”,这样服务就会重新启动。这很有效,但现在我无法在Application Insights中跟踪此异常。
我猜测CLR会将未处理的异常写入stderr,因此可以通过一些grep在Docker日志中查找,但是否有办法在启动时检查并随后将其记录到Application Insights中,以便我可以发现它,而不必登录到Swarm集群并grep重启信息?

2
您可以将主机目录挂载到Docker中,并使用该目录(主机)来挂载日志。 - Girdhar Sojitra
@GirdharSojitra 你的意思是Docker日志还是一般的日志?这是标准输出/错误流。如果你的意思是回答,请把它发布为一个回答。 - Cecil Dishwasher
1个回答

0

为了持久化日志,

方法1

将docker日志目录挂载到主机。

示例:

docker run -name Container_1 -v /host_dir/logs:/var/log/app docker_image:version

Docker容器将在/var/log/app目录中写入日志。现在,日志也将通过docker重启持续存在于主机的/host_dir/logs目录中。

方法2

在docker中配置日志驱动程序,例如syslog或fluentd。您可以查看https://docs.docker.com/engine/admin/logging/overview/进行配置。


1
很遗憾,我的服务不会直接写入日志(除了AppInsights),而是写入stdout和stderr。这些内容不会被记录在您建议的日志目录中,因此将此目录挂载到Docker主机上没有意义。我需要捕获Docker日志,但默认驱动程序json-file似乎不会像文档所说的那样记录到文件中。 - Cecil Dishwasher
你需要为你的应用程序使用日志记录驱动程序。你可以查看 https://docs.docker.com/engine/admin/logging/overview/。 - Girdhar Sojitra

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接