debian-mirror-gitlab/doc/user/project/integrations/prometheus_library/nginx_ingress.md

59 lines
4.3 KiB
Markdown
Raw Normal View History

2017-09-10 17:25:29 +05:30
# Monitoring NGINX Ingress Controller
2018-03-17 18:26:18 +05:30
2020-03-13 15:44:24 +05:30
> [Introduced](https://gitlab.com/gitlab-org/gitlab-foss/-/merge_requests/22133) in GitLab 11.7.
2017-09-10 17:25:29 +05:30
2019-02-15 15:39:39 +05:30
NOTE: **Note:** NGINX Ingress versions prior to 0.16.0 offer an included [VTS Prometheus metrics exporter](nginx_ingress_vts.md), which exports metrics different than the built-in metrics.
2019-12-21 20:55:43 +05:30
GitLab has support for automatically detecting and monitoring the Kubernetes NGINX Ingress controller. This is provided by leveraging the built-in Prometheus metrics included with Kubernetes NGINX Ingress controller [version 0.16.0](https://github.com/kubernetes/ingress-nginx/blob/master/Changelog.md#0160) onward.
2018-03-17 18:26:18 +05:30
## Requirements
2018-10-15 14:42:47 +05:30
[Prometheus integration](../prometheus.md) must be active.
2017-09-10 17:25:29 +05:30
## Metrics supported
| Name | Query |
| ---- | ----- |
2019-09-30 21:07:59 +05:30
| Throughput (req/sec) | `sum(label_replace(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m]), "status_code", "${1}xx", "status", "(.)..")) by (status_code)` |
| Latency (ms) | `sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_sum{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_ingress_upstream_latency_seconds_count{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 1000` |
| HTTP Error Rate (%) | `sum(rate(nginx_ingress_controller_requests{status=~"5.*",namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) / sum(rate(nginx_ingress_controller_requests{namespace="%{kube_namespace}",ingress=~".*%{ci_environment_slug}.*"}[2m])) * 100` |
2017-09-10 17:25:29 +05:30
2019-12-21 20:55:43 +05:30
## Configuring NGINX Ingress monitoring
2018-03-17 18:26:18 +05:30
If you have deployed NGINX Ingress using GitLab's [Kubernetes cluster integration](../../clusters/index.md#installing-applications), it will [automatically be monitored](#about-managed-nginx-ingress-deployments) by Prometheus.
For other deployments, there is [some configuration](#manually-setting-up-nginx-ingress-for-prometheus-monitoring) required depending on your installation:
2019-02-15 15:39:39 +05:30
- NGINX Ingress should be version 0.16.0 or above, with metrics enabled.
- NGINX Ingress should be annotated for Prometheus monitoring.
- Prometheus should be configured to monitor annotated pods.
2018-03-17 18:26:18 +05:30
### About managed NGINX Ingress deployments
2019-12-26 22:10:19 +05:30
NGINX Ingress is deployed into the `gitlab-managed-apps` namespace, using the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress). NGINX Ingress will be [externally reachable via the Load Balancer's Endpoint](../../../clusters/applications.md#ingress).
2018-03-17 18:26:18 +05:30
NGINX is configured for Prometheus monitoring, by setting:
2019-02-15 15:39:39 +05:30
- `enable-vts-status: "true"`, to export Prometheus metrics.
- `prometheus.io/scrape: "true"`, to enable automatic discovery.
- `prometheus.io/port: "10254"`, to specify the metrics port.
2018-03-17 18:26:18 +05:30
When used in conjunction with the GitLab deployed Prometheus service, response metrics will be automatically collected.
### Manually setting up NGINX Ingress for Prometheus monitoring
2019-12-21 20:55:43 +05:30
Version 0.9.0 and above of [NGINX Ingress](https://github.com/kubernetes/ingress-nginx) have built-in support for exporting Prometheus metrics. To enable, a ConfigMap setting must be passed: `enable-vts-status: "true"`. Once enabled, a Prometheus metrics endpoint will start running on port 10254.
2018-03-17 18:26:18 +05:30
2019-12-21 20:55:43 +05:30
Next, the Ingress needs to be annotated for Prometheus monitoring. Two new annotations need to be added:
2017-09-10 17:25:29 +05:30
2019-03-02 22:35:43 +05:30
- `prometheus.io/scrape: "true"`
- `prometheus.io/port: "10254"`
2017-09-10 17:25:29 +05:30
2019-12-21 20:55:43 +05:30
Managing these settings depends on how NGINX Ingress has been deployed. If you have deployed via the [official Helm chart](https://github.com/helm/charts/tree/master/stable/nginx-ingress), metrics can be enabled with `controller.stats.enabled` along with the required annotations. Alternatively it is possible to edit the NGINX Ingress YML directly in the [Kubernetes dashboard](https://github.com/kubernetes/dashboard).
2017-09-10 17:25:29 +05:30
## Specifying the Environment label
2019-02-15 15:39:39 +05:30
In order to isolate and only display relevant metrics for a given environment, GitLab needs a method to detect which labels are associated. To do this, GitLab will search for metrics with appropriate labels. In this case, the `ingress` label must `<CI_ENVIRONMENT_SLUG>`.
2017-09-10 17:25:29 +05:30
2018-10-15 14:42:47 +05:30
If you have used [Auto Deploy](../../../../topics/autodevops/index.md#auto-deploy) to deploy your app, this format will be used automatically and metrics will be detected with no action on your part.