首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >k8s pod日志写入ELK的技术实现方案

k8s pod日志写入ELK的技术实现方案

原创
作者头像
shigen
发布于 2023-12-10 23:45:53
发布于 2023-12-10 23:45:53
1K0
举报

shigen坚持更新文章的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。记录成长,分享认知,留住感动。

最近在研究一个很有意思的事情:如何收集k8s pod里的日志。问题就是这的简单,但是实现下来就有一点点的复杂了。

这里,我们先来捋一下k8s的架构图,我就不整那么复杂了,什么api-server kubelet 之类的。我们就简化一点:以下是一主三从的k8s集群。

k8s架构图
k8s架构图

每一个从节点都有对应的pod在运行,具体的pod运行什么,这个就是master节点来决定。某个pod就类似于我们用到的dokcer容器,每个容器运行我们的每个实例。现在,我们的每个实例都会有对应的日志输出,我们需要采集起来,放到elasticsearch中存储,展示的话,就要依靠我们熟知的kibanan了。

这就是具体的业务场景。那解决的思路是这样的,我们由浅入深。

方案一

直接在官方的kubenates-dashboard中找到对应的pod查询日志。

kubenates-dashoard界面
kubenates-dashoard界面

这个界面相信大家都熟悉不过了,当初shigen搭建k8s的时候都是奔着这个界面去的。上边的都很详细,监控、日志都可查看。唯一不足的是:需要懂基本的lunix命令。

额,是不是觉得有点low了,开启第二种方式。

方案二

日志文件分析,我们会发现我们的每个pod 产生的日志会被收集起来,集中挂载到物理机/var/log/containers/目录下边。而这些文件的命名规则也很给力:

k8s容器日志
k8s容器日志

基本是容器的名字+容器的ID,这些文件的日志格式也是k8s提前帮我们规定好了,我们似乎解析这些文件就可以获得pod的日志了。

但是问题来了,根据我们上边的架构图,pod运行在哪里是master决定的,不是我们决定的。当然,在kubesqueue上我们可以加上一些策略,让k8s选择我们规定的节点部署,但是这样有破坏了集群的负载均衡功能啊。

总不能在每个k8s节点上都部署一个日志解析的工具吧。加一个极点我就要部署一套日志解析的服务,这样真的是不划算!

相信这个时候ELK的技术方案已经提上了日程。

ELK架构
ELK架构

这种架构的思想是:我们的日志传输到kafka,然后由logstash解析日志,写入到elasticsearch,最后由kibana展示和统计。

我很有幸在我实习的公司就接触到了这样的项目,我们当时采用的是消息队列传输日志,中间自写服务消费日志,最后把日志输出到elasticsearch存储起来。一气呵成,知道今天我也为当时的架构师设计方式感到由衷的赞叹。

当时我在接触这个项目的时候,其实也有这样的问题:为什么不去使用官方推荐的logstach呢?那样用起来更简单,而且维护的成本很低,当时得到的解答是:logstash是用java编写的,它的资源消耗比较大。当时我也没有多想,毕竟我们当时的日志量是非常大的,一秒钟的峰值接近3000条,如果直接用单实例的logstash跑,直接会把服务干崩了。

好了,继续回到现在的问题场景,貌似我们使用第一套的可能性比较小,因为引入消息队列,又需要额外的维护成本。而且,我们也不是专业的运维,很多服务的监控指标都没法采集的。于是果断的放弃。

那只能基于下边的TCP/UDP的方式了。今天的文章中,shigen也是采用的这种方式解决的问题。

方案三

我直接先展示我的架构图吧:

方案三的架构图
方案三的架构图

在我们生成日志的时候,通过logstashTCP接口异步的传输日志,后边的事情就交给ELK了,我们只需要在kibana的查询页面开始观测日志的输出和查询。

基于以上的方案,我们先来看一下效果:

我本地的ELK集群是这样的:

本地的ELK集群
本地的ELK集群

我使用docker-compose搭建起来了我的ELK服务,docker-compose文件可以参考我的,已经设计好了各种端口的映射、文件的挂载,直接运行即可。

三个服务的状态
三个服务的状态

现在我们的三个服务都起来了,我们持续监控一下服务的状态,同时打开我们的spring-boot服务,它的日志是这样的:

代码中的日志输出
代码中的日志输出

和我们常见的都一样,输出了mybatis-plus查询的sql语句。我们再来看下kibana的界面,刚才我们的日志也展示出来了。而且字段很全,自动的帮我们处理了。

kibana日志展示
kibana日志展示

logstash那边的日志我们也看到了实时的解析。

后台解析的日志
后台解析的日志

在下一篇的文章里,我会具体的讲解如何的配置,共同期待。

参考文章:


以上就是今天分享的全部内容了,觉得不错的话,记得点赞 在看 关注支持一下哈,您的鼓励和支持将是shigen坚持日更的动力。同时,shigen在多个平台都有文章的同步,也可以同步的浏览和订阅:

平台

账号

链接

CSDN

shigen01

知乎

gen-2019

掘金

shigen01

腾讯云开发者社区

shigen

微信公众平台

shigen

公众号名:shigen

微信搜一搜
微信搜一搜

shigen一起,每天不一样!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
k8s日志解决方案
在以前我们的应用日志一般由log4j输入到不同的文件中,比如info.log warn.log error.log。 然后当我们需要查看日志的时候,就需要登录服务器使用命令tail -fn 500 error.log进行查看。
丁D
2022/08/12
1.7K0
K8S学习笔记之k8s日志收集实战
本文主要介绍在k8s中收集应用的日志方案,应用运行中日志,一般情况下都需要收集存储到一个集中的日志管理系统中,可以方便对日志进行分析统计,监控,甚至用于机器学习,智能分析应用系统问题,及时修复应用所存在的问题。
Jetpropelledsnake21
2019/04/09
1.6K0
K8S学习笔记之k8s日志收集实战
如何收集k8s集群日志?
在 Kubernetes(K8S)集群中,日志收集是运维管理的重要环节。以下是几种常见的日志收集方案和工具,以及具体实施步骤:
BUG弄潮儿
2025/06/09
2290
如何收集k8s集群日志?
走进Java接口测试之整合ELK实现日志收集
启动时会发现 /usr/share/elasticsearch/data 目录没有访问权限,只需要修改 /mydata/elasticsearch/data 目录的权限,再重新启动即可;
高楼Zee
2020/09/24
1.8K0
走进Java接口测试之整合ELK实现日志收集
SpringBoot应用整合ELK实现日志收集
搭建了ELK日志收集系统之后,我们如果要查看SpringBoot应用的日志信息,就不需要查看日志文件了,直接在Kibana中查看即可。
macrozheng
2019/07/22
2.3K0
SpringBoot应用整合ELK实现日志收集
Kubernetes中部署ELK Stack日志收集平台
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被称为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2021/07/21
1.9K6
项目实战|史上最简单的springboot 整合elk教程,实现日志收集
总有测试小姐姐教你紧急刹车,回头做(改)人(bug):AI大师,你这不行啊!(吃瓜群众排排坐,笑歪了嘴)
AI码师
2021/01/27
4K0
项目实战|史上最简单的springboot 整合elk教程,实现日志收集
使用Docker快速搭建ELK日志分析平台
Docker是目前非常主流的容器化的虚拟技术,这个虚拟又与VMware或者是Hyper-v搭建的虚拟机不同,虚拟机是在宿主机的内核已经操作系统系统之上在虚拟出一套操作系统,而Docker这种容器化的技术是基于操作系统的namespace直接使用宿主机的操作系统去构建需要隔离的应用,中间省去了再去虚拟化一套操作系统的过程,或许有人会担心使用如果Docker的容器挂掉了之后,数据会丢失的问题,这你大可不必的过多担心,Docker本身实现了数据卷的工程,可以将容器内部的目录挂载到宿主机之上,只要你的宿主机还健康,那么上面的数据就不会丢失.甚至是当你重新创建一个容器之后你将新容器的数据目录也挂载到了之前容器的目录上,数据都可以复用,但我不建议你这样哦~
姜同学
2022/10/27
2.3K0
使用Docker快速搭建ELK日志分析平台
使用腾讯云容器服务搭建 ELK 日志系统
腾讯云容器服务团队
2017/07/07
5.4K0
使用腾讯云容器服务搭建 ELK 日志系统
分布式日志系统 EFK 的应用实践(一)
在早期的项目中,如果想要在生产环境中通过日志定位业务服务的Bug 或者性能问题,则需要运维人员使用命令挨个服务实例去查询日志文件,这样导致的结果就是排查问题的效率非常低。
aoho求索
2021/09/24
2.1K0
ELK日志分析方案
1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到Redis消息队列。
dalaoyang
2018/12/05
1.1K0
ELK日志分析方案
关于K8s集群器日志收集的总结
本文介绍了k8s官方提供的日志收集方法,并介绍了Fluentd日志收集器并与其他产品做了比较。最后介绍了好雨云帮如何对k8s进行改造并使用ZeroMQ以消息的形式将日志传输到统一的日志处理中心。 容器日志存在形式 目前容器日志有两种输出形式: stdout,stderr标准输出 这种形式的日志输出我们可以直接使用docker logs查看日志,k8s集群中同样集群可以使用kubectl logs类似的形式查看日志。 日志文件记录 这种日志输出我们无法从以上方法查看日志内容,只能tail日志文件查看。 在k
Rainbond开源
2018/05/31
1.4K0
ELK日志分析方案
1.在微服务服务器上部署Logstash,作为Shipper的角色,对微服务日志文件数据进行数据采集,将采集到的数据输出到Redis消息队列。
IT技术小咖
2019/06/26
9350
ELK日志分析方案
你居然还去服务器上捞日志,搭个日志收集系统难道不香么!
ThresholdFilter:临界值过滤器,过滤掉低于指定临界值的日志,比如下面的配置将过滤掉所有低于INFO级别的日志。
macrozheng
2020/06/22
2.1K0
ELK日志原理与介绍
为什么用到ELK: 一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。 一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。 一个完整的集中式日志系统,需要包含以下几个主要特点: • 收集-能够采集多种来源的日志数据 • 传输-能够稳定的把日志数据传输到中央系统 • 存储-如何存储日志数据 • 分析-可以支持 UI 分析 • 警告-能够提供错误报告,监控机制 ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。 ELK简介: ELK是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。新增了一个FileBeat,它是一个轻量级的日志收集处理工具(Agent),Filebeat占用资源少,适合于在各个服务器上搜集日志后传输给Logstash,官方也推荐此工具。 Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。 Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构,client端安装在需要收集日志的主机上,server端负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。 Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。 Filebeat隶属于Beats。目前Beats包含四种工具:
全栈程序员站长
2022/08/04
6930
ELK日志原理与介绍
k8s集群之日志收集EFK架构
http://tonybai.com/2017/03/03/implement-kubernetes-cluster-level-logging-with-fluentd-and-elasticsearch-stack/
三杯水Plus
2018/11/14
2.1K0
ELK 处理 Spring Boot 日志,妙!
松哥原创的 Spring Boot 视频教程已经杀青,感兴趣的小伙伴戳这里-->Spring Boot+Vue+微人事视频教程
江南一点雨
2021/01/28
1.5K0
Kubernetes实战之部署ELK Stack收集平台日志
ELK是Elasticsearch、Logstash、Kibana三大开源框架首字母大写简称。市面上也被成为Elastic Stack。其中Elasticsearch是一个基于Lucene、分布式、通过Restful方式进行交互的近实时搜索平台框架。像类似百度、谷歌这种大数据全文搜索引擎的场景都可以使用Elasticsearch作为底层支持框架,可见Elasticsearch提供的搜索能力确实强大,市面上很多时候我们简称Elasticsearch为es。Logstash是ELK的中央数据流引擎,用于从不同目标(文件/数据存储/MQ)收集的不同格式数据,经过过滤后支持输出到不同目的地(文件/MQ/redis/elasticsearch/kafka等)。Kibana可以将elasticsearch的数据通过友好的页面展示出来,提供实时分析的功能。
没有故事的陈师傅
2019/12/11
5.9K0
Kubernetes集群监控-使用ELK实现日志监控和分析
日志对于调试问题和监视集群情况也是非常有用的。而且大部分的应用都会有日志记录,对于传统的应用大部分都会写入到本地的日志文件之中。对于容器化应用程序来说则更简单,只需要将日志信息写入到 stdout 和 stderr 即可,容器默认情况下就会把这些日志输出到宿主机上的一个 JSON 文件之中,同样也可以通过 docker logs 或者 kubectl logs 来查看到对应的日志信息。
王先森sec
2023/11/20
1.2K0
Kubernetes集群监控-使用ELK实现日志监控和分析
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。
小东啊
2020/07/23
5K1
Docker 入门到实战教程(十二)ELK+Filebeat搭建日志分析系统
推荐阅读
相关推荐
k8s日志解决方案
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档