而对于一个容器来说,当应用把日志输出到 stdout 和 stderr 之后,容器项目在默认情况
下就会把这些日志输出到宿主机上的一个 JSON 文件里。这样,你通过 kubectl logs 命令
就可以看到这些容器的日志了。
上述机制,就是我们今天要讲解的容器日志收集的基础假设。而如果你的应用是把文件输出
到其他地方,比如直接输出到了容器里的某个文件里,或者输出到了远程存储里,那就属于
特殊情况了。当然,我在文章里也会对这些特殊情况的处理方法进行讲述。
而 Kubernetes 本身,实际上是不会为你做容器日志收集工作的,所以为了实现上述
cluster-level-logging,你需要在部署集群的时候,提前对具体的日志方案进行规划。而
Kubernetes 项目本身,主要为你推荐了三种日志方案。
第一种,在 Node 上部署 logging agent,将日志文件转发到后端存储里保存起来。这个
方案的架构图如下所示。
不难看到,这里的核心就在于 logging agent ,它一般都会以 DaemonSet 的方式运行在
节点上,然后将宿主机上的容器日志目录挂载进去,最后由 logging-agent 把日志转发出
去。
举个例子,我们可以通过 Fluentd 项目作为宿主机上的 logging-agent,然后把日志转发
到远端的 ElasticSearch 里保存起来供将来进行检索。具体的操作过程,你可以通过阅读这
文档被以下合辑收录
评论