nginx ingress controller 是 k8s 集群中最常用的 ingress controller 之一, 它可以根据 ingress 为集群中的应用配置负载均衡,从而使外部网络通过域名访问集群内的应用。
实际项目中,除了使用 ingress 外,我们也需要监控 ingress 和 ingress controller 的相关信息,从而了解集群内服务和网络的可用性。
本文基于 nginx ingress controller 一步步讲述如何通过 prometheus监控 nginx ingress, 并使用 grafana 展示监控信息。
前置条件,可以参考 k8s笔记12–grafana的配置和常见使用 安装 grafana, 参考 k8s笔记18–快速入门ingress和ingress controller 安装 ingress controller。
- job_name: kubernetes-service-endpoints
kubernetes_sd_configs:
- role: endpoints
follow_redirects: true
namespaces:
names:
- lens-metrics
- ingress-nginx
# svc.yaml info
metadata:
annotations:
prometheus.io/port: '10254'
prometheus.io/scrape: 'true'
status:
loadBalancer: {}
spec:
ports:
- name: prometheus
protocol: TCP
port: 10254
targetPort: prometheus
# deploy.yaml info
spec:
template:
spec:
containers:
- name: controller
ports:
- name: prometheus
containerPort: 10254
protocol: TCP

ingress controller v1.2.0
配置完成并导入数据后,过一段时间就可以在 grafana 上查看 ingress 相关的数据,如下图所示:
ingress controller

Request Handing Performance

该文档中端口和实际不匹配,
https://docs.nginx.com/nginx-ingress-controller/logging-and-monitoring/prometheus/
ingress-nginx 官方文档 docs.nginx.com/nginx-ingress-controller/logging-and-monitoring/prometheus/ 中也介绍了nginx-ingress-controller 的日志监控方法, 但是文档中端口和实际不匹配,因此最好参考 github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/monitoring.md 来配置。
软件环境:
grafana 8.5.2
k8s 1.23.6
ingress controller v1.2.0
参考文档:
k8s笔记12–grafana的配置和常见使用
k8s笔记18–快速入门ingress和ingress controller
github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards
github.com/kubernetes/ingress-nginx/blob/main/docs/user-guide/monitoring.md
基于k8s集群部署prometheus监控ingress nginx