Beispiel für NGINX-Workload für Amazon ECS-Cluster
Der NGINX Prometheus Exporter kann NGINX-Daten als Prometheus-Metriken scrapen und verfügbar machen. In diesem Beispiel wird der Exporter zusammen mit dem NGINX-Reverse-Proxy-Service für Amazon ECS verwendet.
Weitere Informationen zum NGINX-Prometheus-Exporter finden Sie unter nginx-prometheus-exporter
Der CloudWatch-Agent mit Prometheus-Unterstützung erfasst die NGINX-Prometheus-Metriken basierend auf der Serviceerkennungskonfiguration im Amazon-ECS-Cluster. Sie können den NGINX Prometheus Exporter so konfigurieren, dass die Metriken auf einem anderen Port oder metrics_path verfügbar gemacht werden. Wenn Sie den Port oder den Pfad ändern, aktualisieren Sie den ecs_service_discovery-Abschnitt in der CloudWatch-Agentenkonfigurationsdatei.
Installieren Sie den NGINX-Reverse-Proxy-Beispiel-Workload für Amazon ECS-Cluster
Zum Installieren des NGINX-Reverse-Proxy-Beispiel-Workloads führen Sie die folgenden Schritte aus.
Erstellen der Docker-Images
So erstellen Sie die Docker-Images für die NGINX-Reverse-Proxy-Beispiel-Workload
-
Laden Sie den folgenden Ordner aus dem NGINX-Reverse-Proxy-Repo herunter: https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/
aus. -
Suchen Sie das
app-Verzeichnis und erstellen Sie ein Image aus diesem Verzeichnis:docker build -t web-server-app ./path-to-app-directory -
Erstellen Sie ein benutzerdefiniertes Image für NGINX. Erstellen Sie zunächst ein Verzeichnis mit den folgenden zwei Dateien:
-
Eine Beispieldatei für Dockerdatei:
FROM nginx COPY nginx.conf /etc/nginx/nginx.conf -
Eine
nginx.conf-Datei, geändert von https://github.com/awslabs/ecs-nginx-reverse-proxy/tree/master/reverse-proxy/: events { worker_connections 768; } http { # Nginx will handle gzip compression of responses from the app server gzip on; gzip_proxied any; gzip_types text/plain application/json; gzip_min_length 1000; server{ listen 8080; location /stub_status { stub_status on; } } server { listen 80; # Nginx will reject anything not matching /api location /api { # Reject requests with unsupported HTTP method if ($request_method !~ ^(GET|POST|HEAD|OPTIONS|PUT|DELETE)$) { return 405; } # Only requests matching the whitelist expectations will # get sent to the application server proxy_pass http://app:3000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_cache_bypass $http_upgrade; } } }Anmerkung
stub_statusmuss auf demselben Port aktiviert sein, für dennginx-prometheus-exporterkonfiguriert ist, um Metriken zu scrapen. In unserer Beispielaufgabendefinition istnginx-prometheus-exporterso konfiguriert, dass Metriken von Port 8080 gescrapet werden.
-
-
Erstellen Sie ein Image aus Dateien in Ihrem neuen Verzeichnis:
docker build -t nginx-reverse-proxy ./path-to-your-directory -
Laden Sie Ihre neuen Images zur späteren Verwendung in ein Bild-Repository hoch.
Erstellen Sie die Aufgabendefinition zum Ausführen von NGINX und der Webserver-App in Amazon ECS
Als Nächstes richten Sie die Aufgabendefinition ein.
Diese Aufgabendefinition ermöglicht das Sammeln und Exportieren von NGINX-Prometheus-Metriken. Der NGINX-Container verfolgt die Eingaben von der App und stellt diese Daten an Port 8080 bereit, wie in nginx.conf festgelegt. Der NGINX-Prometheus-Exporter-Container scrapet diese Metriken und sendet sie zur Verwendung in CloudWatch an Port 9113.
So richten Sie die Aufgabendefinition für die NGINX-Beispiel-Amazon ECS-Workload ein
-
Erstellen Sie eine Aufgabendefinitions-JSON-Datei mit dem folgenden Inhalt. Ersetzen Sie
your-custom-nginx-imagedurch den Image-URI für Ihr benutzerdefiniertes NGINX-Image und ersetzen Sieyour-web-server-app-imagedurch den Image-URI für Ihr Webserver-App-Image.{ "containerDefinitions": [ { "name": "nginx", "image": "your-customized-nginx-image", "memory": 256, "cpu": 256, "essential": true, "portMappings": [ { "containerPort": 80, "protocol": "tcp" } ], "links": [ "app" ] }, { "name": "app", "image": "your-web-server-app-image", "memory": 256, "cpu": 256, "essential": true }, { "name": "nginx-prometheus-exporter", "image": "docker.io/nginx/nginx-prometheus-exporter:0.8.0", "memory": 256, "cpu": 256, "essential": true, "command": [ "-nginx.scrape-uri", "http://nginx:8080/stub_status" ], "links":[ "nginx" ], "portMappings":[ { "containerPort": 9113, "protocol": "tcp" } ] } ], "networkMode": "bridge", "placementConstraints": [], "family": "nginx-sample-stack" } -
Registrieren Sie die Aufgabendefinition, indem Sie den folgenden Befehl eingeben.
aws ecs register-task-definition --cli-input-json file://path-to-your-task-definition-json -
Erstellen Sie einen Service zum Ausführen der Aufgabe, indem Sie den folgenden Befehl eingeben:
Stellen Sie sicher, dass Sie den Servicenamen nicht ändern. Wir führen einen CloudWatch-Agenten-Service mit einer Konfiguration aus, die mithilfe der Namensmuster der Services, die sie gestartet haben, nach Aufgaben sucht. Damit der CloudWatch-Agent beispielsweise die von diesem Befehl gestartete Aufgabe findet, können Sie den Wert von
sd_service_name_patternauf^nginx-service$festlegen. Im nächsten Abschnitt finden Sie weitere Details.aws ecs create-service \ --clusteryour-cluster-name\ --service-name nginx-service \ --task-definition nginx-sample-stack:1 \ --desired-count 1
Konfigurieren Sie den CloudWatch-Agenten zum Scraping von NGINX-Prometheus-Metriken
Der letzte Schritt besteht darin, den CloudWatch-Agent so zu konfigurieren, dass er die NGINX-Metriken kratzt. In diesem Beispiel erkennt der CloudWatch-Agent die Aufgabe über das Servicenamenmuster und den Port 9113, wo der Exporteur die Prometheus-Metriken für NGINX verfügbar macht. Nachdem die Aufgabe erkannt und die Metriken verfügbar sind, beginnt der CloudWatch-Agent, die erfassten Metriken an den Protokollstream nginx-prometheus-exporter zu senden.
So konfigurieren Sie den CloudWatch-Agent für das Scraping der NGINX-Metriken
-
Laden Sie die neueste Version der erforderlichen YAML-Datei herunter, indem Sie den folgenden Befehl eingeben.
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/cloudformation-quickstart/cwagent-ecs-prometheus-metric-for-bridge-host.yaml -
Öffnen Sie die Datei mit einem Texteditor und suchen Sie die vollständige CloudWatch-Agentenkonfiguration im Schlüssel
valueim Abschnittresource:CWAgentConfigSSMParameter. Fügen Sie dann imecs_service_discovery-Abschnitt den folgendenservice_name_list_for_tasks-Abschnitt hinzu."service_name_list_for_tasks": [ { "sd_job_name": "nginx-prometheus-exporter", "sd_metrics_path": "/metrics", "sd_metrics_ports": "9113", "sd_service_name_pattern": "^nginx-service$" } ], -
Fügen Sie in derselben Datei den folgenden Abschnitt im Abschnitt
metric_declarationhinzu, um NGINX-Metriken zuzulassen. Beachten Sie unbedingt das vorhandene Einrückungsmuster.{ "source_labels": ["job"], "label_matcher": ".*nginx.*", "dimensions": [["ClusterName", "TaskDefinitionFamily", "ServiceName"]], "metric_selectors": [ "^nginx_.*$" ] }, -
Wenn Sie den CloudWatch-Agenten noch nicht in diesem Cluster bereitgestellt haben, fahren Sie mit Schritt 8 fort.
Wenn Sie den CloudWatch-Agenten bereits mithilfe von AWS CloudFormation im Amazon-ECS-Cluster bereitgestellt haben, können Sie einen Änderungssatz erstellen, indem Sie die folgenden Befehle eingeben:
ECS_CLUSTER_NAME=your_cluster_nameAWS_REGION=your_aws_regionECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_nameECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_nameaws cloudformation create-change-set --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION \ --change-set-name nginx-scraping-support Öffnen Sie die CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Sehen Sie sich den neu erstellten Änderungssatz nginx-scraping-support an. Eine Änderung sollte auf die Ressource CWAgentConfigSSMParameter angewendet werden. Führen Sie den Änderungssatz aus, und starten Sie die CloudWatch-Agent-Aufgabe neu, indem Sie die folgenden Befehle eingeben:
aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION -
Warten Sie etwa 10 Sekunden und geben Sie den folgenden Befehl ein.
aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 1 \ --service cwagent-prometheus-replica-service-EC2-$ECS_NETWORK_MODE \ --region $AWS_REGION -
Wenn Sie den CloudWatch-Agent zum ersten Mal mit Prometheus-Metrik-Sammlung auf dem Cluster installieren, geben Sie die folgenden Befehle ein.
ECS_CLUSTER_NAME=your_cluster_nameAWS_REGION=your_aws_regionECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_nameECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_nameaws cloudformation create-stack --stack-name CWAgent-Prometheus-ECS-${ECS_CLUSTER_NAME}-EC2-${ECS_NETWORK_MODE} \ --template-body file://cwagent-ecs-prometheus-metric-for-bridge-host.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=CreateIAMRoles,ParameterValue=$CREATE_IAM_ROLES \ ParameterKey=ECSNetworkMode,ParameterValue=$ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION
Anzeigen Ihrer NGINX-Metriken und Protokolle
Sie können jetzt die gesammelten NGINX-Metriken anzeigen.
So zeigen Sie die Metriken für Ihren NGINX-Beispiel-Workload an
Öffnen Sie die CloudWatch-Konsole unter https://console.aws.amazon.com/cloudwatch/
. -
Wählen Sie in der Region, in der Ihr Cluster ausgeführt wird, im linken Navigationsbereich Metriken aus. Suchen Sie den ContainerInsights/Prometheus-Namespace, um die Metriken anzuzeigen.
-
Um die CloudWatch-Logs-Ereignisse anzuzeigen, wählen Sie im Navigationsbereich Log Groups (Protokollgruppen) aus. Die Ereignisse befinden sich in der Protokollgruppe /aws/containerinsights/
your_cluster_name/prometheus, im Protokoll-Streamnginx-prometheus-exporter.