Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Logging kubernetes上的Fluentd日志记录跳过日志旋转上的日志_Logging_Kubernetes_Fluentd_Log Rotation - Fatal编程技术网

Logging kubernetes上的Fluentd日志记录跳过日志旋转上的日志

Logging kubernetes上的Fluentd日志记录跳过日志旋转上的日志,logging,kubernetes,fluentd,log-rotation,Logging,Kubernetes,Fluentd,Log Rotation,目前,我在kubernetes拥有以下建筑: 在pod中,服务和侧车容器(称为记录器)正在运行 服务写入文件,sidecar容器读取该文件并将其写入标准输出 fluentd守护程序配置为读取输出(收集在/var/log/containers/*\u logger-*.log中的文件中),该文件是指向另一个文件的链接(自上次文件旋转以来的最新文件,指向旧文件,没有链接点) 始终有3条日志消息属于一起(一些相同的字段) 此配置对数千条消息按预期工作 然而,问题是: 我注意到fluentd有时只转

目前,我在kubernetes拥有以下建筑:

  • 在pod中,服务和侧车容器(称为
    记录器
    )正在运行
    
  • 服务写入文件,sidecar容器读取该文件并将其写入标准输出
  • fluentd守护程序配置为读取输出(收集在
    /var/log/containers/*\u logger-*.log
    中的文件中),该文件是指向另一个文件的链接(自上次文件旋转以来的最新文件,指向旧文件,没有链接点)
  • 始终有3条日志消息属于一起(一些相同的字段)
此配置对数千条消息按预期工作

然而,问题是:

我注意到fluentd有时只转发属于一起的3条消息中的日志消息1或2条,尽管所有3条消息都是由服务和sidecar容器编写的

为了解释,假设1是转发的,2和3不是。经过一些研究,我发现,在这种情况下,消息1是日志旋转之前的最后一条消息,消息2和3在另一个文件中(自旋转以来,符号链接指向该文件,因此应该读取)

因此,在kubernetes日志循环之后,fluentd似乎在继续读取新文件之前跳过了一些行

  • 这是一个已知的问题吗
  • 为什么fluentd和kubernetes会这样
  • 主要问题是:为了接收所有日志消息,我可以做些什么来防止这种行为?
我正在使用docker image
fluent/fluentd kubernetes守护程序:v0.12.33-elasticsearch

如果需要更多信息,请告诉我。

TLDR

理论上,这应该适用于最新版本的
fluentd kubernetes守护程序
。如果它不是
rotate\u wait
的默认值,则可能需要为
In_tail\u容器日志
配置覆盖它,因为时间问题

为此,您需要创建一个自定义docker映像,该映像将覆盖
kubernetes.conf
文件,或者使用自定义配置的配置映射,将其装载到容器中,并将
FLUENT_conf
设置为装载目录中的主配置文件

说明

docker进程正在读取容器的stdout和stderr。 在将流刷新到日志文件的同时,它还将跟踪设置的限制。当达到限制时,它将开始日志旋转

同时fluentd正在监视符号链接。当符号链接更改时,fluentd的文件监视程序将被触发,以更新其指向实际日志文件的内部指针,并重置pos文件中的位置,因为新创建的日志文件为空

使用配置参数
rotate\u wait
我们告诉fluentd等待设置的秒数(默认为5),以便将已刷新到文件(或即将刷新)的最后日志行可以在继续新创建的日志文件之前提取。这也将确保日志行按正确的顺序处理