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

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

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

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

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

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

方案一

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

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

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

方案二

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

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

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

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

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

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

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

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

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

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

方案三

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

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

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

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

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

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

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

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

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

参考文章:


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

平台 账号 链接
CSDN shigen01 shigen的CSDN主页
知乎 gen-2019 shigen的知乎主页
掘金 shigen01 shigen的掘金主页
腾讯云开发者社区 shigen shigen的腾讯云开发者社区主页
微信公众平台 shigen 公众号名:shigen

shigen一起,每天不一样!

相关推荐
磊磊磊磊磊8 小时前
用AI做了个排版工具,分享一下如何高效省钱地用AI!
前端·后端·react.js
hgz07108 小时前
Spring Boot Starter机制
java·spring boot·后端
daxiang120922058 小时前
Spring boot服务启动报错 java.lang.StackOverflowError 原因分析
java·spring boot·后端
我家领养了个白胖胖8 小时前
极简集成大模型!Spring AI Alibaba ChatClient 快速上手指南
java·后端·ai编程
一代明君Kevin学长8 小时前
快速自定义一个带进度监控的文件资源类
java·前端·后端·python·文件上传·文件服务·文件流
aiopencode8 小时前
上架 iOS 应用到底在做什么?从准备工作到上架的流程
后端
哈哈老师啊9 小时前
Springboot简单二手车网站qs5ed(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
数据库·spring boot·后端
JIngJaneIL9 小时前
基于Java+ vue图书管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot·后端
IT_陈寒9 小时前
Vue 3.4 实战:5个被低估的Composition API技巧让我的开发效率提升40%
前端·人工智能·后端
VX:Fegn08959 小时前
计算机毕业设计|基于springboot + vue考勤管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计