K8S服务轻松对接EFK日志系统
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了K8S服务轻松对接EFK日志系统相关的知识,希望对你有一定的参考价值。
前言
在不断更新和进步的的网络时代,相应的各种开发技术都有了较高层次的提升。现在比较流行的是容器集群管理平台(比较出名的是 kubernetes ),在平台上运行着不同编程语言产出的各种应用服务。
在越来越多的应用服务运行后,如果某些服务出现了问题,影响了客户使用,我们如何快速地定位并且修复问题呢?
常见的解决方式
1、将报错信息通过程序捕抓后,记录到数据库。
(缺点:只能记录异常的日志,而且有可能字段过长记录失败)
2、在代码里面打印各种关键信息,然后定位问题,在服务器上找到对应的程序日志文件,查找关键词来看问题。
(缺点:如果做了高可用的话,需要全部副本都看一遍,比较麻烦)
3、通过接入统一的日志系统,利用唯一的标识去查找当时发生的异常。
(优点:较为快速准确地定位到问题)
前提要求
1、部署好 K8S / K3S 集群
2、部署好 Elasticsearch 引擎
3、部署好 kibana 开源分析可视化工具
4、部署好 filebeat 文件内容收集工具
5、对 K8S 基本命令的了解
以上是微服务和日志系统的基本架构,详情的部署方法有兴趣的下期再详细叙述。
应用服务注意点
1、程序日志文件
不管用什么编程语言,最终在 K8S 的体现形式是各个不同的容器服务。
所以我们的关键的步骤是:将应用服务的接口日志,以一个固定格式的 json (比如 json 里面固定有10个字段,不能随意变更字段,因为 ES 的存储索引一旦生成就是固定不变的,如果发送新的数据结构到 ES ,会拒绝写入)存储到一个文件当中,一次请求就一行数据。
接口日志的内容大致如下:
建议记录一些关键的字段信息,如下:
1、uri(请求路由)
2、method(请求方法POST、GET)
3、get/post(请求参数json)
4、ret(接口是否成功标识,用于第三方判断)
5、result(接口返回值json)
6、errorMsg(异常信息)
7、uuid(本次请求接口的唯一标识,用于快速定位某次请求)
8、startTime(接口开始时间)
9、endTime(接口结束时间)
10、consume(接口耗时)
…
2、容器打包文件
在完成一些初始化步骤后,执行服务的启动命令,并且将服务挂到后台,然后使用tail -f xxx.log
命令来让容器挂起这个日志文件。
3、部署filebeat搜集信息发送到ES
由于 K8S 的所有应用服务所产生的日志,都会统一放在 node 节点的/var/log/containers
目录下,名称就是以 pod 来命名的。
然后我们来看看,第二步挂起的文件,在 K8S 集群的形式如下图片:
基本有3个字段(log、stream、time)
其中 log 的内容就是我们挂起的日志文件内容,必须是一行行 json 数据才可以的。
接着,下面对 filebeat 的配置文件进行剖析:
具体的解析如上图所示,值得注意的是,message 的拆解,其实就是将上述的 log 字段里的 json 解析成多个程序自定义的字段,然后统一发送到 ES 中,生成对应的索引数据文件。
最后,如果有新部署的应用服务的话,只需要在 filebeat 的配置文件增加对应的匹配条件即可直接对接到 EFK 日志系统。
4、可视化日志系统查询
万事俱备,数据的生成、收集、存储都完成了,现在只差关键的一步,那就是查询。
具体 kibana 的使用指南大家可以摸索一下,比较简单易用,查询速度也是杠杠的~
以上就是本期分享,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!
以上是关于K8S服务轻松对接EFK日志系统的主要内容,如果未能解决你的问题,请参考以下文章