本文已经收录在 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上输出。