写点什么

Prometheus Exporter (二十四)Kong Metrics

作者:耳东@Erdong
  • 2021 年 12 月 12 日
  • 本文字数:4168 字

    阅读完需:约 14 分钟

Prometheus Exporter (二十四)Kong Metrics

本文已经收录在 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 服务器抓取。

配置

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


在无数据库模式下,需要声明式地配置 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 上输出。


请求安装了 Prometheus 插件的 Kong 的监控数据接口可以得到如下的指标示例:


curl -i http://localhost:8001/metricsHTTP/1.1 200 OKServer: openresty/1.15.8.3Date: Tue, 7 Jun 2020 16:35:40 GMTContent-Type: text/plain; charset=UTF-8Transfer-Encoding: chunkedConnection: keep-aliveAccess-Control-Allow-Origin: *
# HELP kong_bandwidth Total bandwidth in bytes consumed per service/route in Kong# TYPE kong_bandwidth counterkong_bandwidth{type="egress",service="google",route="google.route-1"} 1277kong_bandwidth{type="ingress",service="google",route="google.route-1"} 254# HELP kong_datastore_reachable Datastore reachable from Kong, 0 is unreachable# TYPE kong_datastore_reachable gaugekong_datastore_reachable 1# HELP kong_http_consumer_status HTTP status codes for customer per service/route in Kong# TYPE kong_http_consumer_status counterkong_http_consumer_status{service="s1",route="s1.route-1",code="200",consumer="<CONSUMER_USERNAME>"} 3# HELP kong_http_status HTTP status codes per service/route in Kong# TYPE kong_http_status counterkong_http_status{code="301",service="google",route="google.route-1"} 2# HELP kong_latency Latency added by Kong, total request time and upstream latency for each service in Kong# TYPE kong_latency histogramkong_latency_bucket{type="kong",service="google",route="google.route-1",le="00001.0"} 1kong_latency_bucket{type="kong",service="google",route="google.route-1",le="00002.0"} 1...kong_latency_bucket{type="kong",service="google",route="google.route-1",le="+Inf"} 2kong_latency_bucket{type="request",service="google",route="google.route-1",le="00300.0"} 1kong_latency_bucket{type="request",service="google",route="google.route-1",le="00400.0"} 1..kong_latency_bucket{type="request",service="google",route="google.route-1",le="+Inf"} 2kong_latency_bucket{type="upstream",service="google",route="google.route-1",le="00300.0"} 2kong_latency_bucket{type="upstream",service="google",route="google.route-1",le="00400.0"} 2..kong_latency_bucket{type="upstream",service="google",route="google.route-1",le="+Inf"} 2kong_latency_count{type="kong",service="google",route="google.route-1"} 2kong_latency_count{type="request",service="google",route="google.route-1"} 2kong_latency_count{type="upstream",service="google",route="google.route-1"} 2kong_latency_sum{type="kong",service="google",route="google.route-1"} 2145kong_latency_sum{type="request",service="google",route="google.route-1"} 2672kong_latency_sum{type="upstream",service="google",route="google.route-1"} 527# HELP kong_nginx_http_current_connections Number of HTTP connections# TYPE kong_nginx_http_current_connections gaugekong_nginx_http_current_connections{state="accepted"} 8kong_nginx_http_current_connections{state="active"} 1kong_nginx_http_current_connections{state="handled"} 8kong_nginx_http_current_connections{state="reading"} 0kong_nginx_http_current_connections{state="total"} 8kong_nginx_http_current_connections{state="waiting"} 0kong_nginx_http_current_connections{state="writing"} 1# HELP kong_memory_lua_shared_dict_bytes Allocated slabs in bytes in a shared_dict# TYPE kong_memory_lua_shared_dict_bytes gaugekong_memory_lua_shared_dict_bytes{shared_dict="kong",kong_subsystem="http"} 40960..# HELP kong_memory_lua_shared_dict_total_bytes Total capacity in bytes of a shared_dict# TYPE kong_memory_lua_shared_dict_total_bytes gaugekong_memory_lua_shared_dict_total_bytes{shared_dict="kong",kong_subsystem="http"} 5242880..# HELP kong_memory_workers_lua_vms_bytes Allocated bytes in worker Lua VM# TYPE kong_memory_workers_lua_vms_bytes gaugekong_memory_workers_lua_vms_bytes{pid="7281",kong_subsystem="http"} 41124353# HELP kong_data_plane_config_hash Config hash value of the data plane# TYPE kong_data_plane_config_hash gaugekong_data_plane_config_hash{node_id="d4e7584e-b2f2-415b-bb68-3b0936f1fde3",hostname="ubuntu-bionic",ip="127.0.0.1"} 1.7158931820287e+38# HELP kong_data_plane_last_seen Last time data plane contacted control plane# TYPE kong_data_plane_last_seen gaugekong_data_plane_last_seen{node_id="d4e7584e-b2f2-415b-bb68-3b0936f1fde3",hostname="ubuntu-bionic",ip="127.0.0.1"} 1600190275# HELP kong_data_plane_version_compatible Version compatible status of the data plane, 0 is incompatible# TYPE kong_data_plane_version_compatible gaugekong_data_plane_version_compatible{node_id="d4e7584e-b2f2-415b-bb68-3b0936f1fde3",hostname="ubuntu-bionic",ip="127.0.0.1",kong_version="2.4.1"} 1# HELP kong_nginx_metric_errors_total Number of nginx-lua-prometheus errors# TYPE kong_nginx_metric_errors_total counterkong_nginx_metric_errors_total 0# HELP kong_upstream_target_health Health status of targets of upstream. States = healthchecks_off|healthy|unhealthy|dns_error, value is 1 when state is populated.kong_upstream_target_health{upstream="<upstream_name>",target="<target>",address="<ip>:<port>",state="healthchecks_off",subsystem="http"} 0kong_upstream_target_health{upstream="<upstream_name>",target="<target>",address="<ip>:<port>",state="healthy",subsystem="http"} 1kong_upstream_target_health{upstream="<upstream_name>",target="<target>",address="<ip>:<port>",state="unhealthy",subsystem="http"} 0kong_upstream_target_health{upstream="<upstream_name>",target="<target>",address="<ip>:<port>",state="dns_error",subsystem="http"} 0
复制代码


发布于: 4 小时前阅读数: 9
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Prometheus Exporter (二十四)Kong Metrics