Spring cloud微服务安全实战-7-12整合链路追踪和日志监控
调用链路的监控和统一日志的监控结合起来。比如说我在调用链监控上发现有一个调用订单的服务慢了。通过pinpoint可以看到 。用户发出来的请求,经过了网关,经过了order,经过了pagement。通过pinpoint可以知道慢, 也可以知道哪一环慢了。但是我想看一个整体的日志。这个请求从发出去,到回来,经过这四个应用,整个的一个完整的日志。我要看到在gateway上打印了什么。在Api上打了什么,在order上打了什么。在payment上打印了什么日志。我希望一个查询能把这四个应用跟当前这一个请求相关的日志都 展示出来。然后来看一下这个请求里面到底发生了什么。

要实现这个功能关键的点就是这个TransactionID,这是一个无意义的字符串。这个串就是pinpoint用来把各个应用间的请求给它关联起来的一个串,实际上这个串是在这四个应用里面不断的传递的。

我们现在要做的就是在日志里面把这个Transaction打印出来。我们就可以之前用elk的方式,把它作为一个字段,传到我们的elk里面,然后子啊kibana里面直接搜这个串,然后这个所有带着这个TransactionId的日志都会按照时间顺序展示出来。你就能看到这个请求在所有四个应用上,打出来的日志。
开始撸代码
新建一个应用

创建一个product-api

复制orderAPi里面的pom.xml上面的部分,下面值引入starter-wenb的依赖。

创建SpringBoot的启动类。



用restTemplate去发服务。

引入lombok

然后加上lombok的日志的对象。

return 随便写的一个字符串。

UserApi打印日志
在获取用户信息的这里,也打印一个日志

ProductAPI
给ProductAPI指定运行的配置

添加一个配置文件修改 启动服务的端口

指定端口为8064

启动productAPi

pinpoint的配置文件
agent里面加上productAPI

启动测试
再启动userAPI和ProductAPi

productAPI里面,这里要new 一个retTemplate 然后重启productAPi

访问product服务没有问题

pinpoint里面。看到product里面调用了userAPI。userApi里面调用了数据库。这样一个链路已经展示出来了。
调整日志
调整日志首先要修改agent
pinpoint里面要进行修改。springboot里面用的是logback。所以搜索logback
下面这里设置为true。pinpont的agent就会自动往logback的mdc里面去加一个参数,

配置控制台上日志的格式

复制以前写的格式

放在双引号内

pinPoint加的参数叫做PtxId
把这段配置 复制到userAPi里面

重启服务,productAPI和OrderAPI这两个服务。
启动后日志里面多了个方括号。就是我们在配置文件内配置的方括号。这些日志都系统启动的时候内部打印出来的。并不是外部打出来的。

调用一个服务

调用服务后,方括号后内有值了。通过transactionId可以看出,最后这四行数据是同一个请求, 打印出来的。

userAPi的控制台也有同样的trasacgtionId。这是两个系统里面打印出来的日志。但是日志里面会有相同的编号。

这样就可以接入ELK里面。把这一段代码作为一个单独的字段。提取出来 放到elk里面。在kibana里面你只要查这个串,两个API
里面 这四行日志 都查出来。
这样在一个请求进来以后,在不同的系统里面打印出来的日志,整个提取出来。 这里不再演示。
pinpoint里面的transactionId和日志系统就接起来了。

结束
Spring cloud微服务安全实战-7-12整合链路追踪和日志监控的更多相关文章
- 《Spring Cloud微服务 入门 实战与进阶》
很少在周末发文,还是由于昨晚刚收到实体书,还是耐不住性子马上发文了. 一年前,耗时半年多的时间,写出了我的第一本书<Spring Cloud微服务-全栈技术与案例解析>. 时至今日,一年的 ...
- Spring Cloud微服务安全实战_00_前言
一.前言: 一直以来对服务安全都很感兴趣,所以就学习.这是学习immoc的 jojo老师的 <Spring Cloud微服务安全实战课程>的笔记,讲的很好. 课程简介: 二.最终形成的架 ...
- Spring cloud微服务安全实战_汇总
Spring cloud微服务安全实战 https://coding.imooc.com/class/chapter/379.html#Anchor Spring Cloud微服务安全实战-1-1 课 ...
- Spring Cloud微服务安全实战_4-5_搭建OAuth2资源服务器
上一篇搭建了一个OAuth2认证服务器,可以生成token,这篇来改造下之前的订单微服务,使其能够认这个token令牌. 本篇针对订单服务要做三件事: 1,要让他知道自己是资源服务器,他知道这件事后, ...
- Spring Cloud微服务安全实战_4-3_订单微服务&价格微服务
实现一个场景: 订单微服务: POM: <?xml version="1.0" encoding="UTF-8"?> <project xml ...
- Spring cloud微服务安全实战 最新完整教程
课程资料获取链接:点击这里 采用流行的微服务架构开发,应用程序访问安全将会面临更多更复杂的挑战,尤其是开发者最关心的三大问题:认证授权.可用性.可视化.本课程从简单的API安全入手,过渡到复杂的微服务 ...
- Spring cloud微服务安全实战-6-8sentinel限流实战
阿里2018年开源的. 简单来说就是干三件事,最终的结果就是保证你的服务可用,不会崩掉.保证服务高可用. 流控 先从最简单的场景来入手. 1.引用一个依赖, 2,声明一个资源. 3.声明一个规则 注意 ...
- Spring cloud微服务安全实战-6-4权限控制改造
授权,权限的控制 令牌里的scope包含fly就有权限访问.根据Oauth的scope来做权限控制, 要让@PreAuthorize生效,就要在启动类里面写一个注解. 里面有一个属性叫做,就是在方法的 ...
- Spring cloud微服务安全实战-6-2JWT认证之认证服务改造
首先来解决认证的问题. 1.效率低,每次认证都要去认证服务器调一次服务. 2.传递用户身份,在请求头里面, 3.服务之间传递请求头比较麻烦. jwt令牌. spring提供了工具,帮你在微服务之间传递 ...
- Spring cloud微服务安全实战-5-7实现基于session的SSO(客户端应用的Session有效期)
授权模式改造成了Authorization code完成了改造的同时也实现了SSO.微服务环境下的前后端分离的单点登陆. 把admin的服务重启.刷新页面 并没有让我去登陆,直接就进入了首页. ord ...
随机推荐
- k8s之volume
pause容器为基础架构容器,每一个节点都有一个pause镜像, 为每一个pod提供底层基础支撑设备,所有pod中容器会共享此容器的网络空间,存储卷也是 还可使用csi,存储插件. 使用存储卷步骤1. ...
- Python的包管理工具
Python的包管理工具 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么使用包管理 Python的模块或者源文件直接可以复制到目标项目目录中,就可以导入使用了. 但是为了 ...
- c#在WinForm和WebForm中根据控件和属性名获取控件属性值
在WinForm中开发的过程中,所有继承了Control控件,在使用多线程的时候,就需要通过一个通用的方法来设置界面上的控件的属性. delegate void DelegateSetControl( ...
- Beta冲刺(2/7)——2019.5.23
所属课程 软件工程1916|W(福州大学) 作业要求 Beta冲刺(2/7)--2019.5.23 团队名称 待就业六人组 1.团队信息 团队名称:待就业六人组 团队描述:同舟共济扬帆起,乘风破浪万里 ...
- 检测并修改linux服务器日期
公司的一个应用服务器license到期了,商务上短时间解决不了.只好将服务器的时间调到去年,临时将就一下. 服务器是vmware虚拟机装的centos,日期每隔一段时间会自动同步,百度了好久,也关闭不 ...
- Json在序列化注意问题
Java中的Json序列化,不容忽视的getter 问题重现 public class AjaxJson { private boolean success; private String msg; ...
- SSM框架--Spring+SpringMVC+Mybatis (IDEA)搭建
使用idea创建一个maven项目( 这里演示 的是 web项目) 点击 Finish 然后开始配置 pom.xml文件(添加各种依赖jar包) 先去找 spring 所需的 jar包 jar包中心仓 ...
- EntityFramework6 学习笔记(三)
你可能要问,我用EF不就为了避免写SQL吗?如果要写SQL我不如直接用ADO.NET得了.话虽然这么说没错,可有些时候使用EF操作数据还是有一些不方便,例如让你根据条件删除一组记录,如果按照正常的流程 ...
- c#中的继承学习总结
c#的继承方法,大体上和c++的类似,但是有点区别的,我这里刚刚初学,因此把重点记录下. 1.派生类继承了父类,那么,如果父类的方法和数据都是public,那么派生类都会继承.派生类可以直接调用父类的 ...
- Django REST framework版本控制
参考链接:https://www.cnblogs.com/liwenzhou/p/10269268.html 1.路由: #版本控制 re_path('^(?P<version>[v1|v ...