Skip to content

Monitor NGINX applications running on Amazon EKS

v3.0.0 breaking change

The enable_nginx and nginx_config variables have been removed in v3.0.0. NGINX scrape targets are now added via additional_scrape_jobs. See the Upgrading to v3.0.0 guide.

Setup with v3.0.0

Add your NGINX metrics endpoint as an additional scrape job:

module "eks_monitoring" {
  source = "github.com/aws-observability/terraform-aws-observability-accelerator//modules/eks-monitoring?ref=v3.0.0"

  providers = { grafana = grafana }

  collector_profile     = "self-managed-amp"  # or "cloudwatch-otlp"
  eks_cluster_id        = var.eks_cluster_id

  additional_scrape_jobs = [
    {
      job_name        = "nginx"
      scrape_interval = "30s"
      static_configs = [
        { targets = ["my-nginx.nginx-ingress-sample.svc.cluster.local:10254"] }
      ]
    }
  ]
}

Custom dashboards

To add an NGINX Grafana dashboard, include it in dashboard_sources:

module "eks_monitoring" {
  # ...
  dashboard_sources = {
    nginx = "https://raw.githubusercontent.com/aws-observability/aws-observability-accelerator/v0.3.2/artifacts/grafana-dashboards/eks/nginx/nginx.json"
  }
}

Deploy a sample NGINX application

1. Install NGINX Ingress Controller

helm repo add ingress-nginx https://kubernetes.github.io/ingress-nginx
kubectl create namespace nginx-ingress-sample
helm install my-nginx ingress-nginx/ingress-nginx \
  --namespace nginx-ingress-sample \
  --set controller.metrics.enabled=true \
  --set-string controller.metrics.service.annotations."prometheus\.io/port"="10254" \
  --set-string controller.metrics.service.annotations."prometheus\.io/scrape"="true"

2. Generate sample traffic

EXTERNAL_IP=$(kubectl get svc my-nginx-ingress-nginx-controller -n nginx-ingress-sample -o jsonpath='{.status.loadBalancer.ingress[0].hostname}')
SAMPLE_TRAFFIC_NAMESPACE=nginx-sample-traffic
curl https://raw.githubusercontent.com/aws-observability/terraform-aws-observability-accelerator/main/examples/eks-amp-otel-nginx/sample_traffic/nginx-traffic-sample.yaml |
sed "s/{{external_ip}}/$EXTERNAL_IP/g" |
sed "s/{{namespace}}/$SAMPLE_TRAFFIC_NAMESPACE/g" |
kubectl apply -f -

3. Verify and visualize

kubectl get pods -n nginx-ingress-sample

Open your Managed Grafana workspace and navigate to the NGINX dashboard.