Skip to main content
Version: 当前版本

1. 概述

1.1 插件名称#

  • Logging-RabbitMQ Plugin

1.2 适用场景#

  • 通过rabbitmq收集网关http请求日志,通过其他应用消费rabbitmq消息,并且对日志进行分析。

1.3 插件功能#

Apache ShenYu 网关接收客户端请求,向服务端转发请求,并将服务端结果返回给客户端.网关可以记录下每次请求对应的详细信息,
列如: 请求时间、请求参数、请求路径、响应结果、响应状态码、耗时、上游IP、异常信息等待.
Logging-RabbitMQ插件便是记录访问日志并将访问日志发送到RabbitMQ集群的插件.

1.4 插件代码#

  • 核心模块 shenyu-plugin-logging-rabbitmq.

  • 核心类 org.apache.shenyu.plugin.logging.rabbitmq.LoggingRabbitmqPlugin

  • 核心类 org.apache.shenyu.plugin.logging.rabbitmq.client.RabbitmqLogCollectClient

1.5 添加自哪个shenyu版本#

  • ShenYu 2.5.0

1.6 技术方案#

  • 架构图

  • Apache ShenYu 网关里面进行 Logging 全程异步采集、异步发送

  • 日志平台通过消费rabbitmq集群中的日志进行落库,再使用GrafanaKibana或者其它可视化平台展示

2. 如何使用插件

2.1 插件使用流程图#

2.2 导入pom#

  • 在网关的 pom.xml 文件中添加 Logging-rabbitmq 的依赖。
 <!--shenyu logging-rabbitmq plugin start--><dependency>    <groupId>org.apache.shenyu</groupId>    <artifactId>shenyu-spring-boot-starter-plugin-logging-rabbitmq</artifactId>    <version>${project.version}</version></dependency><!--shenyu logging-rabbitmq plugin end-->

2.3 启用插件#

  • shenyu-admin--> 基础配置 --> 插件管理-> loggingRabbitMQ ,配置rabbitMQ参数,并设置为开启。

2.4 配置插件#

2.4.1 开启插件,并配置rabbitmq,配置如下#

  • 各个配置项说明如下:
配置项类型说明备注
hosttypeIP必须
porttype端口必须
usernameString用户名可选
passwordString密码可选
virtualHostString虚拟主机必须,默认/
exchangeTypeString交换机类型必须,默认direct
exchangeNameString交换机名称必须
queueNameString队列名称必须
routingKeyString路由键必须
durableBoolean持久化必须,默认true
exclusiveBoolean是否为排他队列必须,默认false
autoDeleteString自动删除必须,默认false
argsStringrabbitmq参数,例如:{"x-delay":"1000"},表示延时队列,单位ms可选
sampleRateString采样率,范围0~1,0:关闭,0.01:采集1%,1:采集100%可选,默认1,全部采集
maxResponseBodyIngeter最大响应体大小,超过阈值将不采集响应体可选,默认512KB
maxRequestBodyIngeter最大请求体大小,超过阈值将不采集请求体可选,默认512KB

除了host,port,virtualHost,exchangeType,exchangeName,queueName,routingKey,durable,exclusive,autoDelete其它都是可选

2.4.2 配置选择器和规则器#

另外有时候一个大网关集群对应多个应用程序(业务),不同应用程序(业务)对应不同的主题,相关隔离,这时候可以按选择器配置不同的主题(可选)和采样率(可选),配置项的含义如上表所示。
操作如下图:

2.5 Logging信息#

采集的access log的字段如下:

字段名称含义说明备注
clientIp客户端IP
timeLocal请求时间字符串, 格式:yyyy-MM-dd HH:mm:ss.SSS
method请求方法(不同rpc类型不一样,http类的为:get,post等待,rpc类的为接口名称)
requestHeader请求头(json格式)
responseHeader响应头(json格式)
queryParams请求查询参数
requestBody请求Body(二进制类型的body不会采集)
requestUri请求uri
responseBody响应body
responseContentLength响应body大小
rpcTyperpc类型
status响应码
upstreamIp上游(提供服务的程序)IP
upstreamResponseTime上游(提供服务的程序)响应请求的耗时(毫秒ms)
userAgent请求的用户代理
host请求的host
module请求的模块
path请求的路径path
traceId请求的链路追踪ID需要接入链路追踪插件,如skywalking,zipkin

2.6 示例#

2.6.1 通过RabbitMQ收集请求日志#

2.6.1.1 插件配置#

开启插件,并配置rabbitmq,配置如下:

2.6.1.2 选择器配置#

另外有时候一个大网关集群对应多个应用程序(业务),不同应用程序(业务)对应不同的主题,相关隔离,这时候可以按选择器配置不同的主题(可选)和采样率(可选),配置项的含义如上表所示。
操作如下图:

2.6.1.3 规则配置#

2.6.1.4 请求服务#

2.6.1.5 消费以及展示Logging#

由于各个日志平台有差异,如存储可用clickhouse,ElasticSearch等待,可视化有自研的或开源的Grafana、Kibana等。
Logging-RabbitMQ插件利用RabbitMQ进行生产和消费解耦,同时以json格式输出日志,消费和可视化需要用户结合自身情况选择不同的技术栈来实现。

2.6.1.6 面板展示#

用户可根据自身情况选择可视化实现。
下面展示下 Grafana 效果: Grafana沙盒体验

3. 如何禁用插件

  • shenyu-admin --> 基础配置 --> 插件管理-> loggingRabbitMQ ,设置为关闭。