首页 > 其他分享 >K8S服务轻松对接EFK日志系统

K8S服务轻松对接EFK日志系统

时间:2022-09-29 14:34:17浏览次数:55  
标签:log 接口 json EFK 应用服务 日志 K8S

前言

在不断更新和进步的的网络时代,相应的各种开发技术都有了较高层次的提升。现在比较流行的是容器集群管理平台(比较出名的是 kubernetes ),在平台上运行着不同编程语言产出的各种应用服务。

在越来越多的应用服务运行后,如果某些服务出现了问题,影响了客户使用,我们如何快速地定位并且修复问题呢?


常见的解决方式

1、将报错信息通过程序捕抓后,记录到数据库。

(缺点:只能记录异常的日志,而且有可能字段过长记录失败)

2、在代码里面打印各种关键信息,然后定位问题,在服务器上找到对应的程序日志文件,查找关键词来看问题。

(缺点:如果做了高可用的话,需要全部副本都看一遍,比较麻烦)

3、通过接入统一的日志系统,利用唯一的标识去查找当时发生的异常。

(优点:较为快速准确地定位到问题)


前提要求

1、部署好 K8S / K3S 集群
2、部署好 Elasticsearch 引擎
3、部署好 kibana 开源分析可视化工具
4、部署好 filebeat 文件内容收集工具
5、对 K8S 基本命令的了解

以上是微服务和日志系统的基本架构,详情的部署方法有兴趣的下期再详细叙述。


应用服务注意点

1、程序日志文件

不管用什么编程语言,最终在 K8S 的体现形式是各个不同的容器服务。

所以我们的关键的步骤是:将应用服务的接口日志,以一个固定格式的 json (比如 json 里面固定有10个字段,不能随意变更字段,因为 ES 的存储索引一旦生成就是固定不变的,如果发送新的数据结构到 ES ,会拒绝写入)存储到一个文件当中,一次请求就一行数据。

接口日志的内容大致如下:

K8S服务轻松对接EFK日志系统_应用服务

建议记录一些关键的字段信息,如下:
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、容器打包文件

K8S服务轻松对接EFK日志系统_日志系统_02


在完成一些初始化步骤后,执行服务的启动命令,并且将服务挂到后台,然后使用​​tail -f xxx.log​​命令来让容器挂起这个日志文件。


3、部署filebeat搜集信息发送到ES

K8S服务轻松对接EFK日志系统_应用服务_03

由于 K8S 的所有应用服务所产生的日志,都会统一放在 node 节点的​​/var/log/containers​​目录下,名称就是以 pod 来命名的。

然后我们来看看,第二步挂起的文件,在 K8S 集群的形式如下图片:

K8S服务轻松对接EFK日志系统_EFK_04

基本有3个字段(log、stream、time)

其中 log 的内容就是我们挂起的日志文件内容,必须是一行行 json 数据才可以的。

接着,下面对 filebeat 的配置文件进行剖析:

K8S服务轻松对接EFK日志系统_应用服务_05

具体的解析如上图所示,值得注意的是,message 的拆解,其实就是将上述的 log 字段里的 json 解析成多个程序自定义的字段,然后统一发送到 ES 中,生成对应的索引数据文件。

最后,如果有新部署的应用服务的话,只需要在 filebeat 的配置文件增加对应的匹配条件即可直接对接到 EFK 日志系统。


4、可视化日志系统查询

万事俱备,数据的生成、收集、存储都完成了,现在只差关键的一步,那就是查询。

K8S服务轻松对接EFK日志系统_k8s_06

具体 kibana 的使用指南大家可以摸索一下,比较简单易用,查询速度也是杠杠的~

以上就是本期分享,如果大家对此感兴趣,欢迎各位关注、留言,大家的支持就是我的动力!

标签:log,接口,json,EFK,应用服务,日志,K8S
From: https://blog.51cto.com/u_15345191/5719814

相关文章

  • k8s-deployment详解
    Deployment概念属于一种工作负载,也称为Controller(其他的Controller包括ReplicaSet、DaemonSet、StatefuleSet、Job)一次性部署多个Pod,控制Pod,使Pod拥有多副本,自愈,扩......
  • 【Kubernetes】K8s笔记(三):Kubernetes 中的核心概念 Pod
    目录0.为什么叫Pod1.Pod是Kubernetes中的核心对象2.使用YAML描述Pod3.使用kubectl操作Pod0.为什么叫PodPod这个词原意是“豌豆荚”,后来又延伸出“舱室......
  • efk 使用
    1.创建索引  2.匹配elasticsearch索引 3.      4. ......
  • logging日志模块
    日志模块log_utils.pyimportlogginglogger=logging.getLogger()#设置日志打印级别.打印该级别及以上的日志信息.logger.setLevel(logging.DEBUG)#创建指定的......
  • nginx 日志之 access_log分割
    如果任由访问日志写下去,日志文件会变得越来越大,甚至是写满磁盘。所以,我们需要想办法把日志做切割,比如每天生成一个新的日志,旧的日志按规定时间删除即可。实现日志切割可以通......
  • mmdetection使用wandb查看训练日志
    mmdetection查看日志之前一直是在用TextLoggerHook,已经觉得挺方便的了,自从用了wandb之后,发现wandb真不错,看log更方便了,回不去了。wandb的简单配置:wandb官网:https://wandb......
  • k8s之dashboard
    一、dashboard:简而言之,k8s的页面展示。效果更加直观。二、安装dashboard1)github官网地址和版本选择地址地址:https://github.com/kubernetes/dashboard......
  • nginx日志的python分析脚本
    因为容量场景需要统计峰值时间段的业务分布情况,即是统计每个接口请求以及对应的数量,这里记录下之前的实现脚本。nginx的日志格式如下: 代码如下:importos,jsonimport......
  • Oracle部署,关于日志文件系统选择(硬盘格式化、挂载)
    之前部署过好多Oracle服务,采用的日志文件系统一直是ext3。但是我观察到很多人在格式化/挂载数据盘时,采用的日志文件系统类型有ext3、ext4、xfs等,这不禁让我发出疑问,哪个类......
  • K8S 和 容器中的退出状态码
    当容器终止时,容器引擎使用退出码来报告容器终止的原因。如果您是Kubernetes用户,容器故障是pod异常最常见的原因之一如果退出代码为0:容器正常退出,无需排查如果退出......