余晖落尽暮晚霞,黄昏迟暮远山寻
本站
当前位置:网站首页 > 编程知识 > 正文

从0到1如何构建链路监控系统?

xiyangw 2023-05-14 11:32 16 浏览 0 评论

链路监控的核心是建立多个日志的连接,今天我们从服务端与客户端两个方面,一起构建链路监控系统。

<1>服务端链路日志

从0到1如何构建链路监控系统?

1.入口层记录nginx日志

● 客户端调用接口名称以及其相关信息(request time,bodySent等等)。

● 入口idc标记。

● 用户唯一标记(uid)。

● 会话sessionID,这个ID是用来标记一个请求链路的唯一标记。

● 用户相关头信息(ua,ip等)

2.web层记录向后端请求的日志

● 客户端请求的接口的接口名。

● 下游接口的接口名。

● 会话sessionID。

● 其他用户相关信息。

3.两个维度连接三个服务的日志

一个维度是是通过接口名和接口RT,另一个维度是sessionID维度。

我们首先需要给这三层服务分别起一个日志标记,比如七层的日志我们可以起名叫l7,web服务那层叫www,下游服务层叫webinf。

由于我们在三份日志中都记录客户端的接口名,所以我们需要在三层日志中都使用相同的key,比如这个key叫做transUrl。同时我们还需要另外一个同时都有的key,这个key是用来标记每层接口的耗时情况,我们这里命名为tranRT。

4.接口和RT维度查看整体耗时情况

我们可以通过term aggregation请求,通过对transUrl的聚合,查看每一层的RT,可以一目了然的看到各层的耗时时间。在kibana中如下图这样:

由于每一层的耗时时间都包含上一层的耗时时间(七层包含web层耗时,web层耗时包含下游耗时),当下游服务出现问题时一定会对上游系统的耗时造成影响,所以我们可以通过各层的耗时来直接定位是哪一层的问题。

另外当下游数据服务出现问题时,由于我们在webinf日志中记录了两层的数据,所以我们可以直接通过选中webinf日志中下游接口名,而过滤出对他调用的上游接口是什么(因为webinf日志中也记录了transUrl字段),以及此时web层(www日志)中的一些问题,比如如下这样:

以上是服务端记录的链路日志。那么客户端中我们需要记录什么日志呢?

<2> 客户端链路日志

在客户端中我们可能要记录一些更详细的性能日志,这种性能日志主要记录具体阶段的时间,比如要包含下面这些信息:

● 本地等待时间

● dns查询时间

● tcp建立连接时间

● ssl握手时间

● 发送上行数据时间

● 等待服务器响应时间

● 读取header时间

● 读取body时间

我们也可以通过上面记录服务相关链路日志的逻辑记录客户端各个阶段的时间,同时对其进行聚合,得到如下这样的图:


我们可以通过这个图快速的判断客户端响应时间中各个阶段的耗时情况,这样不管是排查问题还是进行服务端性能优化都可以清晰的展现出来。

除此之外再补充一些问题,比如我们现在需要对服务端各个阶段的前后两日的耗时对比,比如如下图这样:

像这样的图我们可以通过kibana中的timelion来做。

<3>timelion的用法

下面我简单的介绍一下timelion的用法。

timelion底层依赖pipeline aggregations。它的语法有点类似函数式编程的语法,可以通过“.”的方式调用不同的函数来对数据集进行迭代处理。我们通过几个例子讲解一下:

1.查询

最简单的一个查询,我可以查询出来一个索引的日志量随时间变化的趋势。我们可以使用查询语句:

.es(index='logstash-mweibo_trace-2019.07.07')

同时我们也可以添加查询条件,比如我们想看某一类的数据,比如我们想看transModule字段为www的日志变化情况。我们可以使用查询语句:

.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:www')

同时timelion还支持我们对某一个数值条件的日志进行metric计算。比如我们想看这一天中tranRT字段的平均值变化情况。我们可以使用查询语句:

.es(index='logstash-mweibo_trace-*' q='transModule:www',metric='avg:transRT')

我们也可以把多个条件的时序图画在同一个图中,比如我们想分别查看transModule为l7,www,webinf的三种数据变化情况,每个查询使用“,”分隔:

.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:www'),.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:webInf'),.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:l7')

如果我们看烦了直线图表,timelion也给我们提供了其他几种形式的图标,比如点图,柱状图。它们分别对应函数.points(), .bars()

.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:webInf').points()

.es(index='logstash-mweibo_trace-2019.07.07' q='transModule:webInf').bars()

2.指定偏移量

指定偏移量可以方便我们对比不同时刻的数据,在timelion中使用offset函数进行偏移。比如我们想比较两日同一时间数据情况,可以运行如下语句:

.es(index='logstash-mweibo_trace-*' q='transModule:www' offset=-1d),.es(index='logstash-mweibo_trace-*' q='transModule:www')

这里注意一下,我们如果要比较两天的数据,首先需要有2日以上的数据,所以我们在选择数据集的时候使用的index='logstash-mweibo_trace-*'来进行模糊匹配。

以上是timelion比较基础的用法,我们下面来看一下比较高级的玩法。

3.数据函数转换

timelion支持divide()相除函数,add()相加函数,subtract()相减函数,multiply()相乘函数。还有一些算法函数。比如滑动平均函数(.movingaverage()或.mvavg())。

我们可以使用滑动平均函数对函数曲线进行降噪,得到一条相对平滑的函数曲线。比如我们对平均transRT进行降噪处理,可以使用语句:

.es(index='logstash-mweibo_trace-*' q='transModule:www',metric='avg:transRT' ).mvavg(10)

其中mvavg(10)代表使用滑动窗口为10的滑动平均函数进行去燥。

timelion还为我们提供了一些展示函数。比如label()函数。我们可以给这条曲线加一个含义,使用如下查询语句:

.es(index='logstash-mweibo_trace-*' q='transModule:www',metric='avg:transRT' ).mvavg(10).label("平均RT")

我们也可以给我们的timelion加一个title,使用title()函数。

我们可以给这个图起一个题目,比如我们之前那个失败率的例子,我们可以使用title()函数给它起一个名字叫做web层失败率,查询语句如下:

.es(index='logstash-mweibo_trace-*' q='transModule:www AND wwwStatus:5*').divide(.es(index='log
stash-mweibo_trace-*' q='transModule:www')).label("5xx比例").title('web服务层失败率')


4.保存

点击save,会有两个选项,一个是save entire timelion sheet,一个是save current expressoion as Kibana dashboard pane。

一般点击第一个保存即可。点击第二个保存,可以在dashboard看到这个timelion视图。

关注微信公众号:安徽思恒信息科技有限公司,了解更多技术内容……

相关推荐

辞旧迎新,新手使用Containerd时的几点须知

相信大家在2020年岁末都被Kubernetes即将抛弃Docker的消息刷屏了。事实上作为接替Docker运行时的Containerd在早在Kubernetes1.7时就能直接与Kubelet集成使...

分布式日志系统ELK+skywalking分布式链路完整搭建流程

开头在分布式系统中,日志跟踪是一件很令程序员头疼的问题,在遇到生产问题时,如果是多节点需要打开多节点服务器去跟踪问题,如果下游也是多节点且调用多个服务,那就更麻烦,再者,如果没有分布式链路,在生产日志...

Linux用户和用户组管理

1、用户账户概述-AAA介绍AAA指的是Authentication、Authorization、Accounting,即认证、授权和审计。?认证:验证用户是否可以获得权限,是3A的第一步,即验证身份...

linux查看最后N条日志

其实很简单,只需要用到tail这个命令tail-100catalina.out输入以上命令,就能列出catalina.out的最后100行。...

解决linux系统日志时间错误的问题

今天发现一台虚拟机下的系统日志:/var/log/messages,文件时间戳不对,跟正常时间差了12个小时。按网上说的执行了servicersyslogrestart重启syslog服务,还是不...

全程软件测试(六十二):软件测试工作如何运用Linux—读书笔记

从事过软件测试的小伙们就会明白会使用Linux是多么重要的一件事,工作时需要用到,面试时会被问到,简历中需要写到。对于软件测试人员来说,不需要你多么熟练使用Linux所有命令,也不需要你对Linux...

Linux运维之为Nginx添加错误日志(error_log)配置

Nginx错误日志信息介绍配置记录Nginx的错误信息是调试Nginx服务的重要手段,属于核心功能模块(nginx_core_module)的参数,该参数名字为error_log,可以放在不同的虚机主...

Linux使用swatchdog实时监控日志文件的变化

1.前言本教程主要讲解在Linux系统中如何使用swatchdog实时监控日志文件的变化。swatchdog(SimpleWATCHDOG)是一个简单的Perl脚本,用于监视类Unix系统(比如...

syslog服务详解

背景:需求来自于一个客户想将服务器的日志转发到自己的日志服务器上,所以希望我们能提供这个转发的功能,同时还要满足syslog协议。1什么是syslog服务1.1syslog标准协议如下图这里的fa...

linux日志文件的管理、备份及日志服务器的搭建

日志文件存放目录:/var/log[root@xinglog]#cd/var/log[root@xinglog]#lsmessages:系统日志secure:登录日志———————————...

运维之日志管理简介

日志简介在运维过程中,日志是必不可少的东西,通过日志可以快速发现问题所在。日志分类日志分类,对不同的日志进行不同维度的分析。操作系统日志操作系统是基础,应用都是在其之上;操作系统日志的分析,可以反馈出...

Apache Log4j 爆核弹级漏洞,Spring Boot 默认日志框架就能完美躲过

这两天沸沸扬扬的Log4j2漏洞门事件炒得热火朝天:突发!ApacheLog4j2报核弹级漏洞。。赶紧修复!!|Java技术栈|Java|SpringBoot|Spring...

Linux服务器存在大量log日志,如何快速定位错误?

来源:blog.csdn.net/nan1996jiang/articlep/details/109550303针对大量log日志快速定位错误地方tail/head简单命令使用:附加针对大量log日志...

Linux中查看日志文件的正确姿势,求你别tail走天下了!

作为一个后端开发工程师,在Linux中查看查看文件内容是基本操作了。尤其是通常要分析日志文件排查问题,那么我们应该如何正确打开日志文件呢?对于我这种小菜鸡来说,第一反应就是cat,tail,vi(或...

分享几款常用的付费日志系统,献给迷茫的你!

概述在前一篇文章中,我们分享了几款免费的日志服务器。他们各有各的特点,但是大家有不同的需求,有时免费的服务器不能满足大家的需要,下面推荐几款付费的日志服务器。1.Nagios日志服务器Nagio...

取消回复欢迎 发表评论: