-
首先想到的是 - 创建一个边车容器,它将所有日志收集到一个地方。
-
The Complete Guide to Kubernetes Logging.
这是一个相当广泛的问题,应该分成几个部分。 Kubernetes 将不同类型的日志存储在不同的地方。
Kubernetes 节点日志
根据您的操作系统和服务,有多种
您可以收集的节点级日志,例如内核日志或 systemd 日志。
在带有 systemd 的节点上,kubelet 和容器运行时都写入
日记。如果 systemd 不存在,它们将写入 .log 文件中的
/var/log 目录。
您可以使用 journalctl 命令访问 systemd 日志。
Tutorial: Logging with journald 有一个巨大的解释,你如何配置 journalctl 来收集日志。有像 ELK 这样的聚合日志工具,没有它们。 journald log filtering 可以简化你的生活。
有两种通过 syslog 集中日志条目的方法:
-
syslog 守护进程充当 journald 客户端(如 journalctl 或 Logstash 或 Journalbeat)
-
journald 将消息转发到系统日志(通过套接字)
选项 1) 较慢 - 从日志读取比从套接字读取慢 - 但会捕获日志中的所有字段。
选项 2) 更安全(例如,没有日志损坏问题),但日志只会转发传统的系统日志字段(如严重性、主机名、消息..)
在/etc/systemd/journald.conf 中谈论ForwardToSyslog=yes --> 它将以系统日志格式向/run/systemd/journal/syslog 写入消息。例如,您可以将此文件传递给rsyslog。您可以手动处理日志或将它们移动到所需的位置..
Kubernetes 集群日志
默认情况下,容器外的系统组件将文件写入 journald,而在容器中运行的组件写入 /var/log 目录。但是,可以选择将容器引擎配置为将日志流式传输到首选位置。
Kubernetes 不提供用于集群级别日志记录的本机解决方案。但是,您还可以使用其他方法:
附:我未尝试过以下方法,但它看起来很有希望 - 检查一下,也许它会帮助您完成最不简单的任务。
设置节点级日志记录代理的最简单方法是
配置一个 DaemonSet 在每个节点上运行代理
helm install --name st-agent \
--set infraToken=xxxx-xxxx \
--set containerToken=xxxx-xxxx \
--set logsToken=xxxx-xxxx \
--set region=US \
stable/sematext-agent
默认情况下,此设置会将所有集群和容器日志发送到
便于管理和故障排除的中心位置。带着小小的
一点添加的配置,你可以配置它来收集节点级别
日志和审计日志。