Tutorial zum Hinzufügen eines neuen Prometheus-Scrape-Ziels: Redis OSS auf Amazon-EKS- und Kubernetes-Clustern - Amazon CloudWatch

Tutorial zum Hinzufügen eines neuen Prometheus-Scrape-Ziels: Redis OSS auf Amazon-EKS- und Kubernetes-Clustern

Dieses Tutorial bietet eine praktische Einführung zum Scraping der Prometheus-Metriken einer Redis-OSS-Beispielanwendung auf Amazon EKS und Kubernetes. Redis OSS (https://redis.io/) ist ein Open Source (BSD lizenziert), In-Memory-Datenstrukturspeicher, der als Datenbank, Cache und Message Broker verwendet wird. Weitere Informationen finden Sie unter redis.

redis_exporter (mit MIT-Lizenz lizenziert) wird verwendet, um die Redis-OSS-Prometheus-Metriken auf dem angegebenen Port verfügbar zu machen (Standard: 0.0.0.0:9121). Weitere Informationen finden Sie unter redis_exporter.

Die Docker-Images in den folgenden zwei Docker Hub-Repositories werden in diesem Tutorial verwendet:

So installieren Sie eine Redis-OSS-Beispiel-Workload, die Prometheus-Metriken verfügbar macht
  1. Legen Sie den Namespace für die Redis-OSS-Beispiel-Workload fest.

    REDIS_NAMESPACE=redis-sample
  2. Wenn Sie Redis OSS auf einem Cluster mit dem Starttyp Fargate ausführen, müssen Sie ein Fargate-Profil einrichten. Geben Sie zum Einrichten des Profils den folgenden Befehl ein. Ersetzen Sie MyCluster durch den Namen Ihres Clusters.

    eksctl create fargateprofile --cluster MyCluster \ --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
  3. Geben Sie den folgenden Befehl ein, um die Redis-OSS-Beispiel-Workload zu installieren.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_traffic/redis/redis-traffic-sample.yaml \ | sed "s/{{namespace}}/$REDIS_NAMESPACE/g" \ | kubectl apply -f -
  4. Die Installation umfasst einen Service namens my-redis-metrics, der die Redis-OSS-Prometheus-Metrik auf Port 9121 verfügbar macht. Geben Sie den folgenden Befehl ein, um die Details des Services abzurufen:

    kubectl describe service/my-redis-metrics -n $REDIS_NAMESPACE

    Im Abschnitt Annotations der Ergebnisse sehen Sie zwei Anmerkungen, die der Scrape-Konfiguration von Prometheus des CloudWatch-Agenten entsprechen, damit er die Workloads automatisch erkennen kann:

    prometheus.io/port: 9121 prometheus.io/scrape: true

    Die zugehörige Prometheus-Scrape-Konfiguration finden Sie im - job_name: kubernetes-service-endpoints-Abschnitt von kubernetes-eks.yaml oder kubernetes-k8s.yaml.

So beginnen Sie mit der Erfassung von Redis-OSS-Prometheus-Metriken in CloudWatch
  1. Laden Sie die aktuelle Version der kubernetes-eks.yaml- oder kubernetes-k8s.yaml-Datei herunter, indem Sie einen der folgenden Befehle eingeben. Geben Sie diesen Befehl für einen Amazon-EKS-Cluster mit dem EC2-Starttyp ein.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks.yaml

    Geben Sie diesen Befehl für einen Amazon-EKS-Cluster mit dem Fargate-Starttyp ein.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-eks-fargate.yaml

    Geben Sie für einen Kubernetes-Cluster, der auf einer Amazon-EC2-Instance ausgeführt wird, diesen Befehl ein.

    curl -O https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/prometheus-k8s.yaml
  2. Öffnen Sie die Datei mit einem Texteditor und suchen Sie den Abschnitt cwagentconfig.json. Fügen Sie den folgenden Unterabschnitt hinzu und speichern Sie die Änderungen. Stellen Sie sicher, dass die Einrückung dem vorhandenen Muster folgt.

    { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName"]], "metric_selectors": [ "^redis_net_(in|out)put_bytes_total$", "^redis_(expired|evicted)_keys_total$", "^redis_keyspace_(hits|misses)_total$", "^redis_memory_used_bytes$", "^redis_connected_clients$" ] }, { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName","cmd"]], "metric_selectors": [ "^redis_commands_total$" ] }, { "source_labels": ["pod_name"], "label_matcher": "^redis-instance$", "dimensions": [["Namespace","ClusterName","db"]], "metric_selectors": [ "^redis_db_keys$" ] },

    In dem hinzugefügten Abschnitt werden die Redis-OSS-Metriken in die Zulassungsliste des CloudWatch Agenten eingefügt. Eine Liste dieser Metriken finden Sie im folgenden Abschnitt.

  3. Wenn der CloudWatch-Agent mit Prometheus-Unterstützung bereits in dem Cluster bereitgestellt ist, müssen Sie ihn löschen, indem Sie den folgenden Befehl eingeben.

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  4. Stellen Sie den CloudWatch-Agenten mit Ihrer aktualisierten Konfiguration bereit, indem Sie einen der folgenden Befehle eingeben. Ersetzen Sie MyCluster und Region entsprechend Ihren Einstellungen.

    Geben Sie diesen Befehl für einen Amazon-EKS-Cluster mit dem EC2-Starttyp ein.

    kubectl apply -f prometheus-eks.yaml

    Geben Sie diesen Befehl für einen Amazon-EKS-Cluster mit dem Fargate-Starttyp ein.

    cat prometheus-eks-fargate.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

    Geben Sie für einen Kubernetes-Cluster folgenden Befehl ein.

    cat prometheus-k8s.yaml \ | sed "s/{{cluster_name}}/MyCluster/;s/{{region_name}}/region/" \ | kubectl apply -f -

Anzeigen Ihrer Redis-OSS-Prometheus-Metriken

Dieses Tutorial sendet die folgenden Metriken an den ContainerInsights/Prometheus-Namespace in CloudWatch. Sie können die CloudWatch-Konsole verwenden, um die Metriken in diesem Namespace anzuzeigen.

Metrikname Dimensions (Abmessungen)

redis_net_input_bytes_total

ClusterName, Namespace

redis_net_output_bytes_total

ClusterName, Namespace

redis_expired_keys_total

ClusterName, Namespace

redis_evicted_keys_total

ClusterName, Namespace

redis_keyspace_hits_total

ClusterName, Namespace

redis_keyspace_misses_total

ClusterName, Namespace

redis_memory_used_bytes

ClusterName, Namespace

redis_connected_clients

ClusterName, Namespace

redis_commands_total

ClusterName, Namespace, cmd

redis_db_keys

ClusterName, Namespace, db

Anmerkung

Die Werte der cmd-Dimension können append, client, command, config, dbsize, flushall, get, incr, info, latency oder slowlog sein.

Die Werte der Db-Dimension können db0 oder db15 sein.

Sie können auch ein CloudWatch Dashboard für Ihre Redis-OSS-Prometheus-Metriken erstellen.

So erstellen Sie ein Dashboard für Redis-OSS-Prometheus-Metriken
  1. Erstellen Sie Umgebungsvariablen und ersetzen Sie die folgenden Werte entsprechend Ihrer Bereitstellung.

    DASHBOARD_NAME=your_cw_dashboard_name REGION_NAME=your_metric_region_such_as_us-east-1 CLUSTER_NAME=your_k8s_cluster_name_here NAMESPACE=your_redis_service_namespace_here
  2. Verwenden Sie den folgenden Befehl, um das Dashboard zu erstellen.

    curl https://raw.githubusercontent.com/aws-samples/amazon-cloudwatch-container-insights/latest/k8s-deployment-manifest-templates/deployment-mode/service/cwagent-prometheus/sample_cloudwatch_dashboards/redis/cw_dashboard_redis.json \ | sed "s/{{YOUR_AWS_REGION}}/${REGION_NAME}/g" \ | sed "s/{{YOUR_CLUSTER_NAME}}/${CLUSTER_NAME}/g" \ | sed "s/{{YOUR_NAMESPACE}}/${NAMESPACE}/g" \