JAVA微服务场景下分布式日志收集排查问题实战

news2025/1/17 21:42:00

问题产生的根由?不同服务的日志存在哪里?我们怎么去排查线上问题?

问题场景:我们部署的java服务可能有几十个,不同的项目里面他是看不到别的服务的日志,只有服务的返回msg消息,相比传统的单体服务来说,排查问题和解决问题的原因相对比较复杂和麻烦,我们传统的单体项目的日志存txt文本,log文件,但是项目日志的文件太大了,几个G,十几个G的时候去打开日志特别慢,很不方便。

那么处理这种日志应该怎么做和设计一个日志搜索呢?

传统的解决办法,数据库记录错误日志,es索引写入,页面搜索,写硬盘定时清理,但是日志不仅仅分系统日志,服务日志,还有业务逻辑操作日志,系统日志等,从而加大了我们存储日志的内存空间和复杂度。

下面给大家讲解微服务下日志怎么使用,怎么查问题。

日志方案:

方案一:分布式日志搜集:ELK+kafka 或者ELK 这是最传统的方式。

方案二:filebeta+logstatsh+ES+web  这钟方式处理的日志一般是网络处理,filebeta支持大量批量文件读取和操作,从而大大加快文件写入,因为filebeta不存在数据会丢失的情况。

方案三:微服务网关拦截:统一请求分发,每一个请求抓取服务的日志返回和信息,写入硬盘或者表中,定时数据清洗。当然实际开发当中没有这么用,这种方式不推荐。

方案四:阿里云日志搜集:日志服务 SLS (我相信很多企业目前都是在用阿里的sls,因为用起来比较方便,我们只关心服务的部署,阿里云帮我们做日志搜集,其实日志和ELK类似都是走索引写入查询)

方案一和方案二 和方案三是目前企业用的比较多的,当然一个是花钱一个是自己搭建的,花钱的肯定用起来方便。

我们今天就实践操作讲解一下阿里云的日志服务 SLS怎么使用和查日志。

看这个图 来说这个是目前我们生产环境的sls日志服务查询出来一个月的日志量,那一般企业的日志量我相信过亿就不错了,这个是目前12百个服务部署到阿里云k8s容器上面。所以日志量很大。

下面我们来看sls日志如何使用操作?

搜索方式支持和数据库一样的操作,可以模糊查询和精确查询日志,不是等值查询,或和且的方式都可以。

 阿里云日志查询语法:

查询语法 (aliyun.com)(可以参考阿里云的语法使用)

我们按照服务名称或者ip + id编号,筛选时间或者搜索指定打印指定的日志名称。

服务名称 + 后台日志搜索  

这里由于有敏感数据就不贴出来了,搜索方式是这样,如果你想要统计分组也是可以的。

服务名称 + 后台日志+ 日志关键词+like+ 分组

服务名称 and api auth-center  response  or LIKE memberId GROUP unionId 

基于这种查询就能查到具体的日志输出了,如果你要聚合统计,你可以添加预查询

 预查询的方式就是message: returnMessage  这样

上下文浏览:

 上下文浏览代表是程序从上往下执行,那么0的下标代表当前位置,负数代表程序上面,正数代表程序还在往下面执行,排查问题的时候每一步都会有记录,这个很关键。也是能够快速排查到问题原因的。

当然还有一些日志统计,报表的,都可以通过控制台去处理筛选查看:

 日志聚类:

 

日志智能聚类(LogReduce)功能能将相似度高的数据聚合在一起,提取共同日志Pattern(模式),快速掌握日志全貌

主要功能和特性:

  • 支持任意格式日志:Log4J、Json、单行(syslog)
  • 亿级数据,秒级出结果
  • 日志经任意条件过滤后再Reduce
  • 对Reduce后Pattern,根据signature反查原始数据
  • 不同时间段Pattern比较
  • 动态调整Reduce精度

主要应用场景:

  • DevOps(问题定位、异常检测、版本回归等)
  • 安全、入侵检测

计费标准:

开启“日志聚类”功能后,索引总量会增加原始日志大小的10%

其实开启过后就是增加指定日志的聚合并且持久化操作,反正费用是不能少的

监听事件查询:

监听索引字段的事件查询,主要是以阿里云的字段

 

 

当然还有数据加工的我就不演示了。

下面我们讲重点:其实sls服务也有查询不到问题的时候,那是必然的,你说你日志看到了但是没有看到别的服务的调用链路,这是关键,每一条执行日志都有一个 tid,tid是什么?tid就是链路调用的tranceid和spanId ,微服务分布式调用链路追踪请求服务的时候会传一个tranceid 从而帮助我们排查问题。

我们可以通过Sleuth + Zipkin 追踪日志记录。

我们这里采用Skywaking 。

 

https://github.com/apache/skywalking

感兴趣的可以去看看

搜索某一个错误的日志 

 

 

原理也是通过tranceId去查询调用链路,服务的链路。 从而判断这个服务的接口是否成功,这样我们整个链路就可以知道哪里出了问题了。 Zipkin也是通过tranceId去查询日志。原理都是一样的。

 当然也可以java服务集成日志写入到es里面进行查询,通过服务名称,渠道,时间,log日志级别做成web页面查询也是可以的。

 ————没有与生俱来的天赋,都是后天的努力拼搏(我是小杨,谢谢你的关注和支持)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/18756.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

计算机体系结构:1.1.系统加速比计算例题

文章目录题目内容题目分析题目求解题目内容 假设在某程序的执行过程中,浮点操作时间占整个执行时间的10%,现希望对浮点 操作加速 。 (1)设对浮点操作的加速比为Sf,请推导出程序总的加速比S和Sf之间的关系表达式&#…

IoU的计算实现详解(基于Python)

文章目录1. 交并比(IoU)2.原理3.代码实现1. 交并比(IoU) 具体来说,它是两边界框相交部分面积与相并部分面积之比,如下所示: 也就是两个框的交集和两个框的并集之比。 2.原理 这里详细解释一…

如何安装与配置Node.js

Node.js发布于2009年5月,由Ryan Dahl开发,是一个基于Chrome V8引擎的JavaScript运行环境,使用了一个事件驱动、非阻塞式I/O模型, 让JavaScript 运行在服务端的开发平台,它让JavaScript成为与PHP、Python、Perl、Ruby等…

使用轻量应用服务器搭配宝塔面板搭建可道云kodbox私有云网盘的方法教程

你是否有过网盘下载速度只有十几KB,时不时出现网盘的文件被删除的问题,不如自己搭建一个云网盘吧,只需要一云服务器,即可搭建一个跟某度云一样的云盘。可以自由下载,不限制网速,随时都可上传下载。这篇文章…

nginx+redis+jvm三级缓存设计与落地实现

由于涉及到个人隐私,使用的是阿里云平台,所以下面的IP地址和密码我都做了修改。不是真实的地址。此模拟秒杀商品列表信息缓存案例实现的技术解决方案。 远程环境1版本操作系统ubuntu22.04openresty1.21.4.1jdkOracle JDK17IP192.168.1.1远程环境2版本redis7.0.5Springboot2.5…

149. SAP UI5 Table 控件数据进行 Excel 导出时如何进行格式控制

文章目录 字符串类型的显示控制数值类型(Number)的值显示控制日期和时间显示的格式控制布尔值的显示控制BigNumber 和百分比数值的显示总结本教程的前一步骤,我们成功的将 sap.m.Table 控件里显示的数据导出到了本地 Excel 文件中。 下图是使用 sap.m.Table 显示的表格页面:…

菜小白聊聊开源和开源协议

最近想入linux的深坑,于是开启了马哥sre课程的探险之旅。在了解到Linux是一款自由和开放源码的类UNIX操作系统的历史时,深深被开源精神所折服。也强烈感受到了开源精神的伟大。也正是因为有了开放源码的精神,才有了国产百花齐放的android系统…

【JUC源码专题】AQS 源码分析(JDK8)

文章目录同步队列同步队列结点 Node同步队列状态 state获取互斥锁acquire 方法tryAcquire 方法获取互斥锁addWaiter 方法enq() 入队acquireQueued()setHead 方法设置头节点shouldParkAfterFailedAcquire()parkAndCheckInterrupt()cancelAcquire 发生异常,取消线程获…

第七章第一节:顺序查找和折半查找

文章目录教程1. 查找的基本概念1.1 对查找表的常见操作1.2 查找算法的评价指标2. 顺序查找2.1 顺序查找的算法思想2.2. 顺序查找的实现2.3 查找效率分析2.4 顺序查找的优化(对有序表)2.5 用查找判定树分析ASL2.6 顺序查找的优化(被查概率不相…

在centos中注册gitlab runner

注册runner 有几种不同的方式,这里介绍的是在centos7中使用 rpm包来安装 按照gitlab runner的官网链接里面的介绍: gitlab runner 链接 下载 官网描述: ## Replace ${arch} with any of the supported architectures, e.g. amd64, arm, ar…

python 空间滤波

均值滤波器 空域变换包含灰度变换和空间滤波 灰度变换是通过点对点的映射进行图像增强,是一种点运算 空间滤波是基于邻域的一种运算,即图像像素的灰度值不仅和当前点有关,还和这个点周围邻域像素点的灰度值有关。所以空间滤波其实是一种加…

如何管理oralce口令文件和参数文件

口令文件 口令文件审核 Step 1: 使用root账号将 oracle dba的权限移除 [rootoracle-db-19c ~]# su - oracle [oracleoracle-db-19c ~]$ [oracleoracle-db-19c ~]$ id oracle uid1501(oracle) gid1501(oinstall) groups1501(oinstall),1502(dba),1503(oper),1504(backupdba)…

浅析linux 内核 高精度定时器(hrtimer)实现机制(一)

1 hrtimer 概述 在Linux内核中已经存在了一个管理定时器的通用框架。不过它也有很多不足,最大的问题是其精度不是很高。哪怕底层的定时事件设备精度再高,定时器层的分辨率只能达到Tick级别,按照内核配置选项的不同,在100Hz到1000…

灵界的科学丨一、灵界在哪里?

摘自李嗣涔教授《灵界的科学》 在国内物理学界近十位学者的见证下, 发现我们所处四度时空的物质世界之外, 似乎还有一个世界的存在, 当年我把这个世界称作信息场, 也就是俗称的灵界。 二十世纪末宇宙大尺度谜团的重大发现──…

设计模式学习记录

设计模式 UML图: ------> 依赖 ——>关联 -------▲ 实现 —–—▲ 继承 🔺———> 聚合 ▲———> 组合(关联性更强) 一、策略模式(行为型) 策略模式:是一种定义一系列算法的方法…

Java --- Spring6项目创建及注意事项

目录 一、Spring框架解决的问题 二、Spring介绍 三、Spring八大模块 四、Spring特点 五、第一个Spring6入门程序 六、spring的细节 6.1、配置文件的bean的id不能重复 6.2、spring底层是通过反射调用无参构造方法创建对象 6.3、spring会把创建好的对象存储在Map集合中 6.4…

【数据结构初阶】树+二叉树+堆的实现

真正的勇士,就是在看清生活的真相后,依旧慷慨面对他所遭受的苦难与挫折。 大学究竟教会了我们什么呢?或许答案只有一个,看清自己,与自己和解,和自己坐下来谈一谈。 人生或许本就没有什么意义,…

MySQL的缓冲池(buffer pool)及 LRU算法

1.什么是缓冲池(buffer pool) buffer pool 是数据库的一个内存组件,里面缓存了磁盘上的真实数据,Java系统对数据库的增删改操作,主要是这个内存数据结构中的缓存数据执行的。 控制块 存的是 数据页所属的表 空间号&a…

MATLAB break语句

MATLAB中 break 语句用于终止 for 或 while 循环的执行,当在循环体内执行到该语句的时候,程序将会跳出循环,继续执行循环语句的下一语句。 注意:在嵌套循环中,break 退出只能在循环发生,后通过的声明控制循…

git关于创建/删除分支常用命令

主要用来介绍git中如何操作分支的命令&#xff1a; 1.git查看所有的分支: git branch -a 2.创建本地分支&#xff1a; git checkout -b <name> 3.有了本地分支之后推送到远程分支; git push origin <name> 4.切换分支&#xff1a; git checkout <name> 5.删除…