发送kubernetes容器应用日志(stdout和stderr)到UDP服务器

问题描述 投票:0回答:1

我知道 docker 有像 syslog

log-driver
log-opts
这样的选项,所以它可以用来发送日志说,UDP 服务器。

Marathon 是这里的 docker 协调器,配置文件包含以下内容:

    {
      "key": "log-driver",
      "value": "syslog"
    },
    {
      "key": "log-opt",
      "value": "syslog-address=udp://some-udp-server:port"
    },

现有的设置使得某些下游系统/实体利用在此 UDP 服务器上收到的信息在 Grafana 上创建可视化。

如何在我通过 helm3 部署的 k8s 清单文件中实现相同的目标?或者我需要使用第三方应用程序吗?基本上,我想以最小的入侵将

kubectl logs -f <pod_name>
命令中的日志发送到这个 UDP 服务器。我只想替换这部分流程,这样我就不必打扰任何下游系统。

docker kubernetes syslog
1个回答
2
投票

正如大卫所建议的那样,没有控制日志目标的选项。但是,根据日志收集器应用程序的要求,编写此答案。

如果您的应用程序streamingUDP日志,您可以使用Graylog开源。它使用 Mongo 和 Elasticsearch 作为后端数据库。我们一直在使用 Graylog 从应用程序 POD 收集日志。

现在关于 kubectl logs -f <POD>log

collector
,您可以使用 fluentd 收集器从 Worker Node 文件系统推送所有这些日志。 日志位置将是
/var/log/pods

您可以使用 Fluentd 收集器以及 Graylog Gelf UDP 输入

Fluentd -> pushing over gelf UDP -> Graylog input saving to Elasticsearch 

这是您可以关注的参考:https://docs.fluentd.org/how-to-guides/graylog2

上面的例子现在使用Graylog2Graylog3版本可用开源建议检查一下。

您可以参考我的 Github 仓库:https://github.com/harsh4870/OCI-public-logging-uma-agent

将更多地了解部署如何在 Node 的文件系统 上设置日志文件,并进一步由 collector 处理,尽管不使用 fluentd 但仅供参考

Oracle OCI UMA agent 也有类似的工作,比如 fluentd 仅收集器,parsing & pushing logs to the backend.

© www.soinside.com 2019 - 2024. All rights reserved.