在日志模式中提供多个容器名称以从中刮取数据

Posted

技术标签:

【中文标题】在日志模式中提供多个容器名称以从中刮取数据【英文标题】:Give multiple container names in logs pattern to scrape data from 【发布时间】:2021-10-20 23:38:53 【问题描述】:

我已经在 K8s 集群中设置了 EFK 堆栈。目前 fluentd 正在从所有容器中抓取日志。

我希望它只从容器 ABCD 中抓取日志。

如果我有一些前缀为 A-app,我可以执行以下操作。

"fluentd-inputs.conf": "# HTTP input for the liveness and readiness probes
        <source>
          @type http
          port 9880
        </source>
        # Get the logs from the containers running in the node
        <source>
          @type tail
          path /var/log/containers/*-app.log // what can I put here for multiple different containers
          # exclude Fluentd logs
          exclude_path /var/log/containers/*fluentd*.log
          pos_file /opt/bitnami/fluentd/logs/buffers/fluentd-docker.pos
          tag kubernetes.*
          read_from_head true
          <parse>
            @type json
          </parse>
        </source>
        # enrich with kubernetes metadata
        <filter kubernetes.**>
          @type kubernetes_metadata
        </filter>

【问题讨论】:

【参考方案1】:

要仅从特定 Pod 中抓取日志,您可以使用:

path /var/log/containers/POD_NAME_1*.log,/var/log/containers/POD_NAME_2*.log,.....,/var/log/containers/POD_NAME_N*.log

要从特定 Pod 中的特定容器中抓取日志,您可以使用:

path /var/log/containers/POD_NAME_1*CONTAINER_NAME*.log,/var/log/containers/POD_NAME_2*CONTAINER_NAME*.log,.....,/var/log/containers/POD_NAME_N*CONTAINER_NAME*.log

我创建了一个简单的示例来说明它是如何工作的。

要从 app-1 Pod 中的 web-1 容器中抓取日志以及从 app-2 Pod 中的所有容器中的日志,您可以使用:

path /var/log/containers/app-1*web-1*.log,/var/log/containers/app-2*.log



$ kubectl logs -f fluentd-htwn5
...
2021-08-20 13:37:44 +0000 [info]: #0 starting fluentd worker pid=18 ppid=7 worker=0
2021-08-20 13:37:44 +0000 [info]: #0 [in_tail_container_logs] following tail of /var/log/containers/app-1_default_web-1-ae672aa1405b91701d130da34c54ab3106a8fc4901897ebbf574d03d5ca64eb8.log
2021-08-20 13:37:44 +0000 [info]: #0 [in_tail_container_logs] following tail of /var/log/containers/app-2-64c99b9f5b-tm6ck_default_nginx-cd1bd7617f04000a8dcfc1ccd01183eafbce9d0155578d8818b27427a4062968.log
2021-08-20 13:37:44 +0000 [info]: #0 [in_tail_container_logs] following tail of /var/log/containers/app-2-64c99b9f5b-tm6ck_default_frontend-1-e83acc9e7fc21d8e3c8a733e10063f44899f98078233b3238d6b3dc0903db560.log
2021-08-20 13:37:44 +0000 [info]: #0 fluentd worker is now running worker=0
...

【讨论】:

你好@confusedWarrior。你成功了吗? 你可以删除参考吗?一些与文档或任何相关的链接? 我目前还没有找到任何相关文档(只有关于path(s) to read的信息)。

以上是关于在日志模式中提供多个容器名称以从中刮取数据的主要内容,如果未能解决你的问题,请参考以下文章

如何匹配 aws cloudwatch 日志中的多个模式以触发 lambda

设计模式

以完全恢复模式管理日志

SqlServer 日志清除

SQL Server中事务日志管理的阶梯,级别5:以完全恢复模式管理日志

将数据库转换为归档日志模式