---
apiVersion: v1
kind: ConfigMap
metadata:
# Name of the ConfigMap. The name is used as reference in the "kubenav.io/prometheus-dashboards" annotation.
name: nginx-ingress-dashboard
# Dashboards namespace, which is configured in the settings via "Dashboards Namespace" or via the "--plugin.prometheus.dashboards-namespace" command-line flag.
namespace: kubenav
labels:
# Required label, so that kubenav can found the dashboard.
kubenav.io/prometheus-dashboard: "true"
data:
# Title of the dashboard.
title: "NGINX Ingress Controller"
# Description of the dashboard.
description: "Dashboard for NGINX Ingress Controller Metrics"
# Array of variables.
variables: |
[
{
"name": "Namespace",
"label": "controller_namespace",
"query": "nginx_ingress_controller_config_hash",
"allowAll": true
},
{
"name": "ControllerClass",
"label": "controller_class",
"query": "nginx_ingress_controller_config_hash{namespace=~\"{{ .Namespace }}\"}",
"allowAll": true
},
{
"name": "Controller",
"label": "controller_pod",
"query": "nginx_ingress_controller_config_hash{namespace=~\"{{ .Namespace }}\",controller_class=~\"{{ .ControllerClass }}\"}",
"allowAll": true
},
{
"name": "Ingress",
"label": "ingress",
"query": "nginx_ingress_controller_requests{namespace=~\"{{ .Namespace }}\",controller_class=~\"{{ .ControllerClass }}\", controller_pod=~\"{{ .Controller }}\"}",
"allowAll": true
}
]
# Array of charts.
charts: |
[
{
"title": "Controller Request Volume",
"unit": "ops",
"size": {
"xs": "12",
"sm": "12",
"md": "4",
"lg": "4",
"xl": "4"
},
"type": "singlestat",
"queries": [
{
"label": "Request Volume",
"query": "round(sum(irate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m])), 0.001)"
}
]
},
{
"title": "Controller Connections",
"unit": "",
"size": {
"xs": "12",
"sm": "12",
"md": "4",
"lg": "4",
"xl": "4"
},
"type": "singlestat",
"queries": [
{
"label": "Controller Connections",
"query": "sum(avg_over_time(nginx_ingress_controller_nginx_process_connections{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m]))"
}
]
},
{
"title": "Controller Success Rate",
"unit": "%",
"size": {
"xs": "12",
"sm": "12",
"md": "4",
"lg": "4",
"xl": "4"
},
"type": "singlestat",
"queries": [
{
"label": "Controller Success Rate",
"query": "sum(rate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\",status!~\"[4-5].*\"}[2m])) / sum(rate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m])) * 100"
}
]
},
{
"title": "Ingress Request Volume",
"unit": "reqps",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "6",
"xl": "6"
},
"type": "area",
"queries": [
{
"label": "{{ .ingress }}",
"query": "round(sum(irate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\",ingress=~\"{{ .Ingress }}\"}[2m])) by (ingress), 0.001)"
}
]
},
{
"title": "Ingress Success Rate",
"unit": "%",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "6",
"xl": "6"
},
"type": "area",
"queries": [
{
"label": "{{ .ingress }}",
"query": "sum(rate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\",ingress=~\"{{ .Ingress }}\",status!~\"[4-5].*\"}[2m])) by (ingress) / sum(rate(nginx_ingress_controller_requests{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\",ingress=~\"{{ .Ingress }}\"}[2m])) by (ingress) * 100"
}
]
},
{
"title": "Network I/O Pressure",
"unit": "MB/s",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "4",
"xl": "4"
},
"type": "area",
"queries": [
{
"label": "Received",
"query": "sum (irate (nginx_ingress_controller_request_size_sum{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m])) / 1024 / 1024"
},
{
"label": "Sent",
"query": "- sum (irate (nginx_ingress_controller_response_size_sum{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m])) / 1024 / 1024"
}
]
},
{
"title": "Average Memory Usage",
"unit": "MiB",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "4",
"xl": "4"
},
"type": "area",
"queries": [
{
"label": "NGINX",
"query": "avg(nginx_ingress_controller_nginx_process_resident_memory_bytes{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}) / 1024 / 1024"
}
]
},
{
"title": "Average CPU Usage",
"unit": "Cores",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "4",
"xl": "4"
},
"type": "area",
"queries": [
{
"label": "NGINX",
"query": "sum (rate (nginx_ingress_controller_nginx_process_cpu_seconds_total{controller_pod=~\"{{ .Controller }}\",controller_class=~\"{{ .ControllerClass }}\",namespace=~\"{{ .Namespace }}\"}[2m]))"
}
]
},
{
"title": "Ingress Certificate Expiry",
"unit": "Days",
"size": {
"xs": "12",
"sm": "12",
"md": "12",
"lg": "12",
"xl": "12"
},
"type": "area",
"queries": [
{
"label": "{{ .host }}",
"query": "(avg(nginx_ingress_controller_ssl_expire_time_seconds{namespace=~\"{{ .Namespace }}\"}) by (host) - time()) / 60 / 60 / 24"
}
]
}
]
评论