k8s笔记21--prometheus 监控 nginx ingress

1 介绍

nginx ingress controller 是 k8s 集群中最常用的 ingress controller 之一, 它可以根据 ingress 为集群中的应用配置负载均衡,从而使外部网络通过域名访问集群内的应用。
实际项目中,除了使用 ingress 外,我们也需要监控 ingress 和 ingress controller 的相关信息,从而了解集群内服务和网络的可用性。
本文基于 nginx ingress controller 一步步讲述如何通过 prometheus监控 nginx ingress, 并使用 grafana 展示监控信息。

2 安装测试

前置条件,可以参考 ​​k8s笔记12–grafana的配置和常见使用​​​ 安装 grafana, 参考 ​​k8s笔记18–快速入门ingress和ingress controller​​ 安装 ingress controller。

2.1 配置环境

  1. 在 Prometheus 的 job_name: kubernetes-service-endpoints 中新增命名空间 ingress-nginx, 如下所示
- job_name: kubernetes-service-endpoints
kubernetes_sd_configs:
- role: endpoints
follow_redirects: true
namespaces:
names:
- lens-metrics
- ingress-nginx
  1. 在ingress 的 deployment 新增 metrics 端口,在 ingress 的 svc 中新增注解相关的字段,如下所示
# 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:
  1. 新增配置后,Prometheus 中即可看到对应 10254/metrics, 如下图所示
  2. k8s笔记21--prometheus 监控 nginx ingress_Prometheus

  3. 在 grafana 中导入​​github.com/kubernetes/ingress-nginx/tree/main/deploy/grafana/dashboards​​ 中的json文件

2.2 测试k8s 1.23.6

ingress controller v1.2.0

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

ingress controller

k8s笔记21--prometheus 监控 nginx ingress_kubernetes_02


Request Handing Performance

k8s笔记21--prometheus 监控 nginx ingress_kubernetes_03

3 注意事项

该文档中端口和实际不匹配,
​​​ 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​​ 来配置。

4 说明

软件环境:
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​