首页 > 其他分享 >【Kubernetes】Kubernetes日志收集最佳实践及开源工具盘点

【Kubernetes】Kubernetes日志收集最佳实践及开源工具盘点

时间:2023-09-15 14:00:39浏览次数:39  
标签:Kubernetes 收集 开源 尾随 Pod 日志 logs

Kubernetes是一种流行的开源容器编排平台,被开发人员和DevOps团队广泛用于部署和管理容器化应用程序。在Kubernetes上运行任何应用程序的一个关键方面是日志收集,它有助于监控应用程序的健康和性能,并快速解决问题。

在本文中,我们将讨论Kubernetes日志收集以及Kubernetes环境中的最佳实践。

什么是Kubernetes日志收集?

Kubernetes日志收集是指捕获和存储由Kubernetes集群和其中运行的应用程序生成的日志数据的过程。这些数据包括有关应用程序性能、错误、警告和其他事件的信息。

Kubernetes日志对于调试和解决分布式系统中的问题至关重要,并被开发人员、运营人员和安全团队用于监视和维护应用程序的健康。

Kubernetes日志收集的工作原理是什么?

Kubernetes日志由Kubernetes集群的各个组件生成,包括Kubernetes API服务器、kubelet、容器运行时以及集群上运行的应用程序。这些日志由作为Kubernetes Pod运行的日志收集代理收集和聚合,并发送到一个中央位置进行存储和分析。

在Kubernetes中最常用的日志收集代理是Fluentd,它是一个开源的数据收集器,可以收集、转换和转发日志数据到各种目标,包括Elasticsearch、Splunk和Kafka。其他流行的日志收集代理包括Logstash和Fluent Bit。

下面是使用Fluentd进行日志收集的示意图。

示意图显示使用Fluentd进行日志收集的流程。

Kubernetes日志收集的最佳实践

以下是Kubernetes环境中的一些日志收集最佳实践:

使用集中式日志收集解决方案

集中式日志收集解决方案允许您将日志存储和分析在一个中央位置,这样可以更容易地解决问题和监视应用程序性能。Elasticsearch、Splunk和Loggly是一些在Kubernetes中使用的流行的集中式日志收集解决方案。

实施日志轮换

日志轮换是删除或归档旧日志以防止磁盘空间被填满的过程。为了避免磁盘空间不足,对Kubernetes日志进行配置日志轮换是必不可少的。

使用结构化日志收集

结构化日志以结构化方式格式化日志消息,使得更容易搜索、过滤和分析日志数据。使用JSON或其他结构化日志收集格式代替纯文本,以便更容易从日志中提取信息。

避免记录敏感信息

避免在Kubernetes日志中记录诸如密码、API密钥和其他凭据等敏感信息。而是使用环境变量或密钥管理工具来安全地存储这些信息。

包括上下文信息

在日志中包括时间戳、主机名和请求ID等上下文信息,可以更容易地关联日志事件并解决问题。

标记隐私信息

为了确保敏感数据的安全和隐私,建议在日志中标记或屏蔽任何敏感信息。您可以使用“priv”或“****”等标准格式来识别和屏蔽诸如密码、信用卡号码或个人身份信息(PII)等敏感数据。

使用不同的日志级别

利用不同的日志级别,可以根据严重程度或重要性对日志消息进行分类。常见的日志级别包括DEBUG、INFO、WARNING、ERROR和CRITICAL。通过使用适当的日志级别,可以根据其在故障排除和调试过程中的重要性筛选和优先处理日志消息。

将日志实时流式传输到日志服务器:与其仅依赖本地日志文件,建议将日志实时流式传输到集中式日志服务器或日志管理系统。这样可以确保日志集中收集和存储,更容易搜索、分析和长时间保留日志。流行的日志服务器和管理系统包括Elasticsearch、Splunk和Graylog。

启用日志轮换:配置日志轮换以防止日志文件无限增长并占用过多的磁盘空间。通过设置日志轮换参数,可以控制日志文件的大小、保留的日志文件数量以及轮换的频率。这种做法可以高效管理日志,避免磁盘空间问题。

其他工具介绍

虽然kubectl logs是在Kubernetes中检索日志的标准命令,但也有一些开源的CLI工具可用,提供了额外的功能和增强的日志收集能力。其中一个工具是kubetail,它允许您同时查看多个Pod的日志。以下是一些可用于Kubernetes日志收集的开源CLI工具:

Kubetail: Kubetail是一个简单的实用程序,可以在Kubernetes集群中从多个Pod中查看日志。它将来自多个Pod的日志聚合并流式传输到终端,让您可以同时查看来自不同来源的实时日志。Kubetail在调试分布式系统或监视多个Pod中的应用程序行为时特别有用。

Stern:Stern是另一个专为Kubernetes设计的功能强大的日志尾随工具。它允许您从Kubernetes集群中的多个Pod和容器中查看日志,并提供颜色编码的输出以便于识别。Stern还支持基于正则表达式的过滤,便于专注于特定的日志消息或模式。

Kail: Kail是一个CLI工具,可以从Kubernetes集群中的多个Pod中进行日志流式传输和尾随。它支持原始和JSON格式的日志输出,适用于不同的用例。Kail还提供了基于标签或命名空间的日志过滤选项,允许您根据需要缩小日志输出范围。

Logcli: Logcli是Loki生态系统的一部分,提供了一个命令行界面,用于查询存储在Loki中的日志,这是一个水平可扩展的日志聚合系统。它允许您根据标签、时间范围和日志级别等各种参数搜索和检索日志。当您拥有基于Loki的集中式日志收集解决方案,并希望高效地查询和分析日志时,Logcli非常有用。

这些开源CLI工具为Kubernetes中的日志收集和分析提供了额外的功能和灵活性。根据您的具体需求,您可以选择最适合您需求并与现有的日志基础设施良好集成的工具。

请注意,在使用任何第三方工具时,请确保它们来自可信的来源,并查阅其文档以获取安装和使用说明。

在Kubernetes环境中,有各种命令可用于检查日志。下面是您可以与kubetail一起使用的一些命令来检查Kubernetes日志:

从特定的Pod中尾随日志:

kubectl logs -f 此命令将流式传输并显示指定Pod的日志。您可以包含多个Pod名称以同时尾随多个Pod的日志。

从与标签选择器匹配的Pod中尾随日志:

kubectl logs -f -l 此命令将流式传输并显示与指定的标签选择器匹配的所有Pod的日志。

从特定命名空间中的所有Pod中尾随日志:

kubectl logs -f -n 此命令将流式传输并显示指定命名空间中所有Pod的日志。

使用通配符表达式从多个Pod中尾随日志:

kubectl logs -f 此命令允许您指定多个Pod名称或使用通配符表达式从多个Pod中尾随日志。例如:

kubectl logs -f my-app-* 这将从以“my-app-”开头的所有Pod中尾随日志。

在日志输出中包含时间戳:

kubectl logs -f --timestamps 此命令将显示带有时间戳的日志,以便您可以查看日志消息生成的时间。

停止从特定Pod中尾随日志:

Ctrl + C 此命令将停止流式传输和显示指定Pod的日志。

这些是您可以使用kubetail高效尾随Kubernetes集群中多个Pod的常用命令。在使用这些命令之前,请确保安装和设置kubetail。有关安装说明和其他功能,请参阅kubetail的文档。

在使用kubetail时,您还可以通过指定其Pod名称来查看Kubernetes控制平面组件的日志。下面是如何查看一些常用控制平面组件的日志:

查看Kubernetes API服务器的日志:

kubectl logs -f -n kube-system 将替换为API服务器Pod所在的节点的实际名称。此命令将尾随API服务器的日志。

查看Kubernetes控制器管理器的日志:

kubectl logs -f -n kube-system 将替换为控制器管理器Pod所在的节点的名称。此命令将尾随控制器管理器的日志。

查看Kubernetes调度器的日志:

kubectl logs -f -n kube-system 将替换为调度器Pod所在的节点的名称。此命令将尾随调度器的日志。

查看etcd集群的日志:

kubectl logs -f -n kube-system 将替换为etcd Pod所在的节点的名称。此命令将尾随etcd集群的日志。

记得用实际运行相应控制平面组件Pod的节点名称替换。-n kube-system标志用于指定控制平面组件通常部署的命名空间。

通过 tail 这些控制平面组件的日志,您可以监视它们的活动,检测任何问题或错误,并深入了解您的Kubernetes集群的行为。

总结

Kubernetes日志收集是在Kubernetes上运行应用程序的关键方面。在Kubernetes环境中,集中式日志收集解决方案、日志轮换、结构化日志收集、避免敏感信息以及包括上下文信息等是一些日志收集的最佳实践。

标签:Kubernetes,收集,开源,尾随,Pod,日志,logs
From: https://blog.51cto.com/u_15495755/7480560

相关文章

  • docker部署 grafana Loki 轻量级日志
    这是一篇关于讲解如何正确使用51CTO博客-Markdown的排版示例,希望通过此,大家都能轻松上手,都能通过Markdown能够让自己的文章有更加出色、更清晰明了的排版。什么是MarkdownMarkdown(MD)是现在普遍使用的一种文档书写语言格式,只需用一些非常简单易记的符号,如(#*/>[]()\),......
  • 开源gRPC 微服务系统 windows 编译问题及解决
    gRPC是google开发的一个开源rpc微服务框架,易用跨平台,官方网站上对linuxMac支持很好,给出了完善的编译解决方案,但是在windows上很难用特别是编译这部分,本文汇总下windows编译遇到的问题及解决方案:引用一个前人写的编译攻略,Windows+VS2017使用gRPC-我来乔23-博客园(cnblogs.com......
  • 8K Star,一款开源仿Notion且AI强化的编辑器:Novel
    Notion相信大家都不陌生了,一款非常好用的笔记软件,TJ君也一直在用来记笔记和写文章。关于Notion的替代品,之前有给大家推荐AFFiNE,但这个还是一个比较成型的软件。那么如果想开发一个类Notion的工具,又或者在自己的应用中增加一个类Notion的内容编辑功能,是否有好用的开源工具呢?今天......
  • 开源网安入选广东省网络空间安全标准化技术委员会新技术及应用安全技术工作组成员单位
    近日,第二届广东省网络空间安全标准化技术委员会(GD/TC124)(以下简称省网安标委)正式成立。为进一步发挥省网安标委在支撑网络强国建设、推进网络安全产业高质量发展过程中,示范引领核心技术攻关、创新产品研发、行业应用推广的重要作用,由省网安标委秘书处拟牵头组建数据安全技术工作组......
  • 【开源】无忧企业文档文库管理界面介绍
    无忧企业文档是软开企服研发的一款集知识库、网盘、在线协同为一体的企业级办公软件,有完全免费的开源版,也有功能丰富的商业版。开源版在社区开放了全量源码,商业版支持提供源码,支持二次开发,适合中小企业使用。文件管理界面介绍文档采用目录资源管理模式,进入文库界面如下图所示,包括:文......
  • 牛逼!Github上最有价值的一个开源项目!
    哈喽,我是老鱼,一名致力于在技术道路上的终身学习者、实践者、分享者!今天介绍的这个项目,我愿称之为Github最有价值的开源项目!一个小而全而美的第三方登录开源组件,相信你一定能用的上~JustAuthJustAuth 如你所见,它仅仅是一个第三方授权登录的工具类库,它可以让我们脱离繁琐的第......
  • OpenVAS(GVM)开源漏洞扫描安装配置教程
    基本介绍OpenVAS是Greenbone旗下,一个功能齐全的漏洞扫描程序。其能力包括未经身份验证和经过身份验证的测试,各种高级以及低级互联网和工业协议,性能调优用于大规模扫描和强大的内部编程语言实施任何类型的漏洞测试。Feed比较Greenbone生产和维护两个feeds:GreenboneEnterpriseF......
  • 《安富莱嵌入式周报》第322期:自制10KV电子负载,史上最详细的电池系列资料,创意洞洞板任
    周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=104 视频版:https://www.bilibili.com/video/BV1M8411q7dw/ 1、史上最详细的电池管理资料网站这些教程评估了各种电池化学成分的优势和局限性,就最佳选择提出了建议,并提出了延......
  • 千万级CPS的开源网络压测软件dperf【杭州多测师_王sir】
     一、性能压测指标CPS二、dperf由百度的智能负载均衡团队研发,使用ApacheLicenseVersion2.0许可证开源发布,项目地址 https://github.com/baidu/dperf  三、详细介绍:https://developer.baidu.com/article/detail.html?id=294625四、Gitee项目源代码:https://gitee.com/bai......
  • 开源消息中间件ActiveMQ回顾:Java客户端实现
    前一段时间工作中经常使用到ApacheActiveMQ用作消息传输。今天在公司不是很忙,于是又深入研究了一下,总结一下分享出来。基于ActiveMQ的Java客户端实现例子。接口定义:publicinterfaceMQService{publicvoidstart();publicvoidsendQueueMessage(Stringtext)throws......