Tutorial para agregar un nuevo destino de raspado de Prometheus: Redis OSS en clústeres de Amazon EKS y de Kubernetes - Amazon CloudWatch

Tutorial para agregar un nuevo destino de raspado de Prometheus: Redis OSS en clústeres de Amazon EKS y de Kubernetes

Este tutorial proporciona una introducción práctica para raspar las métricas de Prometheus de una aplicación de muestra de Redis OSS en Amazon EKS y Kubernetes. Redis OSS (https://redis.io/) es un almacén de estructuras de datos en memoria de código abierto (con licencia BSD), utilizado como base de datos, caché y agente de mensajes. Para obtener más información, consulte redis.

redis_exporter (con licencia MIT) se utiliza para exponer las métricas de Redis OSS Prometheus en el puerto especificado (predeterminado: 0.0.0.0:9121). Para obtener más información, consulte redis_exporter.

En este tutorial se utilizan las imágenes de Docker en los siguientes dos repositorios de Docker Hub:

Para instalar una carga de trabajo de Redis OSS de muestra que exponga las métricas de Prometheus
  1. Establezca el espacio de nombres para la carga de trabajo de Redis OSS de muestra.

    REDIS_NAMESPACE=redis-sample
  2. Si ejecuta Redis OSS en un clúster con el tipo de lanzamiento de Fargate, debe configurar un perfil de Fargate. Para configurar el perfil, ingrese el siguiente comando: Sustituya MyCluster por el nombre del clúster.

    eksctl create fargateprofile --cluster MyCluster \ --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
  3. Ingrese el siguiente comando para instalar la carga de trabajo de Redis OSS de muestra.

    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. La instalación incluye un servicio llamado my-redis-metrics que expone la métrica de Redis OSS Prometheus en el puerto 9121; ingrese el siguiente comando para obtener los detalles del servicio:

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

    En la sección Annotations de los resultados, verá dos anotaciones que concuerdan con la configuración de raspado de Prometheus del agente de CloudWatch, para que pueda detectar automáticamente las cargas de trabajo:

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

    La configuración de raspado de Prometheus relacionada se encuentra en la sección - job_name: kubernetes-service-endpointsde kubernetes-eks.yaml o kubernetes-k8s.yaml.

Para empezar a recopilar métricas de Redis OSS Prometheus en CloudWatch
  1. Descargue la última versión del archivo de kubernetes-eks.yaml o el archivo kubernetes-k8s.yaml con uno de los siguientes comandos. Para un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese este comando.

    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

    Para un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese este comando.

    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

    En los clústeres de Kubernetes que se ejecuten en una instancia de Amazon EC2, ingrese el siguiente comando.

    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. Abra el archivo con un editor de texto y busque la sección cwagentconfig.json. Agregue la subsección siguiente y guarde los cambios. Asegúrese de seguir el patrón existente de sangría.

    { "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$" ] },

    La sección que agregó coloca las métricas de Redis OSS en la lista de permitidos del agente de CloudWatch. Para obtener la lista de estas métricas, consulte la siguiente sección.

  3. Si el agente de CloudWatch compatible con Prometheus ya está implementado en el clúster, debe eliminarlo con el siguiente comando:

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  4. Implemente el agente de CloudWatch con la configuración actualizada con uno de los siguientes comandos. Reemplace MyCluster y la Región para que concuerde con la configuración.

    Para un clúster de Amazon EKS con el tipo de lanzamiento de EC2, ingrese este comando.

    kubectl apply -f prometheus-eks.yaml

    Para un clúster de Amazon EKS con el tipo de lanzamiento de Fargate, ingrese este comando.

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

    Para un clúster de Kubernetes, escriba este comando:

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

Visualización de las métricas de Redis OSS Prometheus

En este tutorial se envían las siguientes métricas al espacio de nombres ContainerInsights/Prometheus en CloudWatch. Puede utilizar la consola de CloudWatch para ver las métricas de ese espacio de nombres.

Nombre de métrica Dimensiones

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

nota

Los valores de la dimensión cmd pueden ser: append, client, command, config, dbsize, flushall, get, incr, info, latency o slowlog.

Los valores de la dimensión db pueden ir de db0 a db15.

También puede crear un panel de CloudWatch para las métricas de Redis OSS Prometheus.

Para crear un panel para las métricas de Redis OSS Prometheus
  1. Cree variables de entorno mediante el reemplazo de los siguientes valores para que concuerden con la implementación.

    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. Ingrese el siguiente comando para crear el panel.

    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" \