K8s中如何处理STDOUT日志?
How to handle STDOUT logs in K8s?
在 Docker 环境中,我的 Java-App 通过 log4j 登录 STDOUT,消息将发送到 Graylog 实例。除了配置 Console-Appender 以使用 JsonLayout 之外,没有特殊的日志记录配置。
我的 docker-compose.yml 片段:
logging:
driver: gelf
options:
gelf-address: "tcp://[GRAYLOG_HOST]:[PORT]"
tag: "[...]"
那里一切正常。但是我们正在考虑把这个环境改成K8s
K8s中也会有一个Graylog实例。看起来 docker-compose.yml 日志记录设置没有 K8s 等效项。看来我必须使用某种日志记录代理,例如流利位。但是 fluent-bit 的文档看起来只能从日志文件中收集日志作为输入(以及更多),而不能从 STDOUT 中收集。
我有以下问题:
- 是否有另一种方法可以直接从 STDOUT 读取日志并将它们发送到 Graylog?
- 如果我必须将日志消息记录到日志文件中以便从 fluent-bit 读取:我是否必须配置 log4j 以执行一些滚动策略来防止日志文件越来越大?我不想“仅仅”为了记录而“浪费”我的资源。
- 你如何处理 K8s 中的应用程序日志?
可能是我理解错了K8s中的logging原理。请随时向我解释。
Is there another possibility to read the logs directly from STDOUT and send them into Graylog?
Fluent Bit 允许数据 collection through STDIN。将您的应用程序 STDOUT 重定向到 Fluent Bit 的 STDIN,您就设置好了。
If I have to log the log messages into a log file to be read from fluent-bit: Do I have to configure log4j to do some roll-over strategies to prevent, that the log file will be bigger and bigger? I do not want to "waste" my resources "just" for logging.
在这种情况下,您可以使用 logrotate
How do you handle application logs in K8s?
三种可能的方式:
- 应用程序直接在外部系统(例如数据库)中输出它们的踪迹。
- 带有嵌入式日志记录代理的 Sidecar 容器收集应用程序跟踪并将它们发送到商店(例如数据库)。
- 集群范围的集中式日志记录(例如 ELK 堆栈)
我建议您使用 sidecar container 来收集日志。这可能是使用最广泛的解决方案。
在 Docker 环境中,我的 Java-App 通过 log4j 登录 STDOUT,消息将发送到 Graylog 实例。除了配置 Console-Appender 以使用 JsonLayout 之外,没有特殊的日志记录配置。
我的 docker-compose.yml 片段:
logging:
driver: gelf
options:
gelf-address: "tcp://[GRAYLOG_HOST]:[PORT]"
tag: "[...]"
那里一切正常。但是我们正在考虑把这个环境改成K8s
K8s中也会有一个Graylog实例。看起来 docker-compose.yml 日志记录设置没有 K8s 等效项。看来我必须使用某种日志记录代理,例如流利位。但是 fluent-bit 的文档看起来只能从日志文件中收集日志作为输入(以及更多),而不能从 STDOUT 中收集。
我有以下问题:
- 是否有另一种方法可以直接从 STDOUT 读取日志并将它们发送到 Graylog?
- 如果我必须将日志消息记录到日志文件中以便从 fluent-bit 读取:我是否必须配置 log4j 以执行一些滚动策略来防止日志文件越来越大?我不想“仅仅”为了记录而“浪费”我的资源。
- 你如何处理 K8s 中的应用程序日志?
可能是我理解错了K8s中的logging原理。请随时向我解释。
Is there another possibility to read the logs directly from STDOUT and send them into Graylog?
Fluent Bit 允许数据 collection through STDIN。将您的应用程序 STDOUT 重定向到 Fluent Bit 的 STDIN,您就设置好了。
If I have to log the log messages into a log file to be read from fluent-bit: Do I have to configure log4j to do some roll-over strategies to prevent, that the log file will be bigger and bigger? I do not want to "waste" my resources "just" for logging.
在这种情况下,您可以使用 logrotate
How do you handle application logs in K8s?
三种可能的方式:
- 应用程序直接在外部系统(例如数据库)中输出它们的踪迹。
- 带有嵌入式日志记录代理的 Sidecar 容器收集应用程序跟踪并将它们发送到商店(例如数据库)。
- 集群范围的集中式日志记录(例如 ELK 堆栈)
我建议您使用 sidecar container 来收集日志。这可能是使用最广泛的解决方案。