写点什么

内网场景 Dubbo 微服务接入观测云

作者:观测云
  • 2022 年 8 月 22 日
    上海
  • 本文字数:3798 字

    阅读完需:约 12 分钟

简介

有的项目,用户群体是公司内部人员,或者集团公司人员。为了安全,这些项目部署在自建机房,员工通过内网或者 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 采集器。


cd /usr/local/datakit/conf.d/proxycp proxy.conf.sample proxy.conf
复制代码


编辑 /usr/local/datakit/conf.d/datakit.conf 文件,修改 http_api 的 listen 的值是 0.0.0.0:9529,确保其它主机可以正常访问这台主机的 9529 端口。



重启 DataKit。


systemctl restart datakit
复制代码


1.2 通过代理部署 DataKit
复制代码

登录 172.16.0.29 主机,执行如下命令安装 Datakit,这里 172.16.0.245 即是上步中安装的 DataKit 的主机 IP,此步骤即是通过 DataKit 代理来安装的,命令中使用到的 token 与上面提到的 token 相同。


export HTTPS_PROXY=http://172.16.0.245:9530;  DK_DATAWAY=https://openway.guance.com?token=tkn_9a1111123412341234123412341113bb bash -c "$(curl -L https://static.guance.com/datakit/install.sh)"
复制代码


执行如下命令,测试是否能上报数据到观测云。


curl -x http://172.16.0.245:9530 -v -X POST https://openway.guance.com/v1/write/metrics?token=tkn_9a1111123412341234123412341113bb -d "proxy_test,name=test c=123i"
复制代码


返回 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 采集器。


cd /usr/local/datakit/conf.d/skywalkingcp skywalking.conf.sample skywalking.conf  
复制代码


重启 DataKit。


systemctl restart 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 服务。


cd /usr/local/df-demo/java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-provider -Dskywalking.collector.backend_service=localhost:13800 -jar provider.jar
复制代码


2.4 部署 consumer 微服务

上传 consumer.jar 到 172.16.0.52 主机的 /usr/local/df-demo/ 目录。启动 consumer 服务。


cd /usr/local/df-demo/java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-consumer -Dskywalking.collector.backend_service=localhost:13800 -jar consumer.jar
复制代码


2.5 部署 gateway 微服务

上传 gateway.jar 到 172.16.0.51 主机的 /usr/local/df-demo/ 目录。启动 gateway 服务。


cd /usr/local/df-demo/java -javaagent:agent/skywalking-agent.jar -Dskywalking.agent.service_name=dubbo-gateway -Dskywalking.collector.backend_service=localhost:13800 -jar gateway.jar
复制代码


步骤 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 文件,增加如下内容:


server {        listen       80;        #add_header Access-Control-Allow-Origin '*';        #add_header Access-Control-Allow-Headers Origin,X-Requested-Width,Content-Type,Accept;​        location / {            proxy_set_header   Host    $host:$server_port;            proxy_set_header   X-Real-IP   $remote_addr;            proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;            root   /usr/local/df-demo/dist;            index  index.html index.htm;        }        #location /nginx_status{        #        stub_status on;        #}​    }
复制代码


重新加载配置。


 nginx -s reload
复制代码


浏览器访问 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。


<dependency>    <groupId>org.apache.skywalking</groupId>    <artifactId>apm-toolkit-log4j-2.x</artifactId>    <version>8.11.0</version></dependency>
复制代码


4.2 开通日志采集器

登录 Provider 服务部署的服务器 172.16.0.53,复制 sample 文件。


cd /usr/local/datakit/conf.d/logcp logging.conf.sample logging.conf  
复制代码


编辑 logging.conf 文件,source 输入 log-dubbo-provider,这个名称在日志查询或者配置 pipeline 需要用到。logfiles 填待收集 log 文件路径。



重启 DataKit。


systemctl restart datakit
复制代码


4.3 pipeline

登录『观测云』,进入『日志』->『Pipelines』。点击『新建 Pipeline』,过滤选择开通日志采集器定义的 source 即 log-dubbo-provider 。定义解析规则输入如下内容,最后点击『保存』。


# 2022-08-03 10:55:50.818 [DubboServerHandler-172.16.0.29:20880-thread-2] INFO dubbo.service.StockAPIService - [decreaseStorage,21] - [TID: 1bc41dfa-3c2c-4917-9da7-0f48b4bcf4b7] - 用户ID:-4972683369271453960 ,发起流程审批:-1133938638​grok(_, "%{TIMESTAMP_ISO8601:time} %{NOTSPACE:thread_name} %{LOGLEVEL:status}%{SPACE}%{NOTSPACE:class_name} - \\[%{NOTSPACE:method_name},%{NUMBER:line}\\] - \\[TID: %{DATA:trace_id}\\] - %{GREEDYDATA:msg}")default_time(time)
复制代码



使用前端触发 provider 服务的调用,这样 provider 生成的日志即被 DataKit 采集后上报到观测云。登录『观测云』,进入『日志』模块的查看器,数据来源找到 log-dubbo-provider,点击一条日志进去,可看到 traceId 已做为 tag,后面在 APM 中通过这个 traceId 即可关联到日志,帮助我们快速定位问题 。



步骤 5:联动分析

通过上面的步骤,已经完成了 rum、apm 和日志的联动。登录『 观测云』->『用户访问监测』,点击 “dubbo-web”进入后点击“查看器”,选择“view”,查看页面调用情况,然后点击“route_change”进入,在 Fetch/XHR 标签可以查看到前端触发的接口调用情况,点击一条进入后,可查看火焰图、span 列表、服务调用关系,及关联的 provider 服务的日志。




用户头像

观测云

关注

还未添加个人签名 2021.02.08 加入

云时代的系统可观测平台

评论

发布
暂无评论
内网场景 Dubbo 微服务接入观测云_观测云_InfoQ写作社区