当前位置: 首页 > 知识库问答 >
问题:

基于pod内部文件的Kubernetes日志记录

微生景胜
2023-03-14

我有一个Kubernetes集群,它有一些应用程序pod,在每个pod中生成多个日志文件。我想在集中的日志解决方案中记录这些文件,比如elasticsearch。日志既不是pod的stdout/stderr的一部分,也不是作为主机卷装载的。所以基本上我需要一些解决方案,从我的pod中读取一个文件并将其发送给elasticsearch或其他一些日志解决方案。

此外,我还需要一个解决方案,用于相同的用例,但用于独立Docker容器不在Kubernetes上运行的情况。

共有2个答案

严修诚
2023-03-14

我会考虑持续体积安装到您的吊舱。使用fluentd这样的侧车容器,您可以将这些日志文件转发到elasticsearch。对于docker引擎,两个docker进程可以共享相同的卷。

姜玉泽
2023-03-14

它们也不是作为主机卷安装的

这是您的问题:您需要公开一个作为主机卷的路径,以便现有的集中式日志slurping工具可以看到它们。我所知道的唯一一个星号是注意权限,如果您的进程以root用户身份运行,这不会是一个问题,但如果不是root用户,则会是一个问题——您需要卷装载一个主机目录,该目录具有使容器进程能够打开文件的权限。

但是,我已经有足够长的时间知道在处理容器软件时总是存在“是的,但是”,所以你可以考虑另外两种选择。

如果您正在使用一个现有的日志聚合工具,该工具希望所有日志输出都显示在容器的stdout和stderr上,那么您将希望利用容器中的根进程的能力,将日志写入任何文件,以将日志发送到容器的stdout和stderr的“pid 1”,我知道至少有两种方式:

一些日志框架会容忍被赋予“文件路径”,并会欣然打开它并开始写入:

<log4j:configuration>
  <appender name="DOCKER_STDOUT" class="org.apache.log4j.FileAppender">
    <param name="File" value="/proc/1/fd/1"/>

顺便说一句:这只是一个例子,我现在不知道log4j是否容忍这样的事情

与之前的策略类似,优点是不需要更改应用程序配置,并且100%的时间都在工作;但是缺点是使集群内部署更加复杂。

我不得不用kong:0.10容器来做这件事,因为它们的日志记录情况只写入文件,不能容忍像上面那样指向文件描述符。

您需要修改命令:块来启动应用程序,然后为容器内日志生成tail,或者使用某种部署后技巧来execin并启动tail

tail -f /the/inside/file.log > /proc/1/fd/1

如果应用程序将文件从下面旋转出来,选择使用“尾巴-F”,并使用“尾巴-F”...

 类似资料:
  • 我使用Kubernetes作为cron作业运行python脚本。问题是,直到作业完成后,我才看到脚本的输出(可能需要一段时间才能运行)。我怀疑这是由于日志记录级别(--v选项)造成的,但在我的整个生命周期中,我都找不到它的文档(默认为--v=0)。如果我想增加输出内容的详细程度,是否有人知道“INFO”或“TRACE”的值(或者这些值是什么/定义在哪里)?提前谢谢你的帮助。 编辑:是否有人在Kub

  • 作为调试的一部分,我需要跟踪pod创建和删除等事件。在我的kubernetes设置中,我使用的是日志记录级别5。

  • 问题内容: 我在查找日志文件时遇到问题。 我在Windows XP的Eclipse 3.7.1中使用Java日志记录- 。我文件的相关行是: 据我所知,执行以下两行之后: 我的日志文件应该在哪里是整数。 我在该目录中有5个不同的文件,通过,但是它们都没有包含我的日志记录,甚至没有包含今天日期的记录。我进行了一些谷歌搜索,发现“ 跟踪和日志记录”表示我的日志应位于其他位置。那里有一个名为的文件,但实

  • 问题内容: 知道Python日志语句存储在哪里的方法是什么? 即如果我这样做: 在哪里可以找到日志文件?另外,当我打电话时: 这与记录器的行为/保存方式有某种关系吗? 问题答案: 该模块使用附加到记录器的处理程序来决定最终存储或显示消息的方式,位置或方式。您可以默认配置为也写入文件。您应该真正阅读过文档,但是如果您将要写入消息的文件的名称调用到哪里(请注意,您必须在调用其他任何文件之前先执行此操作

  • 问题内容: 我需要将对项目中的Oracle数据库的所有查询记录到日志文件中。 有什么 好的 解决方案来实现这一目标?一些示例用法将不胜感激。 我已经用jdbcdslog查看了SLF4J,但不确定如何使用它登录到文件。而且,我需要“过滤”一些日志(因为我不需要知道何时调用某种方法) 最好是,我更愿意使用,但这不是必需的。 谢谢。 更新 我找到了这篇Oracle文章,但是它并没有真正告诉您如何以编程方

  • 我有一个AKS(Azure Kubernetes)集群,它有几个不同的名称空间。在其中一个,我有许多不同的吊舱,每个只运行一个容器。 Azure收集数据并将其输入日志分析。 我想停止将这些日志摄入日志分析,甚至完全禁用它们(当然,我更喜欢将它们保存在pod本身)。 我只能找到一种方法来禁用整个名称空间来收集日志,但我只需要禁用这个特定的pod(它是从部署/复制集创建的)。

  • 当我在conf文件的虚拟主机部分中没有指定日志文件时,日志会写入httpd中指定的文件中。conf(=访问日志)。日志条目如下所示: SOMEIP--[22/Jan/2013:18:34:08 0100]“GET/HTTP/1.1”200 1752-“Mozilla/5.0(Windows NT 6.1;WOW64)AppleWebKit/537.17(KHTML,比如Gecko)Chrome/S

  • 问题内容: 我已经为kubernetes中的front(REACT)和backend(EXPRESS NODE JS)项目泊坞窗并创建了部署和服务。我已经在Google Cloud Platform中的两个 Pod (即 一个 Pod- > REACT APP和SECOND POD-> EXPRESS NODE JS )的同一节点的Kubernetes(单节点集群)中成功部署了。 题: 1.)如何