Fehlerbehebung bei Prometheus-Metriken in Amazon ECS - Amazon CloudWatch

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Fehlerbehebung bei Prometheus-Metriken in Amazon ECS

Dieser Abschnitt bietet Hilfe bei der Fehlerbehebung bei der Einrichtung von Prometheus-Metriken in Amazon-ECS-Clustern.

Ich sehe keine an Logs gesendeten Prometheus-Metriken CloudWatch

Die Prometheus-Metriken sollten als Protokollereignisse in der Protokollgruppe/aufgenommen werden. aws/ecs/containerinsights/cluster-name/Prometheus Wenn die Protokollgruppe nicht erstellt wurde oder die Prometheus-Metriken nicht an die Protokollgruppe gesendet werden, müssen Sie zunächst überprüfen, ob die Prometheus-Ziele erfolgreich vom Agenten erkannt wurden. CloudWatch Überprüfen Sie als Nächstes die Sicherheitsgruppen und die Berechtigungseinstellungen des Agenten. CloudWatch Die folgenden Schritte führen Sie zum Debuggen.

Schritt 1: Aktivieren Sie den CloudWatch Agenten-Debugging-Modus

Ändern Sie zunächst den CloudWatch Agenten in den Debug-Modus, indem Sie Ihrer AWS CloudFormation Vorlagendatei die folgenden fetten Zeilen hinzufügen, cwagent-ecs-prometheus-metric-for-bridge-host.yaml oder. cwagent-ecs-prometheus-metric-for-awsvpc.yaml Speichern Sie dann die Datei.

cwagentconfig.json: | { "agent": { "debug": true }, "logs": { "metrics_collected": {

Erstellen Sie ein neues AWS CloudFormation Changeset für den vorhandenen Stack. Setzen Sie andere Parameter im Changeset auf dieselben Werte wie in Ihrem vorhandenen Stack. AWS CloudFormation Das folgende Beispiel bezieht sich auf einen CloudWatch Agenten, der in einem Amazon ECS-Cluster unter Verwendung des EC2 Starttyps und des Bridge-Netzwerkmodus installiert ist.

ECS_NETWORK_MODE=bridge CREATE_IAM_ROLES=True ECS_TASK_ROLE_NAME=your_selected_ecs_task_role_name ECS_EXECUTION_ROLE_NAME=your_selected_ecs_execution_role_name NEW_CHANGESET_NAME=your_selected_ecs_execution_role_name aws 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 $NEW_CHANGESET_NAME

Gehen Sie zur AWS CloudFormation Konsole, um das neue Changeset zu überprüfen,. $NEW_CHANGESET_NAME Es sollte eine Änderung an der CWAgentSSMParameterConfig-Ressource vorgenommen werden. Führen Sie das Changeset aus und starten Sie die CloudWatch Agententask neu, indem Sie die folgenden Befehle eingeben.

aws ecs update-service --cluster $ECS_CLUSTER_NAME \ --desired-count 0 \ --service your_service_name_here \ --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 your_service_name_here \ --region $AWS_REGION

Schritt 2: Prüfen der ECS-Serviceerkennungsprotokolle

Die ECS-Aufgabendefinition des CloudWatch Agenten aktiviert die Protokolle standardmäßig im folgenden Abschnitt. Die Protokolle werden an CloudWatch Logs in der Protokollgruppe ecs-cwagent-prometheus/ecs/ gesendet.

LogConfiguration: LogDriver: awslogs Options: awslogs-create-group: 'True' awslogs-group: "/ecs/ecs-cwagent-prometheus" awslogs-region: !Ref AWS::Region awslogs-stream-prefix: !Sub 'ecs-${ECSLaunchType}-awsvpc'

Filtern Sie die Protokolle nach der Zeichenfolge ECS_SD_Stats, um die Metriken im Zusammenhang mit der ECS-Serviceerkennung abzurufen, wie im folgenden Beispiel gezeigt.

2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeContainerInstances: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeInstancesRequest: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_DescribeTasks: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: AWSCLI_ListTasks: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: Exporter_DiscoveredTargetCount: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_EC2MetaData: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Get_TaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_ContainerInstance: 1 2020-09-1T01:53:14Z D! ECS_SD_Stats: LRUCache_Size_TaskDefinition: 2 2020-09-1T01:53:14Z D! ECS_SD_Stats: Latency: 43.399783ms

Die Bedeutung jeder Metrik für einen bestimmten ECS-Serviceerkennungszyklus lautet wie folgt:

  • AWSCLI_DescribeContainerInstances— die Anzahl der getätigten ECS::DescribeContainerInstances API-Aufrufe.

  • AWSCLI_DescribeInstancesRequest— die Anzahl der ECS::DescribeInstancesRequest getätigten API-Aufrufe.

  • AWSCLI_DescribeTaskDefinition— die Anzahl der ECS::DescribeTaskDefinition getätigten API-Aufrufe.

  • AWSCLI_DescribeTasks— die Anzahl der ECS::DescribeTasks getätigten API-Aufrufe.

  • AWSCLI_ListTasks— die Anzahl der ECS::ListTasks getätigten API-Aufrufe.

  • ExporterDiscoveredTargetCount— die Anzahl der Prometheus-Ziele, die entdeckt und erfolgreich in die Zielergebnisdatei im Container exportiert wurden.

  • LRUCache_Get_ EC2 MetaData — die Häufigkeit, mit der Metadaten von Container-Instances aus dem Cache abgerufen wurden.

  • LRUCache_Get_ TaskDefinition — die Häufigkeit, mit der Metadaten der ECS-Aufgabendefinition aus dem Cache abgerufen wurden.

  • LRUCache_Size_ ContainerInstance — die Anzahl der Metadaten einer eindeutigen Container-Instance, die im Speicher zwischengespeichert wurden.

  • LRUCache_Size_ TaskDefinition — die Anzahl der eindeutigen ECS-Aufgabendefinitionen, die im Speicher zwischengespeichert sind.

  • Latency – wie lange der Service-Discovery-Zyklus dauert.

Überprüfen Sie den Wert von ExporterDiscoveredTargetCount, um zu sehen, ob die erkannten Prometheus-Ziele Ihren Erwartungen entsprechen. Wenn nicht, sind die möglichen Gründe wie folgt:

  • Die Konfiguration der ECS-Serviceerkennung stimmt möglicherweise nicht mit der Einstellung Ihrer Anwendung überein. Für die auf Docker-Labels basierende Diensterkennung ist für Ihre Zielcontainer möglicherweise nicht das erforderliche Docker-Label im CloudWatch Agenten konfiguriert, um sie auto zu erkennen. Für die auf regulären Ausdrücken basierende ARN-Diensterkennung für die ECS-Aufgabendefinition stimmt die Regex-Einstellung im CloudWatch Agenten möglicherweise nicht mit der Aufgabendefinition Ihrer Anwendung überein.

  • Die ECS-Aufgabenrolle des CloudWatch Agenten ist möglicherweise nicht berechtigt, die Metadaten von ECS-Aufgaben abzurufen. Vergewissern Sie sich, dass dem CloudWatch Agenten die folgenden Nur-Lese-Berechtigungen gewährt wurden:

    • ec2:DescribeInstances

    • ecs:ListTasks

    • ecs:DescribeContainerInstances

    • ecs:DescribeTasks

    • ecs:DescribeTaskDefinition

Schritt 3: Überprüfen Sie die Netzwerkverbindung und die ECS-Aufgabenrollenrichtlinie

Wenn immer noch keine Protokollereignisse an die CloudWatch Log-Zielgruppe Logs gesendet werden, obwohl der Wert von Exporter_DiscoveredTargetCount angibt, dass es entdeckte Prometheus-Ziele gibt, kann dies folgende Ursachen haben:

  • Der CloudWatch Agent kann möglicherweise keine Verbindung zu den Prometheus-Zielports herstellen. Überprüfen Sie die Sicherheitsgruppeneinstellung hinter dem CloudWatch Agenten. Die private IP sollte es dem CloudWatch Agenten ermöglichen, eine Verbindung zu den Prometheus-Exporter-Ports herzustellen.

  • Die ECS-Aufgabenrolle des CloudWatch Agenten verfügt möglicherweise nicht über die verwaltete Richtlinie. CloudWatchAgentServerPolicy Die ECS-Aufgabenrolle des CloudWatch Agenten muss über diese Richtlinie verfügen, um die Prometheus-Metriken als Protokollereignisse senden zu können. Wenn Sie die AWS CloudFormation Beispielvorlage verwendet haben, um die IAM-Rollen automatisch zu erstellen, werden sowohl der ECS-Aufgabenrolle als auch der ECS-Ausführungsrolle die geringste Berechtigung zur Durchführung der Prometheus-Überwachung gewährt.