使用 Prometheus 插件对 KONG API 网关服务进行监控

作者:API传播员 · 2025-12-26 · 阅读时间:5分钟
本文详细介绍了在Azure Kubernetes服务上部署的Kong API网关中,如何通过启用Prometheus插件、创建服务监视器以及配置Grafana仪表盘来监控服务和路由的流量指标。针对Kong 3.3.0.0版本后分析功能移除的挑战,提供了完整的解决方案,帮助用户掌握微服务流量情况。

使用 Prometheus 插件对 KONG API 网关服务进行监控

Kong 是一款功能强大的 API 网关和微服务管理工具。它为 应用程序开发和部署的理想选择。

在我们的组织中,我们已经在 Azure Kubernetes 服务(AKS)上部署了 Kong API 网关的企业版。然而,在系统建立后,我们面临的一个主要挑战是如何有效地跟踪 Kong 服务和路由的流量情况。


Kong 监控的背景与挑战

为了监控运行在 AKS 集群中的 Kong,我们使用了 Prometheus 来收集指标,并通过 Grafana 将这些指标可视化。然而,默认情况下,这些指标并未包含与 Kong 服务和路由流量相关的信息。

在 Kong 3.3.0.0 版本之前,Kong 管理器中提供了一个名为“分析”的功能模块,可以查看每个服务和路由的请求数量及其状态码等基本信息。尽管这些信息有限,但对调试微服务仍然有所帮助。然而,从该版本开始,这一分析功能被完全移除。

本文将详细介绍如何使用 Prometheus 和 Grafana 来监控并获取 Kong 服务和路由的相关指标。


部署 Prometheus 和 Grafana

首先,我们需要安装 Prometheus 和 Grafana。以下是使用 Helm 安装 kube-prometheus-stack 的命令:

helm install kube-prometheus-stack prometheus-community/kube-prometheus-stack -f graphana-prometheus.yml -n app-monitoring

安装完成后,我们需要配置 Prometheus 来抓取 Kong 服务的指标,并将其流式传输到 Grafana。


配置 Prometheus 插件

Kong 提供了一个 Prometheus 插件,用于收集指标数据。该插件的指标可以通过管理 API 和状态 API 获取,默认端点为:

http://localhost:/metrics

需要注意的是,具体的 URL 可能因安装环境而异。在本文中,我们使用的是由管理 API 提供的指标端点。

启用 Prometheus 插件

为了获取与工作区中所有服务和路由相关的指标,需要在工作区中全局启用 Prometheus 插件。此外,还需要在插件配置中选择所有可用的指标。


创建服务监视器

Prometheus 的抓取配置不支持通过自定义标头进行身份验证,而我们的 Kong 管理 API 已启用了自定义标头 Kong-admin-token 进行身份验证。因此,我们需要创建一个服务来从管理 API 收集指标,并将该服务作为 Prometheus 的抓取端点。

以下是一个基于 Python 的服务示例代码,用于从管理 API 收集指标:

from flask import Flask, Response
from flask_restful import Api, Resource
from os import environ
import requests

app = Flask(__name__)
api = Api(app)class Metrics(Resource):
    def get(self):
        base_url = environ.get("BASE_URL")
        endpoint = environ.get("ENDPOINT")
        token_name = environ.get("TOKEN_NAME")
        token_variable = environ.get("TOKEN_VARIABLE")
        url = f"{base_url}/{endpoint}"
        response = requests.get(url, headers={token_name: token_variable})
        return Response(response.text, mimetype='text/plain')api.add_resource(Metrics, "/metrics")if __name__ == "__main__":
    app.run(host="0.0.0.0", port=5000, debug=True)

部署服务

以下是用于部署上述服务的 Kubernetes 配置文件:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: kong-metrics-exporter
spec:
  replicas: 1
  selector:
    matchLabels:
      app: kong-metrics-exporter
  template:
    metadata:
      labels:
        app: kong-metrics-exporter
    spec:
      nodeSelector:
        agentpool: konguserpool
      containers:
      - image: CONTAINER_REGISTRY/REPO_NAME:BUILD_ID
        name: kong-metrics-exporter
        env:
        - name: BASE_URL
          value: BASE_URL_VALUE
        - name: ENDPOINT
          value: ENDPOINT_VALUE
        - name: TOKEN_NAME
          value: TOKEN_NAME_VALUE
        - name: TOKEN_VARIABLE
          value: TOKEN_VARIABLE_VALUE
        ports:
        - containerPort: 5000
---
apiVersion: v1
kind: Service
metadata:
  name: kong-metrics-exporter
  labels:
    app: kong-metrics-exporter
spec:
  type: ClusterIP
  ports:
  - name: web
    port: 80
    targetPort: 5000
  selector:
    app: kong-metrics-exporter

配置 Prometheus 服务监视器

服务部署完成后,我们需要为 Prometheus 配置服务监视器。以下是服务监视器的配置文件:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: kong-exporter-service-monitor
  namespace: ingress-basic
  labels:
    release: kube-prometheus-stack
spec:
  selector:
    matchLabels:
      app: kong-metrics-exporter
  endpoints:
  - port: web
    path: /metrics
    interval: 15s
  namespaceSelector:
    matchNames:
    - ingress-basic

通过以上配置,Prometheus 就可以开始抓取 Kong 的指标数据。


配置 Grafana 仪表盘

在 Prometheus 配置完成后,我们需要将其作为数据源添加到 Grafana 中。随后,可以导入 Kong 官方提供的仪表盘模板。该模板的 JSON 文件可以从以下链接下载:

下载 Kong 官方仪表盘 JSON 文件

导入仪表盘后,您将能够在 Grafana 中直观地查看 Kong 的服务和路由指标。


总结

通过本文的步骤,您可以成功使用 Prometheus 和 Grafana 对 Kong API 网关进行监控。我们详细介绍了如何配置 Prometheus 插件、创建服务监视器以及在 Grafana 中设置仪表盘。这些操作将帮助您全面掌握 Kong 服务和路由的流量情况,为微服务的运维和调试提供有力支持。

原文链接: https://remyasavithry.medium.com/kong-api-gateway-service-monitoring-using-the-prometheus-plugin-201940ea7d2a