在我的Kubernetes集群中,我有一个Fluentd作为DaemonSet运行。多个应用程序以微服务的形式部署在跨命名空间的集群上,其名称与微服务名称相同。
微服务(名为payments)将日志输出到stdout。我想解析微服务日志,并将其放到Fluentd中的某个目的地。问题是我只需要特定的微服务payments日志。如果我使用:
<source>
@type tail
@id in_tail_container_logs
path /var/log/containers/*.log
pos_file /var/log/fluentd-containers.log.pos
tag kubernetes.*
read_from_head true
....
</source>它将扫描所有将日志输出到stdout的pod,以便过滤特定的微服务日志。我们有没有办法在Fluentd中做到这一点?谢谢
发布于 2020-10-20 06:05:23
每个Pod在/var/lib/docker/containers的containers目录下创建一个日志文件
它在containers文件夹中应该有一个匹配日志文件,例如,如果您的部署以名称payments开始,我们可以通过提供以下内容来捕获特定服务的日志
path /var/log/containers/payments*.log在……里面
<source>
....
path /var/log/containers/payments*.log
....
</source>发布于 2020-10-20 20:28:34
不要在文件级实现分离。取而代之的是使用kubernetes_metadata fluentd过滤器,它使用与pod相关的元数据来丰富每个日志记录。
一旦你有了它,有几种方法可以过滤掉特定的服务:
@type grep通过fluentd中的元数据进行grep,并且只发送您的服务。@type rewrite_tag_filter将元数据转换为标记,然后使用fluentd匹配规则分隔日志。https://stackoverflow.com/questions/64434009
复制相似问题