内网场景 Dubbo 微服务接入观测云
简介
有的项目,用户群体是公司内部人员,或者集团公司人员。为了安全,这些项目部署在自建机房,员工通过内网或者 VPN 访问。针对这种场景,观测云提供了离线部署的方案,即通过一台可以连外网的主机上部署 DataKit,开启 Proxy 采集器,内网的主机通过这台代理安装 DataKit,所有数据也是通过这台部署的 DataKit 上报到观测云。
下面使用微服务架构的项目来介绍如何接入观测云,项目是前后端分离的项目,前端使用 Vue 开发的,后端微服务使用 SpringBoot 结合 Dubbo 开发的,前端通过 Gateway 访问后端的服务。用户通过浏览器访问前端网站,用户点击界面上的按钮触发后端接口请求,请求被 Gateway 转发到 Consumer 微服务,Consumer 微服务处理请求过程中会调用 Provider 微服务,并记录日志,处理完成后把结果返回给浏览器,至此完成一次调用。
部署规划
整个项目有四个服务,分别部署在四台主机上,另外需要一台能连外网的主机,这台主机也与其它四台主机在同一内网。首先在有外网的主机上部署 DataKit,开通 Proxy 采集器,然后其它四台主机通过这台代理安装 DataKit,接下来在安装了 Nginx 的 Web 服务器上部署 Web 项目,这台 Web 主机的 9529 端口可以被内网的其它主机访问,最后部署 Gateway、Consumer、Provider 微服务,并开通 Skywalking 采集器。部署使用的服务可以在 https://github.com/stevenliu2020/vue3-dubbo 下载,里面包含 provider.jar、consumer.jar、gateway.jar 和 dist 目录,dist 即是 vue 项目。
下面是项目与主机的对应关系及整体部署架构图。
前置条件
Centos 7.9
安装 Nginx
安装 JDK
安装 Zookeeper
观测云账号
环境版本
本次示例使用版本如下:
DataKit 1.4.9
Nginx 1.22.0
Spring Cloud 3.1.1
Spring Boot 2.6.6
Dubbo 2.7.15
Zookeeper 3.7.1
Vue 3.2
JDK 1.8
操作步骤
步骤 1:部署 DataKit
1.1 在线部署 DataKit
登录『观测云』,进入『集成』模块,点击 『DataKit』->『Linux』,复制安装命令,在 172.16.0.245 主机上执行。注意安装命令中包含了 token,后续操作中会使用到这个 token。
安装完成后,执行如下命令开通 Proxy 采集器。
编辑 /usr/local/datakit/conf.d/datakit.conf 文件,修改 http_api 的 listen 的值是 0.0.0.0:9529,确保其它主机可以正常访问这台主机的 9529 端口。
重启 DataKit。
登录 172.16.0.29 主机,执行如下命令安装 Datakit,这里 172.16.0.245 即是上步中安装的 DataKit 的主机 IP,此步骤即是通过 DataKit 代理来安装的,命令中使用到的 token 与上面提到的 token 相同。
执行如下命令,测试是否能上报数据到观测云。
返回 200 表示数据上报成功。
使用同样的步骤在 172.16.0.51、172.16.0.52、172.16.0.53 主机上部署
DataKit,至此四台主机部署 DataKit 完成。
步骤 2:APM 接入
2.1 开启 Skywaking 采集器
登录 172.16.0.51 主机,复制 sample 文件,开通 skywalking 采集器。
重启 DataKit。
使用同样的操作,开通 172.16.0.52、172.16.0.53 主机上部署的 DataKit 的 Skywaking 采集器。
2.2 上传 Skywalking 探针
市面上 APM 工具比较多,由于微服务使用的是 dubbo 框架,这里推荐使用 skywalking。下载 apache-skywalking-java-agent-8.11.0,解压后把文件命名为 agent,上传到 172.16.0.51、172.16.0.52、172.16.0.53 主机的 /usr/local/df-demo/ 目录。注意 172.16.0.51 这台主机部署的是 gateway,需要把 agent\optional-plugins 目录下的 apm-spring-cloud-gateway-3.x-plugin-8.11.0.jar 和 apm-spring-webflux-5.x-plugin-8.11.0.jar 包 复制到 agent\plugins 目录下。
2.3 部署 provider 微服务
上传 provider.jar 到 172.16.0.53 主机的 /usr/local/df-demo/ 目录,确保 provider.jar 与 agent 文件夹相同目录。启动 provider 服务。
2.4 部署 consumer 微服务
上传 consumer.jar 到 172.16.0.52 主机的 /usr/local/df-demo/ 目录。启动 consumer 服务。
2.5 部署 gateway 微服务
上传 gateway.jar 到 172.16.0.51 主机的 /usr/local/df-demo/ 目录。启动 gateway 服务。
步骤 3:RUM 接入
上传 dist 目录 到 172.16.0.29 主机的 /usr/local/df-demo/ 目录,前端连接后端接口的 url 是在 dist\js\app.ec288764.js 文件内,这里后端 gateway 的 url 是 http://172.16.0.51:9000/api 。
登录『观测云』,进入『用户访问监测』模块,新建 dubbo-web 应用,复制下面命令。
修改 /etc/nginx/nginx.conf 文件,增加如下内容:
重新加载配置。
浏览器访问 http://172.16.0.29/ ,即可访问前端界面,点击界面按钮会调用后端接口。登录『观测云』,进入『用户访问监测』->『dubbo-web』,这里有许多功能可以用来对前端应用做性能分析。
步骤 4:日志接入
使用 Skywalking 的 apm-toolkit-log4j-2.x 包,可以把 skywalking 生成的 traceId 通过 log4j2 输出到日志中。DataKit 的 pipeline 可以提取日志中的 traceId 与链路关联。
4.1 添加依赖
在 provider 微服务的日志中输出 traceId,需要在 provider 的 pom.xml 文件中添加依赖,版本与 javaagent 使用的版本相同,这里是 8.11.0。
4.2 开通日志采集器
登录 Provider 服务部署的服务器 172.16.0.53,复制 sample 文件。
编辑 logging.conf 文件,source 输入 log-dubbo-provider,这个名称在日志查询或者配置 pipeline 需要用到。logfiles 填待收集 log 文件路径。
重启 DataKit。
4.3 pipeline
登录『观测云』,进入『日志』->『Pipelines』。点击『新建 Pipeline』,过滤选择开通日志采集器定义的 source 即 log-dubbo-provider 。定义解析规则输入如下内容,最后点击『保存』。
使用前端触发 provider 服务的调用,这样 provider 生成的日志即被 DataKit 采集后上报到观测云。登录『观测云』,进入『日志』模块的查看器,数据来源找到 log-dubbo-provider,点击一条日志进去,可看到 traceId 已做为 tag,后面在 APM 中通过这个 traceId 即可关联到日志,帮助我们快速定位问题 。
步骤 5:联动分析
通过上面的步骤,已经完成了 rum、apm 和日志的联动。登录『 观测云』->『用户访问监测』,点击 “dubbo-web”进入后点击“查看器”,选择“view”,查看页面调用情况,然后点击“route_change”进入,在 Fetch/XHR 标签可以查看到前端触发的接口调用情况,点击一条进入后,可查看火焰图、span 列表、服务调用关系,及关联的 provider 服务的日志。
评论