Exporter.png

本文已经收录在 Prometheus 合集 Prometheus 都可以采集那些指标?-- 常用 Exporter 合集 中。

Kong 是一个微服务网关工具,在微服务架构中,由于系统和服务的细分,导致系统结构变得非常复杂, 为了跨平台,为了统一集中管理api,同时为了不暴露后置服务。甚至有时候需要对请求进行一些安全、负载均衡、限流、熔断、灰度等中间操作,基于此类种种的客观需求一个类似综合前置的系统就产生了,这就是API网关(API Gateway)。API网关作为分散在各个业务系统微服务的API聚合点和统一接入点,外部请求通过访问这个接入点,即可访问内部所有的 REST API 服务。

Kong 的官方网站是 https://konghq.com/kong/ ,针对 Kong 的监控, Kong 提供了一个 Prometheus 的插件。这个插件是默认安装 Kong 的时候自带的,这个也可以升级。当前这个 Prometheus 的监控插件最新版本是 1.4.x ,兼容 Kong 的大部分版本。这个插件以Prometheus 公开格式公开与 Kong 和代理 Upstream 服务相关的度量,可以由 Prometheus 服务器抓取。

这个插件曾经是单独维护的,仓库地址是 https://github.com/Kong/kong-plugin-prometheus ,当版本到 1.1.0 以后,这个插件维护到 Kong 的主仓库里了,不再单独维护了,地址是 https://github.com/Kong/kong/tree/master/kong/plugins/prometheus 。

配置

这个插件是兼容无数据库模式的。

在无数据库模式下,需要声明式地配置 Kong Gateway。因此,Admin API主要是只读的,它能执行的唯一任务都与处理声明式配置相关,包括:

  • 在负载均衡器中设置目标的健康状态
  • 根据模式验证配置的结果
  • 通过 /config 接口上传声明式的配置

当 Kong 处于无数据库模式时,Prometheus 采集的监控数据中对于数据库的监控指标永远是正常状态。

对于 Kong 的 Prometheus 插件可以通过 Admin API 来进行打开,执行下边这个请求来打开全局的监控

curl -X POST http://{HOST}:8001/plugins/ \
    --data "name=prometheus" 

如果使用了 KongA 等管理工具,首先打开管理工具,打开插件页面,然后找到添加插件,搜索 Prometheus 插件,然后打开,点击创建,就可以了。

另外有一些参数可以使用在插件的配置文件中使用

  • name:字符串类型,插件的名字,在这个例子中是 Prometheus。
  • service.id:字符串类型,服务的插件标记的 ID
  • enable:布尔值,这个插件是否开启的,默认值是 true 。
  • config.per_consumer:布尔值,默认值是 false,它决定是否应该收集每个消费者的指标。如果启用,kong_http_consumer_status 指标将被添加到导出指标中。

在最新的 1.4.x 版本中,新增了一个 data_plane_cluster_cert_expiry_timestamp 指标,另外Upstream Target health 指标新增了一个 subsystem label 。

这个 Prometheus 插件记录并公开节点级别的指标,你的 Prometheus 服务器将需要通过服务发现机制发现所有的Kong节点,并使用每个节点的配置 /metrics 接口获取数据。

可用的指标

目前可用的指标:

  • Status codes :Upstream服务返回的HTTP状态码。对于每个服务、所有服务以及每个用户的路由,这些都是可用的。
  • Latencies Histograms: 在 Kong 延迟的直方统计数据
    • Request:Kong和Upstream服务提供请求所需的总时间。
    • Kong:Kong路由一个请求并运行所有配置的插件所花费的时间
    • Upstream:Upstream服务响应请求所花费的时间。
  • Bandwidth:通过 Kong 的总带宽(出口/进口)。该指标可用于每个服务,并作为所有服务的总和。
  • DB reachability:值为0或1的一种规格类型,它表示一个Kong节点是否可以到达DB。
  • Connections:各种Nginx连接指标,如活动的,读的,写的,和接受的连接数。
  • Target Health:属于给定 Upstream 的目标及其子系统(http或stream)的健康状态(healthchecks_off、健康、不健康或dns_error)。
  • Dataplane Status:将数据的最后一次显示的时间戳、配置哈希值、配置同步状态和证书过期时间戳导出到控制页面。
  • Enterprise License Information:Kong Gateway license过期日期、特性和license签名。这些指标只能在Kong Gateway上输出。