如何从 java app (k8s) 收集日志到 fluentd(k8s)

How to collect logs from java app (k8s) to fluentd(k8s)

我在 k8s 和 fluentd(daemonset)中有 java 应用程序。在流利的会议中:

 *`<source>
     @type forward
     port 24224
  </source>
  <match **>
  @type stdout
  </match>`*

我有点困惑。 我需要使用 fluentd-logger-java 库吗?我在文档中读到,我需要为流利的添加远程主机,但在这里我一般不使用服务。 应用程序如何将日志发送到 fluentd pods?

提前致谢!

鉴于您的 Java 应用程序可以记录到 stdoutstderr,您将使用 fluentd 来读取该日志,并且在大多数情况下,将这些日志发送到一个系统可以聚合日志。

这张图片来自 official docs,显示了在 Kubernetes 中配置节点级日志记录的常见模式,例如fluentd as Pods 使用 DaemonSet 部署:

在上图中,logging-agent 将是 fluentd,my-pod 将是带有容器的 Pod 运行 您的 Java 应用程序。 Logging Backend,从流畅配置的角度来看,是可选的,但当然强烈推荐。基本上你可以选择通过 fluentd stdout.

输出你的日志

为了正常运行,fluentd 将需要对容器日志的读取权限,这是通过挂载日志目录来实现的,例如/var/lib/docker/containers 进入 fluentd 容器。

我们已成功使用 this fluentd example ConfigMap,并进行了一些修改以从节点读取日志并将它们发送到 Elasticsearch。查看 ConfigMap 的 containers.input.conf 部分,了解有关容器日志以及如何消化它们的更多信息。

请注意,您不需要使用 fluentd-logger-java 库来开始使用 fluentd,尽管您可以在 Java 应用程序中将其用作另一种类型的记录器。开箱即用,您应该能够让 Java 将所有内容记录到 stdoutstderr 并使用 fluentd.

阅读日志

如果您只关心实时日志,那么您可以尝试基于流畅的 Elastic 搜索和 kibana 构建的产品;你可以得到它 https://logdna.com.

只需添加一个标签并部署 demonset。

您可以免费试用几天