Tutorial para adicionar um novo destino de extração do Prometheus: Redis OSS em clusters do Amazon EKS e do Kubernetes - Amazon CloudWatch

Tutorial para adicionar um novo destino de extração do Prometheus: Redis OSS em clusters do Amazon EKS e do Kubernetes

Este tutorial apresenta uma introdução prática para extrair as métricas do Prometheus de um exemplo de aplicação do Redis em um cluster do Amazon EKS e do Kubernetes. O Redis OSS (https://redis.io/) é um armazenamento de estrutura de dados em memória com código aberto (licença BSD), usado como banco de dados, cache e agente de mensagens. Para obter mais informações, consulte redis.

O redis_exporter (licença MIT) é usado para expor as métricas do Prometheus no Redis OSS na porta especificada (padrão: 0.0.0.0:9121). Para obter mais informações, consulte redis_exporter.

As imagens do Docker dos dois repositórios do Docker Hub a seguir são usadas neste tutorial:

Para instalar um exemplo de workload do Redis OSS que expõe as métricas do Prometheus
  1. Defina o namespace para a workload de exemplo do Redis OSS.

    REDIS_NAMESPACE=redis-sample
  2. Se você estiver executando o Redis OSS em um cluster com o tipo de inicialização do Fargate, precisará configurar um perfil do Fargate. Para configurar o perfil, insira o comando a seguir. Substitua MyCluster pelo nome do cluster.

    eksctl create fargateprofile --cluster MyCluster \ --namespace $REDIS_NAMESPACE --name $REDIS_NAMESPACE
  3. Instale a workload de exemplo do Redis inserindo o comando a seguir.

    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. A instalação inclui um serviço chamado my-redis-metrics que expõe a métrica do Prometheus no Redis OSS na porta 9121. Insira o seguinte comando para obter os detalhes do serviço:

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

    Na seção Annotations dos resultados, você verá duas anotações que correspondem à configuração de extração do Prometheus do atendente do CloudWatch, para que ele possa detectar as workloads automaticamente:

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

    A configuração de extração do Prometheus relacionada pode ser encontrada na seção - job_name: kubernetes-service-endpoints dekubernetes-eks.yaml ou kubernetes-k8s.yaml.

Para começar a coletar métricas do Prometheus no Redis OSS no CloudWatch
  1. Baixe a versão mais recente do arquivo kubernetes-eks.yaml ou kubernetes-k8s.yaml inserindo um dos comandos a seguir. Para um cluster do Amazon EKS com o tipo de inicialização do EC2, insira 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 um cluster do Amazon EKS com o tipo de inicialização do Fargate, insira 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

    Para um cluster do Kubernetes em execução em uma instância do Amazon EC2, insira 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-k8s.yaml
  2. Abra o arquivo com um editor de textos e localize a seção cwagentconfig.json. Adicione a seguinte subseção e salve as alterações. Verifique se o recuo segue o padrão existente.

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

    A seção que você adicionou coloca as métricas do Redis OSS na lista de permissões do agente do CloudWatch. Para obter a lista dessas métricas, consulte a seção a seguir.

  3. Se você já tem o atendente do CloudWatch com suporte ao Prometheus implantado nesse cluster, exclua-o inserindo o comando a seguir.

    kubectl delete deployment cwagent-prometheus -n amazon-cloudwatch
  4. Implante o atendente do CloudWatch com a configuração atualizada inserindo um dos comandos a seguir. Substitua MyCluster e region para corresponder a suas configurações.

    Para um cluster do Amazon EKS com o tipo de inicialização do EC2, insira este comando.

    kubectl apply -f prometheus-eks.yaml

    Para um cluster do Amazon EKS com o tipo de inicialização do Fargate, insira este comando.

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

    Para um cluster do Kubernetes, insira este comando.

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

Visualizar suas métricas do Prometheus no Redis OSS

Este tutorial envia as seguintes métricas ao namespace ContainerInsights/Prometheus no CloudWatch. É possível usar o console do CloudWatch para ver as métricas nesse namespace.

Nome da métrica Dimensões

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

O valor da dimensão cmd pode ser: append, client, command, config, dbsize, flushall, get, incr, info, latency ou slowlog.

Os valores da dimensão db podem ser db0 ou db15.

Também é possível criar um painel do CloudWatch para suas métricas do Prometheus no Redis OSS.

Para criar um painel para métricas do Prometheus no Redis OSS
  1. Crie variáveis de ambiente, substituindo os valores abaixo para corresponder a sua implantação.

    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. Use o comando a seguir para criar o painel.

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