Tutorial zum Hinzufügen eines neuen Prometheus-Scrape-Ziels: Memcached auf Amazon ECS
Dieses Tutorial bietet eine praktische Einführung in die Prometheus-Metriken einer Memcached-Beispielanwendung auf einem Amazon-ECS-Cluster mit dem EC2-Starttyp. Das Memcached-Prometheus-Exportziel wird vom CloudWatch-Agenten automatisch durch ECS-Aufgabendefinitionsbasierte Service-Discovery erkannt.
Memcached ist ein universelles verteiltes Speicherzwischenspeicher-Caching-System. Es wird häufig verwendet, um dynamische datenbankgesteuerte Websites zu beschleunigen, indem Daten und Objekte im RAM zwischengespeichert werden, um die Häufigkeit des Lesens einer externen Datenquelle (z. B. einer Datenbank oder API) zu reduzieren. Weitere Informationen finden Sie unter Was ist Memcached?
Der memchached_exporter/metrics.
Die Docker-Images in den folgenden zwei Docker Hub-Repositories werden in diesem Tutorial verwendet:
Voraussetzung
Um Metriken aus einem Prometheus-Beispiel-Workload für Amazon ECS zu erfassen, müssen Sie Container Insights im Cluster ausführen. Informationen zur Installation von Container Insights finden Sie unter Einrichten von Container Insights für Amazon ECS.
Themen
Legen Sie die Umgebungsvariablen des EC2-Clusters von Amazon ECS fest
Festlegen Umgebungsvariablen des EC2-Clusters von Amazon ECS
-
Installieren Sie die Amazon ECS-CLI, falls noch nicht geschehen. Weitere Informationen finden Sie unter Installieren der Amazon-ECS-CLI.
-
Legen Sie den neuen Amazon-ECS-Clusternamen und die Region fest. Zum Beispiel:
ECS_CLUSTER_NAME=ecs-ec2-memcached-tutorial AWS_DEFAULT_REGION=ca-central-1 -
(Optional) Wenn Sie noch keinen Amazon-ECS-Cluster mit dem Starttyp EC2 haben, in dem Sie den Memcached-Beispiel-Workload und den CloudWatch-Agenten installieren möchten, können Sie einen erstellen, indem Sie den folgenden Befehl eingeben.
ecs-cli up --capability-iam --size 1 \ --instance-type t3.medium \ --cluster $ECS_CLUSTER_NAME \ --region $AWS_REGIONDas erwartete Ergebnis dieses Befehls lautet wie folgt:
WARN[0000] You will not be able to SSH into your EC2 instances without a key pair. INFO[0000] Using recommended Amazon Linux 2 AMI with ECS Agent 1.44.4 and Docker version 19.03.6-ce INFO[0001] Created cluster cluster=ecs-ec2-memcached-tutorial region=ca-central-1 INFO[0002] Waiting for your cluster resources to be created... INFO[0002] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0063] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS INFO[0124] Cloudformation stack status stackStatus=CREATE_IN_PROGRESS VPC created: vpc-xxxxxxxxxxxxxxxxx Security Group created: sg-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Subnet created: subnet-xxxxxxxxxxxxxxxxx Cluster creation succeeded.
Installieren der Memcached-Beispiel-Workload
So installieren Sie eine Memcached-Beispiel-Workload, die Prometheus-Metriken verfügbar macht
-
Laden Sie die CloudFormation-Memcached-Vorlage herunter, indem Sie einen der folgenden Befehle eingeben.
curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_traffic/memcached/memcached-traffic-sample.yaml -
Legen Sie die für Memcached zu erstellenden IAM-Rollennamen fest, indem Sie die folgenden Befehle eingeben.
MEMCACHED_ECS_TASK_ROLE_NAME=memcached-prometheus-demo-ecs-task-role-name MEMCACHED_ECS_EXECUTION_ROLE_NAME=memcached-prometheus-demo-ecs-execution-role-name -
Installieren Sie die Memcached-Beispiel-Workload, indem Sie den folgenden Befehl eingeben. Dieses Beispiel installiert die Workload im
host-Netzwerkmodus.MEMCACHED_ECS_NETWORK_MODE=host aws cloudformation create-stack --stack-name Memcached-Prometheus-Demo-ECS-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MODE \ --template-body file://memcached-traffic-sample.yaml \ --parameters ParameterKey=ECSClusterName,ParameterValue=$ECS_CLUSTER_NAME \ ParameterKey=ECSNetworkMode,ParameterValue=$MEMCACHED_ECS_NETWORK_MODE \ ParameterKey=TaskRoleName,ParameterValue=$MEMCACHED_ECS_TASK_ROLE_NAME \ ParameterKey=ExecutionRoleName,ParameterValue=$MEMCACHED_ECS_EXECUTION_ROLE_NAME \ --capabilities CAPABILITY_NAMED_IAM \ --region $AWS_REGION
Das CloudFormation-Stack erstellt vier Ressourcen:
-
Eine ECS-Aufgabenrolle
-
Eine ECS-Aufgabenausführungsrolle
-
Eine Memcached-Aufgabendefinition
-
Ein Memcached-Service
In der Memcached-Aufgabendefinition werden zwei Container definiert:
-
Der primäre Container führt eine einfache Memcached-Anwendung aus und öffnet Port 11211 für den Zugriff.
-
Der andere Container führt den Redis-OSS-Exportprozess aus, um die Prometheus-Metriken auf Port 9150 verfügbar zu machen. Dies ist der Container, der vom CloudWatch-Agent erkannt und gescrapet werden soll.
Konfigurieren Sie den CloudWatch-Agenten zum Scraping von Memcached-Prometheus-Metriken
Konfigurieren Sie den CloudWatch-Agenten zum Scraping von Memcached-Prometheus-Metriken
-
Laden Sie die aktuelle Version der
cwagent-ecs-prometheus-metric-for-awsvpc.yamlherunter, indem Sie einen der folgenden Befehle 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-awsvpc.yaml -
Öffnen Sie die Datei mit einem Texteditor und suchen Sie die vollständige CloudWatch-Agentenkonfiguration hinter dem Schlüssel
valueim Abschnittresource:CWAgentConfigSSMParameter.Fügen Sie dann im
ecs_service_discovery-Abschnitt die folgende Konfiguration zumtask_definition_list-Abschnitt hinzu.{ "sd_job_name": "ecs-memcached", "sd_metrics_ports": "9150", "sd_task_definition_arn_pattern": ".*:task-definition/memcached-prometheus-demo.*:[0-9]+" },Für den
metric_declaration-Abschnitt lässt die Standardeinstellung keine Memcached-Metriken zu. Fügen Sie den folgenden Abschnitt hinzu, um Memcached-Metriken zuzulassen. Beachten Sie unbedingt das vorhandene Einrückungsmuster.{ "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily"]], "metric_selectors": [ "^memcached_current_(bytes|items|connections)$", "^memcached_items_(reclaimed|evicted)_total$", "^memcached_(written|read)_bytes_total$", "^memcached_limit_bytes$", "^memcached_commands_total$" ] }, { "source_labels": ["container_name"], "label_matcher": "memcached-exporter-.*", "dimensions": [["ClusterName", "TaskDefinitionFamily","status","command"], ["ClusterName", "TaskDefinitionFamily","command"]], "metric_selectors": [ "^memcached_commands_total$" ] }, -
Wenn Sie den CloudWatch-Agenten bereits mithilfe von CloudFormation im Amazon-ECS-Cluster bereitgestellt haben, können Sie einen Änderungssatz erstellen, indem Sie die folgenden Befehle eingeben.
ECS_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 memcached-scraping-support Öffnen Sie die CloudFormation-Konsole unter https://console.aws.amazon.com/cloudformation
. -
Überprüfen des neu erstellten Änderungssatzes
memcached-scraping-support. Sie sollten sehen, dass eine Änderung auf dieCWAgentConfigSSMParameter-Ressource angewendet wurde. 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_NETWORK_MODEE=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 Memcached-Metriken
Dieses Tutorial sendet die folgenden Metriken an den ECS/ContainerInsights/Prometheus-Namespace in CloudWatch. Sie können die CloudWatch-Konsole verwenden, um die Metriken in diesem Namespace anzuzeigen.
| Metrikname | Dimensions (Abmessungen) |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Anmerkung
Die Werte der command-Dimension können delete, get, cas, set, decr, touch, incr, oder flush sein.
Die Werte der -Dimension können , hit, miss, oder badval sein.
Sie können auch ein CloudWatch Dashboard für Ihre Memcached-Prometheus-Metriken erstellen.
So erstellen Sie ein Dashboard für Memcached-Prometheus-Metriken
-
Erstellen Sie Umgebungsvariablen und ersetzen Sie die folgenden Werte entsprechend Ihrer Bereitstellung.
DASHBOARD_NAME=your_memcached_cw_dashboard_nameECS_TASK_DEF_FAMILY=memcached-prometheus-demo-$ECS_CLUSTER_NAME-EC2-$MEMCACHED_ECS_NETWORK_MOD -
Verwenden Sie den folgenden Befehl, um das Dashboard zu erstellen.
curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/ecs-task-definition-templates/deployment-mode/replica-service/cwagent-prometheus/sample_cloudwatch_dashboards/memcached/cw_dashboard_memcached.json \ | sed "s/{{YOUR_AWS_REGION}}/$AWS_REGION/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/$ECS_CLUSTER_NAME/g" \ | sed "s/{{YOUR_TASK_DEF_FAMILY}}/$ECS_TASK_DEF_FAMILY/g" \ | xargs -0 aws cloudwatch put-dashboard --dashboard-name ${DASHBOARD_NAME} --region $AWS_REGION --dashboard-body