58 K8S 之集群日志系统
在计算机领域,日志是由应用程序或操作系统发生某些事件时自动生成的信息记录,并以一定格式存储,例如文件等。日志信息通常以附带时间戳的格式记录有关服务器、网络、操作系统或应用程序等有助于跟踪程序运行状态的内容,以帮助人们了解应用或系统内部发生的情况、快速定位错误发生的位置。
日志管理通常包括日志收集、日志聚合、日志存储、日志轮转、日志分析,以及日志搜索等。
日志收集:日志收集是实现日志管理功能的第一步,应用程序、操作系统、防火墙、服务器、交换机和路由器等根据配置都可能会产生相当数量的日志信息,最佳做法是自定义每个设备的日志收集设置,在集中式的日志收集环境中,它能够在本地保留一份冗余数据。
日志聚合:将所有日志信息收集到同一位置以便集中式日志的存储、分析和搜索,显然,日志数据量以及无统一格式会给日志聚合带来相当程度的挑战,成本和效率是不可忽略的系统指标。
日志存储:行业的最佳做法是至少保存一年的日志数据,以便在必要时进行问题溯源。但大型分布式系统中的海量日志存储将会导致昂贵的存储成本,因而为生产环境中的日志收集定义合理的“日志级别”将尤为重要。
日志轮转:日志轮转是实现日志存储策略的常见途径,常通过自动重命名、压缩、移动或删除太大或太旧的日志文件来实现。
日志分析:大多数日志管理工具都能够自动完成日志数据分析,并会提供以图形显示分析结果的接口,以更加直观的视觉效果展现事件和数据之间的相关性,进而帮助定位问题及原因。
日志搜索:从海量的结构化及非结构化日志信息中找出关注的目标信息几乎必然要依赖于日志搜索机制。
有很多解决方案可收集 Pod 日志并将其发送到一个集中的位置,例如 Filebeat、Logstash、Fluentd 和 Sematext Logagent 等,其中 Fluentd、Fluent Bit 或 Filebeat 是在 Kubernetes 中收集并汇总日志的最常用解决方案之一。fluentd 有大量的可用插件且足够灵活,它支持从任何位置收集和解析几乎任何类型的日志,并能够将日志发送到指定的任何位置。具体实现上,我们只需要在 Kubernetes 集群中利用 DaemonSet 资源在各节点上运行一个日志收集代理,由日志收集代理从 kubelet、Kubernetes API Server 以及每个节点上所有处于活动状态的 Pod 中收集日志即可。
Pod 中容器应用的日志收集还有其他几种可选方式。第一种是由应用程序将日志通过网络直接发送到目的地(集中式日志聚合系统),但要求应用能实现对日志服务的调用,且出站流量可能会因传送日志的报文而显著增加。第二种是将应用程序生成的日志通过一个服务端点对外暴露,而非将日志推送至某个特定位置,而后由日志聚合系统通过该服务端点拉取日志,从而使聚合端可按需提取日志。第三种是设定主容器将日志保存至存储卷上,而后由专门负责日志收集的 Sidecar 容器从共享的存储卷中加载日志并发送到目的端。
版权声明: 本文为 InfoQ 作者【穿过生命散发芬芳】的原创文章。
原文链接:【http://xie.infoq.cn/article/6dd0ca3fd08e6e77eac39b749】。文章转载请联系作者。
评论