我的编程空间,编程开发者的网络收藏夹
学习永远不晚

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

这篇文章主要为大家展示了“如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题”这篇文章吧。

1.全链路监控的概念

随着微服务架构的流行,服务按照不同的纬度进行拆分,一次请求往往需要设计到多个微服务程序,这些服务可能使用不同的编程语言开发,不同的团队开发,可能部署很多歌副本,因此就需要一些可以帮助理解系统行为,用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题,这个工具就是全链路监控组件。

全链路监控组件可以监控每个微服务程序之间通信的一个数据指标,可以帮助运维好很好的分析一个请求时如何转发到各个微服务之间以及微服务之间的调度。

全链路性能监控,从整体纬度到局部纬度展示各项指标,将跨应用的所有调度链性能信息几种展现,方便度量整体和局部的性能,并且方面找到故障产生的源头,生产上可以极大缩短故障的排除时间。

全链路监控解决的问题:

  • 请求链路追踪

通过监控可以分析服务之间的调用关系,绘制运行时的拓扑信息,可视化展示。

  • 调用情况衡量

各个调用环节的性能分析,例如吞吐量、响应时间、错误次数

  • 容器规划参考

根据监控数据的分析,可以及时的对微服务进行扩容/缩容、服务降级、流量控制

  • 运行情况反馈

通过监控数据和业务日志快速定位错误信息

全链路监控工具有很多种,应该从下面几种方面去选择

  • 探针的性能消耗

全链路监控工具都需要开启一个探针才能对微服务的链路进行监控,因此我们要选择对服务的影响尽可能的少、数据分析的要快,性能占用小的工具。

  • 代码的侵入性

部分的链路监控工具还需要在应用程序的代码中集成,我们应该选择尽可能不改业务程序代码的同时也能把微服务监控起来的工具,减少开发人员的负担。

  • 监控纬度

监控的数据要全方面、要到位、监控指标越多越好。

  • 可扩展性

工具可以支持分部署部署,具备良好的扩展性。

主流的链路监控工具由zipkin、skywalking、pinpoint。

2.pinpoint链路监控组件的介绍

pinpoint是一个APM(应用程序性能管理)的工具,适用于JAVA/PHP编写的大型分布式系统。

pinpoint的特性:

  • 服务地图(serverMap):通过可视化分布式系统的模块和他们之间的相互来展示系统拓扑,点击某个节点会展示该模块的详情,比如当前的状态和请求数量。

  • 实时活动性线程图(Realtime Active Thread Chart):实时监控应用内部的活动线程。

  • 请求响应分布图(Request/Response Scatter Chart):长期可视化请求数量和应答模式来定位潜在问题。

  • 调用栈(CallStack):在分布式环境中为每个调用生成代码级别的可视图,在单个视图中定位瓶颈和失败点检查器(Inspector):查看应用上的其他详细信息,比如CPU使用率、内存/垃圾回收、TPS和JVM参数。

pinpoint架构

pinpoint agent会部署在程序服务器上,程序启动时会指定agent服务,由pinpoint collector获取微服务之间的链路监控,然后存储在Hbase数据库中,pinpoint web ui展示监控数据。

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

3.使用docker部署pinpoint监控组件

pinpoint托管在github上,拉取镜像非常慢,可以从百度网盘上获取。

pinpoint对docker-compose的版本也要要求,最好在1.25版本以上。

1.下载docker-compose# curl -L https://github.com/docker/compose/releases/download/1.25.0/docker-compose-Linux-x86_64 -o /usr/local/bin/docker-compose # chmod a+x /usr/local/bin/docker-compose 2.下载pinpoint docker部署安装包# wget https://codeload.github.com/pinpoint-apm/pinpoint-docker/zip/refs/tags/1.8.53.部署pinpoint# unzip pinpoint-docker-1.8.5.zip# docker-compose pull && docker-compose up -d4.如果网速不行,就采用下载的方式部署#导入pinpoint镜像[root@binary-k8s-node2 ~]# cd pinpoint-image/[root@binary-k8s-node2 pinpoint-image]# for i in `ls`; do docker load -i $i; done#部署pinpoint[root@binary-k8s-node2 ~]# unzip pinpoint-docker-1.8.5.zip >/dev/null[root@binary-k8s-node2 ~]# cd pinpoint-docker-1.8.5/[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose up -dCreating pinpoint-docker-185_zoo2_1 ... doneCreating pinpoint-flink-jobmanager  ... doneCreating pinpoint-docker-185_zoo1_1 ... doneCreating pinpoint-hbase             ... doneCreating pinpoint-mysql             ... doneCreating pinpoint-docker-185_zoo3_1 ... doneCreating pinpoint-flink-taskmanager ... doneCreating pinpoint-collector         ... doneCreating pinpoint-web               ... doneCreating pinpoint-agent             ... doneCreating pinpoint-quickstart        ... done[root@binary-k8s-node2 pinpoint-docker-1.8.5]# docker-compose ps

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

pinpoint-web容器提供页面展示,已经将容器的8080端口映射成了8039端口,直接访问8079端口即可。

pinpoint自带了一个quickapp的展示模板

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

4.在微服务中集成pinpoint-agent

4.1.pinpoint-agent的接入方式

Tomcat方式接入pinpoint-agent方式需要修改bin/catalina.sh脚本CATALINA_OPTS="$CATALINA_OPTS -javaagent:"$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar"CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.agentId="$AGENT_ID"CATALINA_OPTS="$CATALINA_OPTS -Dpinpoint.applicationName="$APPLICATION_NAME"java -jar启动程序的方式如下直接在启动命令中增加即可java -jar -javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar -Dpinpoint.agentId=$AGENT_ID-Dpinpoint.applicationName=$APPLICATION_NAME xxx.jar-javaagent:$AGENT_PATH/pinpoint-bootstrap-$VERSION.jar#agent程序的的jar包-Dpinpoint.agentId=$AGENT_ID#程序计入pinpoint的一个id号,每个微服务副本节点都要求唯一-Dpinpoint.applicationName=$APPLICATION_NAME#应用组名,一个相同的微服务他们的应用组名要保持一样

下载pinpoint-agent程序

点击设置—>installation

https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

4.2.配置pinpoint-agent

配置pinpoint-agent,然后将pinpoint-agent目录拷贝到每一个微服务的程序代码目录中。

1.下载pinpoint-agent[root@binary-k8s-master1 ~]# wget https://github.com/pinpoint-apm/pinpoint/releases/download/1.8.5/pinpoint-agent-1.8.5.tar.gz2.配置pinpoint[root@binary-k8s-master1 ~]# vim pinpoint-agent/pinpoint.config profiler.collector.ip=192.168.20.13#指定pinpoint collector组件的IP地址3.将pinpoint拷贝到每个微服务的代码目录中[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/{eureka-service,gateway-service,portal-service}[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/product-service/product-service-biz/[root@binary-k8s-master1 ~]# cp -rp pinp springcloud/simple-microservice-dev1/stock-service/stock-service-biz/[root@binary-k8s-master1 ~]# cp -rp pinpoint-agent springcloud/simple-microservice-dev1/stock-service/stock-service-biz/

4.3.修改每个微服务程序的Dockerfile接入pinpoint-agent

修改每个微服务程序的Dockerfile,将pinpoint的程序目录拷贝到容器中,然后在程序的启动命令中加上pinpoint-agent参数,接入pinpoint,其中-Dpinpoint.agentId字段的值采用pod的名称来定义,Dpinpoint.applicationName字段的值采用simple-服务名称来定义。

eureke-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim eureka-service/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/eureka-service -pCOPY ./target/eureka-service.jar /data/simple-microservice/eureka-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar > /data/simple-microservice/eureka-service/eureka-service.log & \ntail -f /data/simple-microservice/eureka-service/eureka-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.sh############################################java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-eureka -Deureka.instance.hostname=${MY_POD_NAME}.eureka-service.simple-ms /data/simple-microservice/eureka-service/eureka-service.jar

gateway-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim gateway-service/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/gateway-service -pCOPY ./target/gateway-service.jar /data/simple-microservice/gateway-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar > /data/simple-microservice/gateway-service/gateway-service.log & \ntail -f /data/simple-microservice/gateway-service/gateway-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.sh############################################java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-gateway /data/simple-microservice/gateway-service/gateway-service.jar

order-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim order-service/order-service-biz/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/order-service -pCOPY ./target/order-service-biz.jar /data/simple-microservice/order-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar > /data/simple-microservice/order-service/order-service-biz.log & \ntail -f /data/simple-microservice/order-service/order-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.sh############################################java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-order  /data/simple-microservice/order-service/order-service-biz.jar

portal-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim portal-service/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/portal-service -pCOPY ./target/portal-service.jar /data/simple-microservice/portal-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-portal /data/simple-microservice/portal-service/portal-service.jar > /data/simple-microservice/portal-service/portal-service.log & \ntail -f /data/simple-microservice/portal-service/portal-service.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.sh############################################java -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-protal /data/simple-microservice/portal-service/portal-service.jar

product-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim product-service/product-service-biz/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/product-service -pCOPY ./target/product-service-biz.jar /data/simple-microservice/product-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar > /data/simple-microservice/product-service/product-service-biz.log & \ntail -f /data/simple-microservice/product-service/product-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.sh############################################java -jar -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-product /data/simple-microservice/product-service/product-service-biz.jar

stock-service服务

[root@binary-k8s-master1 simple-microservice-dev1]# vim stock-service/stock-service-biz/Dockerfile FROM 192.168.20.11/base/centos-java:v1RUN mkdir /data/simple-microservice/stock-service -pCOPY ./target/stock-service-biz.jar /data/simple-microservice/stock-service/COPY pinpoint-agent /pinpoint-agentRUN echo -e "#!/bin/bash \njava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=\${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar > /data/simple-microservice/stock-service/stock-service-biz.log & \ntail -f /data/simple-microservice/stock-service/stock-service-biz.log" > /data/entrypoint.sh && chmod a+x /data/entrypoint.shEXPOSE 8080ENTRYPOINT /data/entrypoint.shjava -jar -javaagent:/pinpoint-agent/pinpoint-bootstrap-1.8.5.jar -Dpinpoint.agentId=${HOSTNAME} -Dpinpoint.applicationName=simple-stock /data/simple-microservice/stock-service/stock-service-biz.jar

4.4.先将product商品服务接入到pinpoint观察效果

我们接入pinpoint的Dockerfile已经写好,直接使用脚本将produce重新部署一下即可。

sh deploy_k8s.sh product-service[root@binary-k8s-master1 k8s]# kubectl get pod -n simple-msNAME                       READY   STATUS    RESTARTS   AGEeureka-0                   1/1     Running   1          6d17heureka-1                   1/1     Running   0          6d17heureka-2                   1/1     Running   1          6d17hgateway-7bb79fdbc4-vvnct   1/1     Running   0          6d11horder-6694f4c474-rg7kw     1/1     Running   0          6d17hportal-697fdf95dd-ml86k    1/1     Running   0          6d16hproduct-847bb6d9fc-cs692   1/1     Running   0          10m#重新部署stock-6cf98bb445-l8gxb     1/1     Running   0          6d19h

product部署好之后在portal门户网站上购买一个商品,产生product商品微服务的请求,观察pinpoint上的链路状态。

product商品微服务下单之后会调用stock库存微服务,stock微服务还没有接入到pinpoint中,所以在看pinpoint上链路监控时,就会发现stock只会以ip的形式展示。

可以在链路监控视图中看到服务之间调用请求的次数,以及是如何调用的。

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

4.5.将所有的微服务接入到pinpoint系统

Dockerfile已经调整好,只需要执行咱们写好的部署脚本,将所有的微服务根据最新的Dockerfile制作出最新的镜像,然后在K8S集群中重新部署一下即可。

deploy_k8s脚本不跟任何位置参数就表示将所有的微服务程序全部更新部署。

[root@binary-k8s-master1 k8s]# sh deploy_k8s.sh

在门户网站中购买两个商品观察微服务之间的调用。

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

5.pinpoint监控系统简单使用

在监控视图的右侧可以选择不同的微服务副本节点、程序之间的调用、请求成功失败的次数

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

5.1.查看程序代码类之间是怎么调用其他微服务的

1)点击view servers可以随机切换各个副本节点

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

2)点击右侧最上面的统计图,然后找到图中的小点,选中这个小点就会跳转到代码调用的页面

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

3)选中完之后会立即跳转,然后点击该请求

请求成功的监控内容

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

请求失败的监控内容

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

4)这里还会有比之前更丰富的视图

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

5)点击mixed view会看到更加丰富的展示视图

请求成功的

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

请求失败的

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

5.2.查看微服务的JVM监控信息

1)点击inspector

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

2)选择指定的副本节点

这些名称都是通过在启动命令中加的-Dpinpoint.agentId=${HOSTNAME}参数生效的

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

以上是“如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网行业资讯频道!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题

这篇文章主要为大家展示了“如何解决基于Pinpoint对SpringCloud微服务项目实现全链路监控的问题”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何解决基于Pinpoint对Sprin
2023-06-29

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录