Skip to content

第7章-SpringCloud-业务模块全链路监控

本章所讲内容:

7.1 Springcloud 开发的电商平台部署到 k8s 集群

7.2 全链路监控基本介绍及应用场景

7.3 常见的全链路监控工具及对比分析

7.4 安装 Pinpoint:初始化实验环境

7.5 安装 Pinpoint:安装 docker

7.6 安装 pinpoint 服务

7.7 部署 Springcloud 开发的电商平台:集成 Pinpoint 链路监控

7.8 pinpoint web 界面使用说明

7.1 将Springcloud 开发的电商平台部署到 k8s 集群

7.1.1 k8s 中部署网关 Gateway 服务

1)构建镜像

[root@k8s-master01 microservic-test]# cd gateway-service/
[root@k8s-master01 gateway-service]# docker build -t 192.168.20.206/microservice/gateway:v1 .
[root@k8s-master01 gateway-service]# docker push 192.168.20.206/microservice/gateway:v1

2)部署服务

[root@k8s-master01 microservic-test]# cat k8s/gateway.yaml |egrep "image\:|ingressClassName"
  ingressClassName: nginx
        image: 192.168.20.206/microservice/gateway:v1

img

可以删除资源启动限制,节省资源

image-20230829221313097

修改 gateway.yaml 文件,把镜像变成 192.168.20.206/microservice/gateway:v1

3) 更新 yaml 文件

[root@k8s-master01 microservic-test]# kubectl apply -f k8s/gateway.yaml

4) 查看 pod 状态

[root@k8s-master01 microservic-test]# kubectl get pod -n ms|grep gateway
gateway-578f6845fc-fnfnd   1/1     Running   0          2m1s
gateway-578f6845fc-k9c8d   1/1     Running   0          2m1s

5)看到如上running 说明 pod 运行正常

6)配置 hosts 文件

gateway 的域名是 gateway.ctnrs.com,需要在电脑找到 hosts 文件,再增加一行如下:

192.168.20.204 gateway.ctnrs.com

在浏览器访问 eureka.ctnrs.com

可看到 GATEWAY-SERVICE 已经注册到 eureka 了:

img

7.1.2 k8s 中部署前端 portal 服务

1) 构建镜像

[root@k8s-master01 microservic-test]# cd portal-service/
[root@k8s-master01 portal-service]# docker build -t 192.168.20.206/microservice/portal:v1 .
[root@k8s-master01 portal-service]# docker push 192.168.20.206/microservice/portal:v1

2) 部署服务

[root@k8s-master01 microservic-test]# vim k8s/portal.yaml
[root@k8s-master01 microservic-test]# cat k8s/portal.yaml |egrep "image\:|ingressClassName"
  ingressClassName: nginx
        image: 192.168.20.206/microservice/portal:v1

修改 portal.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/portal:v1

img

img

3) 更新 yaml 文件

[root@k8s-master01 microservic-test]# kubectl apply -f k8s/portal.yaml

4) 查看 pod 状态

[root@k8s-master01 microservic-test]# kubectl get pod -n ms |grep portal

看到如下 running 说明 pod 运行正常:

portal-6f5cbb495f-fndrj    1/1     Running   0          78s

5)配置 hosts 文件

要在自己电脑找到 hosts 文件,再增加一行如下内容:

192.168.20.204 portal.ctnrs.com

6) 查看 portal 是否注册到 eureka 中

在浏览器访问 eureka.ctnrs.com 可看到 portal 服务已经注册到 eureka 了

image-20230829222300464

7) 访问前端页面

在浏览器访问 portal.ctnrs.com

可看到如下页面:

img

7.1.3 k8s 中部署订单 order 服务

1)构建镜像

[root@k8s-master01 microservic-test]# cd order-service/order-service-biz/
[root@k8s-master01 order-service-biz]# docker build -t 192.168.20.206/microservice/order:v1 .
[root@k8s-master01 order-service-biz]# docker push 192.168.20.206/microservice/order:v1

2)部署服务

[root@k8s-master01 microservic-test]# vim k8s/order.yaml
[root@k8s-master01 microservic-test]# cat k8s/order.yaml |grep image\:
        image: 192.168.20.206/microservice/order:v1

修改 order.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/order:v1

3) 更新 yaml 文件

[root@k8s-master01 microservic-test]# kubectl apply -f k8s/order.yaml

4) 查看 pod 状态

[root@k8s-master01 microservic-test]# kubectl get pod -n ms |grep order

看到如下 running 说明 pod 运行正常:

order-cd8585dcc-wjnv8      1/1     Running   0          69s

7.1.4 k8s 中部署产品 product 服务

1) 构建镜像

[root@k8s-master01 microservic-test]# cd product-service/product-service-biz/
[root@k8s-master01 product-service-biz]# docker build -t 192.168.20.206/microservice/product:v1 .
[root@k8s-master01 product-service-biz]# docker push 192.168.20.206/microservice/product:v1

2) 部署服务

[root@k8s-master01 microservic-test]# cat k8s/product.yaml |grep image\:
        image: 192.168.20.206/microservice/product:v1

修改 product.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/product:v1

img

3) 更新 yaml 文件

[root@k8s-master01 microservic-test]# kubectl apply -f k8s/product.yaml

4) 查看 pod 状态

[root@k8s-master01 microservic-test]# kubectl get pod -n ms |grep product
product-5694bc6b9c-th7x4   1/1     Running   0          3m

7.1.5 k8s 中部署库存 stock 服务

1) 构建镜像

[root@k8s-master01 microservic-test]# cd stock-service/stock-service-biz/
[root@k8s-master01 stock-service-biz]# docker build -t 192.168.20.206/microservice/stock:v1 .
[root@k8s-master01 stock-service-biz]# docker push 192.168.20.206/microservice/stock:v1

2) 部署服务

[root@k8s-master01 microservic-test]# vim k8s/stock.yaml 
[root@k8s-master01 microservic-test]# cat k8s/stock.yaml |grep image\:
        image: 192.168.20.206/microservice/stock:v1

修改 stock.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/stock:v1img

3) 更新 yaml 文件

[root@k8s-master01 microservic-test]# kubectl apply -f k8s/stock.yaml 

4)查看 pod 状态

[root@k8s-master01 microservic-test]# kubectl get pod -n ms |grep stock
stock-6956d894fb-bpsc6     1/1     Running   0          79s

img

上面都部署成功之后,在浏览器访问 eureka.ctnrs.com 可看到 gateway、portal、product、 order、stock 等服务都已经注册到 eureka 了

在浏览器访问 portal.ctnrs.com 登陆前端页面,可看到如下内容:

img

点击查询商品服务,出现如下:

img

img

选择手机,点击购买,然后再点击查询订单服务,出现如下:

不管是啥代码:

JAVA: mvn 编译,生成一个.jar 或者.war 的文件 Go:go build 编译,生成一个二进制文件 Python:app.py

把.jar 或者.war 结尾的文件、二进制文件、app.py 都可以基于 dockerfile 文件封装到镜像里。

7.2 全链路监控基本介绍及应用场景

1. 数据采集:系统能够主动或被动地收集各种数据和指标,如日志、事件、传感器数据等。

​ 全链路监控系统是一种用于监测和管理复杂业务流程的系统。它可以跟踪和监控整个业务流程中涉及的各个环节和组件,包括硬件设备、软件应用、网络连接以及数据传输等。

​ 全链路监控系统的目标是实时监控整个业务链路,以便及时发现和解决任何潜在的问题或故障。它能够收集和分析各种指标和数据,如性能指标、延迟时间、错误率等,以便进行实时监控和报警。此外,它还可以提供实时的可视化展示,帮助用户了解业务流程的状态和性能。

​ 全链路监控系统通常由以下组件和功能构成:

2. 数据存储:收集到的数据会被存储在数据库或数据仓库中,以供后续的分析和查询使用。

3. 数据分析:系统使用各种分析技术和算法对收集到的数据进行处理和分析,以提取有用的信息和指标。

4. 实时监控:系统可以实时监控业务链路中的各个环节和组件,并提供实时的性能指标和状态信息。

5. 报警和通知:系统能够根据预设的阈值和规则,发出警报和通知,以便用户能够及时采取行动。

6. 可视化展示:系统能够将监控数据和指标以图表、仪表盘等形式进行可视化展示,以便用户能够直观地了解业务流程的状态和性能。

7. **故障排查和问题解决:系统能够帮助用户定位和解决故障和问题,通过提供详细的日志和事件信息、故障分析和排查工具等。

7.3 常见的链路监控工具及对比分析?

7.3.1 Zipkin

zipkin 的 github 地址:

https://github.com/openzipkin/zipkin

img

img

​ Zipkin 是一种开源的分布式跟踪系统,用于帮助开发人员诊断和解决分布式系统中的延迟问题。它可以跟踪和监控请求在分布式系统中的流转路径和时间,帮助用户了解请求的处理过程、各个组件之间的依赖关系以及延迟出现的原因。

​ Zipkin 的基本原理是通过在分布式系统中的各个节点上注入并传递一个唯一的跟踪标识(Trace ID)来实现跟踪。当一个请求进入系统时,Zipkin 会为该请求生成一个唯一的 Trace ID,并将 Trace ID 注入到请求的上下文中。然后,在请求处理过程中,各个节点会将自己的处理信息和时间戳等数据记录下来,并将这些数据发送给 Zipkin 服务器进行存储和分析。

上下文是什么?

​ 在分布式系统中,上下文是指在一个请求或操作中携带的相关信息,用于在不同的组件或服务之间传递和共享。上下文包含了请求的关键参数、标识符和其他有关请求的元数据。

具体来说,上下文可以包括以下内容:

1、Trace ID:用于唯一标识一个跟踪请求的 ID。在分布式跟踪系统中,Trace ID 在整个请求处理过程中传递,用于关联和聚合与该请求相关的跟踪数据。

2、Span ID:表示一个操作或服务的唯一标识符。在分布式跟踪系统中,Span ID 用于标识一个请求经过的各个组件或服务的操作。

3、父 Span ID:指示当前操作或服务的上一级操作或服务的 Span ID。通过父子关系,可以构建出一个请求的处理流程树。

4、请求参数:包括请求的参数、头部信息、身份验证令牌等。这些信息可以在分布式系统中的各个组件之间传递,以便保持请求的一致性和正确性。

5、时间戳:记录了请求的发起时间、处理时间和结束时间等关键时间点,用于计算延迟和性能指标。

​ 上下文的目的是将请求的相关信息传递给分布式系统中的各个组件,以确保请求在整个处理过程中的一致性和可追踪性。通过将上下文信息注入到请求中,并在各个组件之间传递,可以将整个请求的处理过程关联起来,帮助跟踪和监控请求的路径、性能和延迟问题。

​ 在分布式跟踪系统中,注入上下文通常是通过添加特定的标识符或头部信息到请求的数据中实现的。各个组件可以读取这些信息,并将其传递给下一个组件,以便在整个请求链路中保持上下文的连贯性。

Zipkin 的核心组件包括:

1、Zipkin 服务器:负责接收、存储和处理跟踪数据的服务器。它提供了一个 Web 界面,可以用于查询和可视化分布式跟踪数据。

2、跟踪数据收集器(Collector):负责收集各个节点发送的跟踪数据,并将其发送给 Zipkin 服务器。

3、数据存储:跟踪数据可以存储在不同的存储后端,如 MySQL、Elasticsearch 等,以便进行后续的查询和分析。

4、跟踪数据的注入和传递机制:通过在请求上下文中注入唯一的 Trace ID,并将 Trace ID 在分布式系统中进行传递,实现对请求的完整跟踪。

​ 使用 Zipkin,开发人员可以通过 Web 界面查询和可视化分布式跟踪数据,包括请求的时间线、依赖关系、各个组件的响应时间等。这使得开发人员能够快速定位和诊断延迟问题的根本原因,优化系统的性能和可靠性。

​ Zipkin 广泛应用于微服务架构和分布式系统中,特别是在云原生应用开发和容器化部署中。它提供了一个强大的工具来监控和调试复杂的请求流转过程,帮助开发人员改进系统的性能和用户体验。

7.3.2 Skywalking

github: https://github.com/apache/incubator-skywalking

img

​ Apache SkyWalking 是一款开源的分布式系统性能监控和诊断工具。它可以帮助开发人员实时监测和分析分布式系统中的性能指标、请求流程以及各个组件之间的依赖关系,以提供全面的系统可观测性和故障排查能力。

SkyWalking 的主要特性和功能包括:

1、分布式跟踪:SkyWalking 能够通过跟踪请求中的唯一标识符(Trace ID)来追踪请求在分布式系统中的流转路径和时间。它可以可视化展示请求的处理过程,包括调用链路、各个组件的响应时间和错误信息等。

2、性能指标监控:SkyWalking 可以监控和收集分布式系统中各个组件的性能指标,如吞吐量、延迟、错误率等。它提供了丰富的性能指标展示和实时告警功能,帮助用户实时了解系统的运行状况。

3、自动化依赖关系发现:SkyWalking 能够自动发现和识别分布式系统中各个组件之间的依赖关系。它可以生成分布式拓扑图,展示系统的架构和组件之间的关系,帮助用户理解系统的结构和拓扑。

4、分布式日志追踪:SkyWalking 可以与分布式日志系统集成,帮助用户通过日志数据来诊断和分析问题。它可以将分布式跟踪数据和日志数据进行关联,提供全面的故障排查能力。

5、插件化架构:SkyWalking 采用插件化架构,可以方便地集成和扩展各种数据源和监控方式。它支持多种编程语言和框架,如 Java、.NET、Node.js、Spring Cloud、Kubernetes 等。

​ 通过使用 SkyWalking,开发人员可以快速定位和诊断分布式系统中的性能问题和故障。它提供了直观的可视化界面和丰富的监控指标,帮助用户实时监控系统的运行情况,并提供深入的分析和故障排查能力,以提高系统的性能、稳定性和可靠性。同时,SkyWalking 还支持与其他监控和管理工具的集成,提供更全面的系统监控和管理解决方案。

7.3.3 Pinpoint

github: https://github.com/naver/pinpoint

img

img

​ Pinpoint 是一款开源的分布式应用性能监控工具,用于帮助开发人员诊断和解决分布式应用系统中的性能问题。它可以实时监控应用程序的性能指标、请求流程以及各个组件之间的调用关系,以提供全面的系统可观测性和性能优化能力。

Pinpoint 的主要特性和功能包括:

1、分布式跟踪:Pinpoint 能够跟踪请求在分布式应用系统中的流转路径和时间。它通过在请求中注入一个唯一的跟踪标识符(Trace ID),来实现对请求的完整跟踪。开发人员可以通过可视化界面查看请求的调用链路、各个组件的响应时间和错误信息等。

2、应用性能监控:Pinpoint 可以监控和收集应用程序的性能指标,包括 CPU 使用率、内存使用 量、数据库访问性能等。它提供了丰富的性能指标展示和告警功能,帮助用户及时发现和解决性能瓶颈和问题。

3、实时可视化:Pinpoint 提供实时的可视化展示,将跟踪数据和性能指标以图表和拓扑图的形式展示出来。这使得开发人员能够直观地了解系统的运行状况和性能情况,快速定位和分析问题。

4、错误监控和告警:Pinpoint 可以监控应用程序中的错误和异常情况,并提供告警功能。当系统出现错误时,Pinpoint 会发出警报,以便开发人员能够及时采取措施解决问题。

5、依赖关系分析:Pinpoint 能够分析和展示应用程序中各个组件之间的依赖关系。它可以生成组件之间的调用关系图,帮助用户了解系统的架构和组件之间的交互情况。

6、数据存储和查询:Pinpoint 提供了数据存储和查询功能,可以将监控数据存储在数据库中,并支持根据时间、请求 ID 等条件进行查询和分析。

Zipkin、Pinpoint 和 SkyWalking 区别:

1、Zipkin:

语言支持:Java、Python、Ruby、Node.js、Go 等。

框架支持:Spring Boot、Spring Cloud、gRPC、Apache HTTP Client 等。

Zipkin 主要适用于 Java 生态系统和一些主流的编程语言和框架,广泛应用于微服务架构和分布式系统中。

2、Pinpoint: 语言支持:Java。

框架支持:Spring、Spring Boot、Dubbo 等。

Pinpoint 主要专注于 Java 语言和相关框架,针对 Java 应用程序提供了深入的监控和诊断能力。

3、SkyWalking:

语言支持:Java、.NET、Node.js、Go、Python、PHP、Ruby 等。框架支持:Spring、Spring Boot、gRPC、Apache Dubbo 等。

SkyWalking 是一款多语言支持的分布式跟踪和性能监控工具,适用于多种编程语言和框架的分布式系统。

区别和适用场景:

1、Zipkin:Zipkin 是一个轻量级的分布式跟踪系统,适合于 Java 和其他主流语言的微服务架构。它简单易用,提供了基本的分布式跟踪功能,适合初学者和小规模系统的监控需求。

2、Pinpoint:Pinpoint 是一个专注于 Java 应用程序的性能监控和诊断工具。它提供了深入的监控能力,包括分布式跟踪、性能指标、错误监控等。适用于 Java 生态系统中的大规模分布式应用程序。

3、SkyWalking:SkyWalking 是一个支持多语言和多框架的分布式跟踪和性能监控工具。它提供了丰富的功能,包括分布式跟踪、性能指标监控、依赖关系分析等。适用于多语言和多框架的分布式系统,具有较好的扩展性和灵活性。

​ 选择适合的工具取决于具体的技术栈和应用场景。如果你的应用程序是基于 Java 生态系统构建的,且对性能监控的需求较高,可以考虑使用 Pinpoint。如果需要支持多语言和多框架,并且对系统的可观测性和可扩展性有较高要求,可以选择 SkyWalking。而如果只需要简单的分布式跟踪功能,并且希望快速上手,可以尝试使用 Zipkin。

7.4 安装 Pinpoint:初始化实验环境

新创建一台虚拟机安装 pinpoint,配置如下:

主机名 ip 配置
pinpoint 192.168.1.65 4vCPU/6G 内存/60G 硬盘

7.4.1 配置静态 IP

把虚拟机或者物理机配置成静态 ip 地址,这样机器重新启动后 ip 地址也不会发生改变。在 harbor 节点配置网络

修改/etc/sysconfig/network-scripts/ifcfg-ens33 文件,变成如下:

TYPE=Ethernet PROXY_METHOD=none BROWSER_ONLY=no

BOOTPROTO=static IPADDR=192.168.1.65 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 DNS1=192.168.1.2 DEFROUTE=yes IPV4_FAILURE_FATAL=no IPV6INIT=yes IPV6_AUTOCONF=yes IPV6_DEFROUTE=yes IPV6_FAILURE_FATAL=no

IPV6_ADDR_GEN_MODE=stable-privacy NAME=ens33

DEVICE=ens33 ONBOOT=yes

修改配置文件之后需要重启网络服务才能使配置生效,重启网络服务命令如下:

service network restart

7.4.2 修改 yum 源

下面的步骤在 pinpoint 节点操作 #添加 docker 需要的 yum 源 yum install yum-utils

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-

ce/linux/centos/docker-ce.repo

安装软件包

yum -y install wget net-tools nfs-utils lrzsz gcc gcc-c++ make cmake libxml2-devel openssl-devel curl curl-devel unzip sudo ntp libaio-devel wget vim ncurses-devel autoconf automake zlib-devel python-devel epel-release openssh-server socat ipvsadm conntrack ntpdate yum-utils device-mapper-persistent-data lvm2 telnet

7.4.3 配置防火墙

关闭 firewalld 防火墙, centos7 系统默认使用的是 firewalld 防火墙,停止 firewalld 防火墙,并禁用这个服务。

systemctl stop firewalld && systemctl disable firewalld

7.4.4 时间同步

ntpdate cn.pool.ntp.org

编辑计划任务,每分钟做一次同步

crontab -e

* * * * * /usr/sbin/ntpdate cn.pool.ntp.org

7.4.5 关闭 selinux

关闭 selinux,设置永久关闭,这样重启机器 selinux 也处于关闭状态可用下面方式修改:

sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config

上面文件修改之后,需要重启虚拟机,如果测试环境可以用如下命令强制重启:

reboot -f

注:生产环境不要 reboot -f,要正常关机重启查看 selinux 是否修改成功

重启之后登录到机器上用如下命令:

getenforce

显示 Disabled 说明 selinux 已经处于关闭状态

7.4.6 修改内核参数

modprobe br_netfilter

cat < /etc/sysctl.d/k8s.conf net.bridge.bridge-nf-call-ip6tables = 1

net.bridge.bridge-nf-call-iptables = 1

net.ipv4.ip_forward = 1 EOF

sysctl -p /etc/sysctl.d/k8s.conf

7.4.7 修改主机名

在 192.168.1.65 上:

hostnamectl set-hostname pinpoint && bash

7.5 安装 Pinpoint:安装 docker

7.5.1 安装 docker

yum install -y docker-ce-19.03.7-3.el7

systemctl enable docker && systemctl start docker

#查看 docker 状态,如果状态是 active(running),说明 docker 是正常运行状态

systemctl status docker

7.5.2 修改 docker 配置文件

cat > /etc/docker/daemon.json <<EOF

{

"registry-mirrors":["https://rsbud4vc.mirror.aliyuncs.com","https://registry.docker- cn.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","http://hub- mirror.c.163.com","http://qtid6917.mirror.aliyuncs.com"]

} EOF

7.5.3 重启 docker 使配置生效

systemctl restart docker && systemctl status docker

7.6 安装 pinpoint 服务

#把 pinpoint-docker-2.0.1.zip 上传到 pinpoint 机器上,unzip 解压

unzip pinpoint-docker-2.0.1.zip 
cd pinpoint-docker-2.0.1
修改 docker-compose.yml 文件的 version 版本,如 2.2,变成自己支持的版本 version: "3.6" 变成 version: "2.2"

#拉取镜像

yum install docker-compose -y

## 拉取安装 pinpoint 服务需要的镜像,把 pinpoint-image.tar.gz 镜像压缩包上传到 pinpoint 机器上,手动解压:

[root@pinpoint ~]# docker load -i pinpoint-image.tar.gz

#通过下面命令也可以把安装 pinpoint 需要的镜像在线获取,但是速度较慢,可以通过上面手动解压方式拉取

docker-compose pull #启动服务

docker-compose up -d #查看对应的服务是否启动

docker ps | grep pinpoint

#找到 pinpoint-web,可看到在宿主机绑定的端口是 8079,在浏览器访问 ip:8079 即可访问 pinpoint 的 web ui 界面

img

7.7 部署 Springcloud 开发的电商平台:集成 Pinpoint 链路监控

把 microservic-test-dev1.zip 上传到 k8s 的控制节点 上,解压:

unzip microservic-test-dev1.zip

7.7.1 修改源代码,更改数据库连接地址

1) 修改库存数据库

[root@k8s-master01 springcloud]# vim microservic-test-dev1/stock-service/stock-service-biz/src/main/resources/application-fat.yml 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/stock-service/stock-service-biz/src/main/resources/application-fat.yml
spring:
  datasource:
    url: jdbc:mysql://192.168.20.201:3306/tb_stock?characterEncoding=utf-8
    username: root
    password: 111111
    driver-class-name: com.mysql.jdbc.Driver

eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka-0.eureka.ms:8888/eureka,http://eureka-1.eureka.ms:8888/eureka,http://eureka-2.eureka.ms:8888/eureka
    url: jdbc:mysql://192.168.20.201:3306/tb_stock?characterEncoding=utf-8 #变成自己的 mysql 数据库所在机器的地址

2) 修改产品数据库

[root@k8s-master01 springcloud]# vim microservic-test-dev1/product-service/product-service-biz/src/main/resources/application-fat.yml 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/product-service/product-service-biz/src/main/resources/application-fat.yml
spring:
  datasource:
    url: jdbc:mysql://192.168.20.201:3306/tb_product?characterEncoding=utf-8
    username: root
    password: 111111
    driver-class-name: com.mysql.jdbc.Driver

eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka-0.eureka.ms:8888/eureka,http://eureka-1.eureka.ms:8888/eureka,http://eureka-2.eureka.ms:8888/eureka
    url: jdbc:mysql://192.168.20.201:3306/tb_product?characterEncoding=utf-8 #变成自己的数据库地址

3) 修改订单数据库

[root@k8s-master01 springcloud]# vim microservic-test-dev1/order-service/order-service-biz/src/main/resources/application-fat.yml 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/order-service/order-service-biz/src/main/resources/application-fat.yml
spring:
  datasource:
    url: jdbc:mysql://192.168.20.201:3306/tb_order?characterEncoding=utf-8
    username: root
    password: 111111
    driver-class-name: com.mysql.jdbc.Driver

eureka:
  instance:
    prefer-ip-address: true
  client:
    register-with-eureka: true
    fetch-registry: true
    service-url:
      defaultZone: http://eureka-0.eureka.ms:8888/eureka,http://eureka-1.eureka.ms:8888/eureka,http://eureka-2.eureka.ms:8888/eureka
    url: jdbc:mysql://192.168.20.201:3306/tb_order?characterEncoding=utf-8 #变成自己的数据库地址

#修改配置,指定 pinpoint 服务端

[root@k8s-master01 springcloud]# vim microservic-test-dev1/product-service/product-service-biz/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/product-service/product-service-biz/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

#这个是安装 pinpoint 服务的 ip 地址

cd /root/microservic-test-dev1/order-service/order-service-biz/pinpoint打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

[root@k8s-master01 springcloud]# vim microservic-test-dev1/order-service/order-service-biz/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/order-service/order-service-biz/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

cd /root/microservic-test-dev1/stock-service/stock-service-biz/pinpoint打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

[root@k8s-master01 springcloud]# vim microservic-test-dev1/stock-service/stock-service-biz/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/stock-service/stock-service-biz/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

cd /root/microservic-test-dev1/portal-service/pinpoint打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

[root@k8s-master01 springcloud]# vim microservic-test-dev1/portal-service/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/portal-service/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

cd /root/microservic-test-dev1/gateway-service/pinpoint打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

[root@k8s-master01 springcloud]# vim microservic-test-dev1/gateway-service/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/gateway-service/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

cd /root/microservic-test-dev1/eureka-service/pinpoint打开 pinpoint.config,需要修改的地方如下: profiler.collector.ip=192.168.20.202

[root@k8s-master01 springcloud]# vim microservic-test-dev1/eureka-service/pinpoint/pinpoint.config 
[root@k8s-master01 springcloud]# cat microservic-test-dev1/eureka-service/pinpoint/pinpoint.config |grep ^profiler.collector.ip
profiler.collector.ip=192.168.20.202

#上面修改的 ip 是部署 pinpoint 的机器的 ip 地址,也就是pinpoint 的服务端

7.7.2 通过 Maven 编译、打包、构建代码在 k8s 的控制节点操作

修改源代码之后回到/root/springcloud/microservic-test-dev1 目录下执行如下命令:

[root@k8s-master01 microservic-test-dev1]# pwd
/root/springcloud/microservic-test-dev1
[root@k8s-master01 microservic-test-dev1]# mvn clean package -D maven.test.skip=true

#看到如下,说明代码已经打包完成

img

7.7.3 部署带 pinpoint agent 端的 eureka 服务步骤省略,参考视频

[root@xuegod63 ~]# cd microservic-test-dev1/

[root@xuegod63 microservic-test-dev1]# cd eureka-service/

[root@k8s-master01 eureka-service]# pwd
/root/springcloud/microservic-test-dev1/eureka-service

[root@k8s-master01 eureka-service]# docker build -t=192.168.20.206/microservice/eureka:v2 .

[root@k8s-master01 eureka-service]#docker push 192.168.20.206/microservice/eureka:v2

7.7.4 部署带 pinpoint agent 端的产品服务

[root@k8s-master01 product-service-biz]# pwd
/root/springcloud/microservic-test-dev1/product-service/product-service-biz

$ docker build -t 192.168.20.206/microservice/product:v2 . 
$ docker push 192.168.20.206/microservice/product:v2

修改 product.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/product:v2

[root@k8s-master01 microservic-test-dev1]# vim k8s/product.yaml 
[root@k8s-master01 microservic-test-dev1]# cat k8s/product.yaml |grep image\:
        image: 192.168.20.206/microservice/product:v2

更新 yaml 文件

[root@k8s-master01 microservic-test-dev1]# pwd
/root/springcloud/microservic-test-dev1

$ kubectl delete -f k8s/product.yaml 
$ kubectl apply -f k8s/product.yaml 

查看 pod 状态

$  kubectl get pod -n ms |grep product
product-f9b795844-cx879   1/1     Running       0              10m

看到如上 running 说明 pod 运行正常:

http://192.168.2.202:8079/main

img

上面部署成功之后,登陆 pinpoint web 界面,可看到有个新的应用是 ms-product

7.7.5 部署带 pinpoint agent 端的订单服务

[root@k8s-master01 order-service-biz]# pwd
/root/springcloud/microservic-test-dev1/order-service/order-service-biz

$ docker build -t 192.168.20.206/microservice/order:v2 .
$ docker push 192.168.20.206/microservice/order:v2

修改 order.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/order:v2

[root@k8s-master01 microservic-test-dev1]# vim k8s/order.yaml
[root@k8s-master01 microservic-test-dev1]# cat k8s/order.yaml |grep image\:
        image: 192.168.20.206/microservice/order:v2

更新 yaml 文件

$ kubectl delete -f k8s/order.yaml
$ kubectl apply -f k8s/order.yaml

查看 pod 状态

[root@k8s-master01 microservic-test-dev1]# kubectl get pod -n ms |grep order
order-7897d686b4-hfcqr    1/1     Running       0              13m

看到如上 running 说明 pod 运行正常:

上面部署成功之后,登陆 pinpoint web 界面,可看到有个新的应用是 ms-order

img

7.7.6 部署带 pinpoint agent 端的 stock 服务

$ pwd
/root/springcloud/microservic-test-dev1/stock-service/stock-service-biz

$ docker build -t 192.168.20.206/microservice/stock:v2 .
$ docker push  192.168.20.206/microservice/stock:v2

修改 stock.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/stock:v2

[root@k8s-master01 microservic-test-dev1]# vim k8s/stock.yaml 
[root@k8s-master01 microservic-test-dev1]# cat k8s/stock.yaml |grep image\:
        image: 192.168.20.206/microservice/stock:v2

更新 yaml 文件

$ kubectl delete -f k8s/stock.yaml 
$ kubectl apply -f k8s/stock.yaml 

查看 pod 状态

[root@k8s-master01 microservic-test-dev1]# kubectl get pod -n ms |grep stock
stock-fcf9b9cbf-8blgn     1/1     Running       0              15m

看到如上 running 说明 pod 运行正常:

img

上面部署成功之后,登陆 pinpoint web 界面,可看到有个新的应用是 ms-stock

7.7.7 部署带 pinpoint agent 端的 portal 服务

[root@k8s-master01 portal-service]# pwd
/root/springcloud/microservic-test-dev1/portal-service

$ docker build -t 192.168.20.206/microservice/portal:v2 .
$ docker push 192.168.20.206/microservice/portal:v2

修改 portal.yaml 文件,把镜像变成 image: 192.168.1.62/microservice/portal:v2

[root@k8s-master01 microservic-test-dev1]# vim k8s/portal.yaml
[root@k8s-master01 microservic-test-dev1]# cat k8s/portal.yaml |grep image\:
        image: 192.168.20.206/microservice/portal:v2


[root@k8s-master01 microservic-test-dev1]# cat k8s/portal.yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: portal 
  namespace: ms 
spec:
  ingressClassName: nginx
  rules:
    - host: portal.ctnrs.com 
      http:
        paths:
        - path: /
          pathType:  Prefix
          backend:
            service: 
              name: portal 
              port: 
                number: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: portal
  namespace: ms
spec:
  ports:
  - port: 8080
    name: portal 
  selector:
    project: ms
    app: portal
---
apiVersion: apps/v1
kind: Deployment 
metadata:
  name: portal
  namespace: ms 
spec:
  replicas: 1
  selector:
    matchLabels:
      project: ms
      app: portal
  template:
    metadata:
      labels:
        project: ms 
        app: portal
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: portal
        image: 192.168.20.206/microservice/portal:v2
        imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 8080 
        readinessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 8080
          initialDelaySeconds: 60
          periodSeconds: 10

更新 yaml 文件

$ kubectl delete -f k8s/portal.yaml
$ kubectl apply -f k8s/portal.yaml

查看 pod 状态

[root@k8s-master01 microservic-test-dev1]# kubectl get pod -n ms |grep portal
portal-5c8fc49558-64wb6   1/1     Running       0              18m

看到如上 running 说明 pod 运行正常:

上面部署成功之后,登陆 pinpoint web 界面,可看到有个新的应用是 ms-portal

img

7.7.8 部署带 pinpoint agent 端的网关服务

1) 构建镜像

$ pwd
/root/springcloud/microservic-test-dev1/gateway-service

$ docker build -t 192.168.20.206/microservice/gateway:v2 . 
$ docker push 192.168.20.206/microservice/gateway:v2

2)部署服务

修改 gateway.yaml 文件,把镜像变成 image: 192.168.20.206/microservice/gateway:v2

[root@k8s-master01 microservic-test-dev1]# vim k8s/gateway.yaml 
[root@k8s-master01 microservic-test-dev1]# cat k8s/gateway.yaml|grep image\:
        image: 192.168.20.206/microservice/gateway:v2


[root@k8s-master01 microservic-test-dev1]# cat k8s/gateway.yaml
---
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: gateway 
  namespace: ms 
spec:
  ingressClassName: nginx
  rules:
    - host: gateway.ctnrs.com 
      http:
        paths:
        - path: /
          pathType:  Prefix
          backend:
            service: 
              name: gateway
              port: 
               number: 9999
---
apiVersion: v1
kind: Service
metadata:
  name: gateway
  namespace: ms
spec:
  ports:
  - port: 9999 
    name: gateway
  selector:
    project: ms
    app: gateway
---
apiVersion: apps/v1
kind: Deployment 
metadata:
  name: gateway
  namespace: ms 
spec:
  replicas: 2
  selector:
    matchLabels:
      project: ms
      app: gateway
  template:
    metadata:
      labels:
        project: ms 
        app: gateway
    spec:
      imagePullSecrets:
      - name: registry-pull-secret
      containers:
      - name: gateway
        image: 192.168.20.206/microservice/gateway:v2
        imagePullPolicy: Always
        ports:
          - protocol: TCP
            containerPort: 9999 
        readinessProbe:
          tcpSocket:
            port: 9999
          initialDelaySeconds: 60
          periodSeconds: 10
        livenessProbe:
          tcpSocket:
            port: 9999
          initialDelaySeconds: 60
          periodSeconds: 10

3)更新 yaml 文件

$ kubectl delete -f k8s/gateway.yaml 
$ kubectl apply -f k8s/gateway.yaml 

4)查看 pod 状态

$ kubectl get pod -n ms |grep gateway

5)看到如下 running 说明 pod 运行正常

gateway-fc5c58bcb-zvpfs   1/1     Running       3 (27m ago)    19h
gateway-fc5c58bcb-zwgcx   1/1     Running       0              20m

6)配置 hosts 文件

gateway 的域名是 gateway.ctnrs.com,需要在电脑找到 hosts 文件,再增加一行如下:

192.168.20.204 gateway.ctnrs.com

在浏览器访问 eureka.ctnrs.com

可看到 GATEWAY-SERVICE 已经注册到 eureka 了:

img

#访问前端页面 http://portal.ctnrs.com/

img

img

img

7.8 Pinpoint web 界面使用说明

上面都部署好之后,可以在 pinpoint 的 web 页面查看服务之间的调用关系:

img

img

在上图可看到右侧有绿色的点,我们把鼠标放上去,把绿色点的圈住

img

圈住绿色的点之后出现如下界面,通过下面可看到代码级别的监控:

img

点击上面的 Path,就可以看到具体的代码之间的调用了

img

总结:

7.1 Springcloud 开发的电商平台部署到 k8s 集群

7.2 全链路监控基本介绍及应用场景

7.3 常见的全链路监控工具及对比分析

7.4 安装 Pinpoint:初始化实验环境

7.5 安装 Pinpoint:安装 docker

7.6 安装 pinpoint 服务

7.7 部署 Springcloud 开发的电商平台:集成 Pinpoint 链路监控

7.8 pinpoint web 界面使用说明