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一起,每天不一样!

相关推荐
京东云开发者3 分钟前
业务复杂度治理方法论--十年系统设计经验总结
后端
陈珙_SkyChen3 分钟前
后端思维之高并发方案
后端
uhakadotcom14 分钟前
nginx的JavaScript魔力:njs简介与实践
javascript·后端·面试
敖正炀17 分钟前
打破双亲委派模型
后端
用户40993225021222 分钟前
深入掌握FastAPI与OpenAPI规范的高级适配技巧
前端·javascript·后端
向阳121825 分钟前
doris:备份
后端·python·flask·doris
敖正炀26 分钟前
JVM对象已死-可达性分析
后端
一只小闪闪27 分钟前
langchain4j搭建失物招领系统(四)---实现更新功能
java·人工智能·后端
豆芽81929 分钟前
基于 Flask 的图像分类预测案例解读
人工智能·后端·python·深度学习·神经网络·分类·flask
用户461757524706535 分钟前
cas 存在的典型ABA 问题举例
后端