Metrics插件

说明

  • Metrics插件插件是网关用来监控自身运行状态(JVM相关),请求的响应迟延,QPSTPS等相关metrics

技术方案

  • 流程图 Metrics插件 - 图1

  • 异步或者同步的方式,在 Apache ShenYu 网关里面进行 metrics 埋点。

  • prometheus 服务端通过 http 请求来拉取 metrics,再使用 Grafana 展示。

插件使用

  • 在网关的 pom.xml 文件中添加 metrics 的依赖。
  1. <!-- apache shenyu metrics plugin starter-->
  2. <dependency>
  3. <groupId>org.apache.shenyu</groupId>
  4. <artifactId>shenyu-spring-boot-starter-plugin-metrics</artifactId>
  5. <version>${project.version}</version>
  6. </dependency>
  7. <!-- apache shenyu metrics plugin end-->
  • 在网关的配置yaml文件中编辑如下内容:
  1. shenyu:
  2. metrics:
  3. enabled: false #设置为 true 表示开启
  4. name : prometheus
  5. host: 127.0.0.1 #暴露的ip
  6. port: 8090 #暴露的端口
  7. jmxConfig: #jmx配置
  8. props:
  9. jvm_enabled: true #开启jvm的监控指标

metrics信息

  • 所有的JVM,线程,内存,等相关信息都会埋点,可以在 Grafana 面板中,新增一个 JVM 模块,则会完全展示 具体请看:https://github.com/prometheus/jmx_exporter

  • 另外还有如下自定义的 metrics

名称类型标签名称说明
shenyu_request_totalCounternone收集ShenYu网关的所有请求
shenyu_request_throw_totalCounternone收集ShenYu网关的所有异常请求
shenyu_request_type_totalCounterpath,type收集ShenYu网关监视器的所有匹配请求
shenyu_execute_latency_millishistogramnone收集ShenYu网关执行时间间隔

jmx 指标

nametypelabalshelp
jmx_config_reload_success_totalcounter成功重新加载配置的次数.
jmx_config_reload_failure_totalcounter重新加载配置失败的次数.
jmx_scrape_duration_secondsgauge此 JMX 抓取所用的秒数.
jmx_scrape_errorgauge如果此抓取失败,则非零.
jmx_scrape_cached_beansgauge有缓存匹配规则的bean的数量
jmx_scrape_duration_secondsgauge此 JMX 抓取所花费的秒数.

jvm 指标

StandardExports

nametypelabelshelp
process_cpu_seconds_totalcounter用户和系统CPU总计所用的秒数.
process_start_time_secondsgauge自 unix 元年(1970-01-01)以来进程的开始时间.
process_open_fdsgauge打开的文件描述符的数量.
process_max_fdsgauge打开的文件描述符的最大数量.
process_virtual_memory_bytesgauge虚拟内存的字节数.
process_resident_memory_bytesgauge常驻内存的字节数.

MemoryPoolsExports

nametypelabelshelp
jvm_memory_objects_pending_finalizationgauge{area=”heap|nonheap”}在终结器队列中等待的对象数.
jvm_memory_bytes_usedgauge{area=”heap|nonheap”}给定 JVM 内存区域的已用字节数.
jvm_memory_bytes_committedgauge{area=”heap|nonheap”}给定 JVM 内存区域的已提交字节数.
jvm_memory_bytes_maxgauge{area=”heap|nonheap”}给定 JVM 内存区域的最大字节数.
jvm_memory_bytes_initgauge{area=”heap|nonheap”}给定 JVM 内存区域的初始字节数.
jvm_memory_pool_bytes_usedgauge{pool}给定 JVM 内存池的已用字节数.
jvm_memory_pool_bytes_committedgauge{pool}给定 JVM 内存池的已提交字节数.
jvm_memory_pool_bytes_maxgauge{pool}给定 JVM 内存池的最大字节数.
jvm_memory_pool_bytes_initgauge{pool}给定 JVM 内存池的初始字节数.
jvm_memory_pool_collection_used_bytesgauge{pool}给定 JVM 内存池最后一次 GC 后的已用字节数.
jvm_memory_pool_collection_committed_bytesgauge{pool}给定 JVM 内存池的最后一次 GC 后的已提交字节数.
jvm_memory_pool_collection_max_bytesgauge{pool}给定 JVM 内存池的最后一次 GC 后的最大字节数.
jvm_memory_pool_collection_init_bytesgauge{pool}给定 JVM 内存池的最后一次 GC 后的初始字节数.

MemoryAllocationExports

nametypelabelshelp
jvm_memory_pool_allocated_bytes_totalcounter{pool}给定 JVM 内存池中分配的总字节数.(只有 GC 的时候才会更新)

BufferPoolsExports

nametypelabelshelp
jvm_buffer_pool_used_bytesgauge{pool}给定 JVM 缓冲池的已用字节数.
jvm_buffer_pool_capacity_bytesgauge{pool}给定 JVM 缓冲池的字节容量.
jvm_buffer_pool_used_buffersgauge{pool}给定 JVM 缓冲池的已用缓冲区.

GarbageCollectorExports

nametypelabelshelp
jvm_gc_collection_secondssummary{gc}在给定的 JVM 垃圾收集器中花费的秒数.

ThreadExports

nametypelabelshelp
jvm_threads_currentgaugeJVM 的当前线程数
jvm_threads_daemongaugeJVM 的守护进程线程数
jvm_threads_peakgaugeJVM 的峰值线程数
jvm_threads_started_totalcounterJVM 的已启动的线程数
jvm_threads_deadlockedgauge处于死锁状态的 JVM 线程循环等待获取对象监视器或可拥有的同步器
jvm_threads_deadlocked_monitorgauge处于死锁等待获取对象监视器的 JVM 线程周期
jvm_threads_stategauge{state}状态为{state}的线程数

ClassLoadingExports

nametypelabelshelp
jvm_classes_loadedgauge当前在 JVM 中加载的类的数量
jvm_classes_loaded_totalcounter自 JVM 开始执行以来已加载的类总数
jvm_classes_unloaded_totalcounter自 JVM 开始执行以来已卸载的类总数

VersionInfoExports

nametypelabelshelp
jvminfo{version(java.runtime.version),vendor(java.vm.vendor),runtime(java.runtime.name)}JVM 版本信息

收集 metrics

用户需部署Prometheus 服务来采集

Windows 环境下安装Prometheus

  • 选择对应环境的 下载地址 安装

  • 修改配置文件:prometheus.yml

    1. scrape_configs:
    2. - job_name: 'Apache ShenYu'
    3. # metrics_path defaults to '/metrics'
    4. # scheme defaults to 'http'.
    5. static_configs:
    6. - targets: ['localhost:8090'] # metrics of apache shenyu are exposed on port 8090 by default

注: job_namemonitor插件配置的metricsName相对应

  • 配置完成之后,在 windows 下可以直接双击 prometheus.exe 启动即可,默认启动端口为 9090 ,访问 http://localhost:9090/ ,点击status->Targets,验证是否成功。

Metrics插件 - 图2

MacOS 环境下安装Prometheus

  • 使用brew 安装 prometheus,安装完成后prometheushomebrew下的 Cellar 文件夹中。
  1. brew install prometheus
  • 在prometheus.yml文件所在位置执行如下命令即可启动prometheus。
  1. prometheus --config.file=prometheus.yml &

访问 http://localhost:9090/ 验证是否正常启动。

面板展示

推荐使用 Grafana,用户可以自定义查询来个性化显示面板盘。

下面介绍如何安装 Grafana

windows环境下安装Grafana

  • 安装 Grafana

下载地址 解压进入 bin 目录然后双击 grafana-server.exe 运行 访问 http://localhost:3000/?orgId=1 admin/admin 验证是否成功

macos环境下安装Grafana

  • 使用brew 安装 grafana 。
  1. brew install grafana
  • 以服务方式启动grafana
  1. brew services start grafana

访问 http://localhost:3000/ 验证是否正常启动。

使用Grafana查看监控数据

配置数据源,选择prometheus,注意数据源名字为prometheus。

Metrics插件 - 图3

Metrics插件 - 图4

  • 配置自定义metric面板request_totalhttp_request_total

点击 Create - Import 输入dashboards面板json配置

最终自定义 Http 请求监控面板效果如下:

Metrics插件 - 图5

Metrics插件 - 图6

Metrics插件 - 图7

Metrics插件 - 图8

Metrics插件 - 图9