1. 概述

1.1 插件名称

  • Logging-ElasticSearch

1.2 适用场景

  • 通过shenyu网关收集http请求日志,通过其他平台(Kibana)查询或者展示日志。

1.3 插件功能

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

1.4 插件代码

  • 核心模块 shenyu-plugin-logging-elasticsearch

  • 核心类 org.apache.shenyu.plugin.logging.elasticsearch.LoggingElasticSearchPlugin

  • 核心类 org.apache.shenyu.plugin.logging.elasticsearch.client.ElasticSearchLogCollectClient

1.5 添加自哪个shenyu版本

  • ShenYu 2.5.0

1.6 技术方案

  • 架构图

Logging-ElasticSearch插件 - 图1

2. 如何使用插件

2.1 插件使用流程图

Logging-ElasticSearch插件 - 图2

2.2 导入pom

  • 在shenyu-bootstrap模块的 pom.xml 文件中添加 Logging-ElasticSearch的依赖。
  1. <!--shenyu logging-elasticsearch plugin start-->
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-spring-boot-starter-plugin-logging-elasticsearch</artifactId>
  5. <version>${project.version}</version>
  6. </dependency>
  7. <!--shenyu logging-elasticsearch plugin end-->

2.3 启用插件

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

2.4 配置插件

2.4.1 开启插件,并配置elasticsearch,配置如下:

Logging-ElasticSearch插件 - 图3

  • 各个配置项说明如下:
配置项类型说明备注
config-itemtypedescriptionremarks
hostString主机名必须
portString端口号必须
sampleRateString采样率,范围0~1,0:关闭,0.01:采集1%,1:采集100%可选,默认1,全部采集
compressAlgString压缩算法,默认不压缩,目前支持LZ4压缩可选,默认不压缩
maxResponseBodyIngeter最大响应体大小,超过阈值将不采集响应体可选,默认512KB
maxRequestBodyIngeter最大请求体大小,超过阈值将不采集请求体可选,默认512KB

除了host、port其它都是可选,大部分情况下只需要配置这2项就可以了。

2.4.2 配置选择器和规则器

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

Logging-ElasticSearch插件 - 图4

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 通过ElasticSearch收集http请求日志

2.6.1.1 安装ElasticSearch

用户需要部署ElasticSearch服务来采集

2.6.1.1.1 windows 环境下安装ElasticSearch
  • 下载地址选择windows版本进行下载
  • 下载安装包后解压,进入bin目录下,双击执行elasticsearch.bat进行启动
  • 默认启动端口为 9200,访问 http://localhost:9200,验证是否成功

Logging-ElasticSearch插件 - 图5

2.6.1.1.2 macos 环境下安装ElasticSearch
  • 下载地址选择macos版本进行下载
  • 下载安装包后解压,进入bin目录下,在终端执行启动命令: ./elasticsearch
  • 默认启动端口为 9200,访问 http://localhost:9200,验证是否成功

Logging-ElasticSearch插件 - 图6

2.6.1.2 安装Kibana

2.6.1.2.1 windows 环境下安装Kibana
  • 下载地址选择windows版本进行下载
  • 下载安装包后解压,进入bin目录下,双击执行kibana.bat进行启动
  • 默认启动端口为 5601,访问 http://localhost:5601,验证是否成功(前提是ElasticSearch已打开)

Logging-ElasticSearch插件 - 图7

2.6.1.2.2 macos 环境下安装Kibana
  • 下载地址选择windows版本进行下载
  • 下载安装包后解压,进入bin目录下,在终端执行启动命令: ./kibana
  • 默认启动端口为 5601,访问 http://localhost:5601,验证是否成功(前提是ElasticSearch已打开)

Logging-ElasticSearch插件 - 图8

2.6.1.3 插件配置

Logging-ElasticSearch插件 - 图9

2.6.1.4 选择器和规则的配置

2.6.1.5 使用postman发起请求

Logging-ElasticSearch插件 - 图10

2.6.1.6 使用Kibana查询数据

Logging-ElasticSearch插件 - 图11

  • 第一次使用插件会自动创建shenyu-access-logging索引

Logging-ElasticSearch插件 - 图12

  • 利用es查询语句可以查询到请求的日志信息

3. 如何禁用插件

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