使用 Prometheus 插件对 KONG API 网关服务进行监控
使用 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 文件可以从以下链接下载:
导入仪表盘后,您将能够在 Grafana 中直观地查看 Kong 的服务和路由指标。
总结
通过本文的步骤,您可以成功使用 Prometheus 和 Grafana 对 Kong API 网关进行监控。我们详细介绍了如何配置 Prometheus 插件、创建服务监视器以及在 Grafana 中设置仪表盘。这些操作将帮助您全面掌握 Kong 服务和路由的流量情况,为微服务的运维和调试提供有力支持。
原文链接: https://remyasavithry.medium.com/kong-api-gateway-service-monitoring-using-the-prometheus-plugin-201940ea7d2a
最新文章
- Java API 如何支持现代软件开发 – Brilworks
- 如何使用Python抓取LinkedIn数据 – Apify博客
- 如何使用Postman自动化API测试 – LogRocket博客
- 如何让 Python 写的 API 接口同时支持 Session 和 Token 认证?
- Golang做API开发时,如何设计可靠的签名验证机制?
- 非技术背景用户如何轻松使用天工大模型API
- 医疗API解决方案改善患者结果
- SOAP 和 REST API 的区别是什么?
- 发现啤酒世界的宝藏:开放啤酒数据库API助你探索全球精酿
- 如何获取讯飞星火 API Key 密钥(分步指南)
- API 安全最佳实践指南
- 如何使用Postman高效测试RESTful APIs:真实案例解析