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
-
Defina o namespace para a workload de exemplo do Redis OSS.
REDIS_NAMESPACE=redis-sample
-
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 -
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 -
-
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
oukubernetes-k8s.yaml
.
Para começar a coletar métricas do Prometheus no Redis OSS no CloudWatch
-
Baixe a versão mais recente do arquivo
kubernetes-eks.yaml
oukubernetes-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
-
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.
-
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
-
Implante o atendente do CloudWatch com a configuração atualizada inserindo um dos comandos a seguir. Substitua
MyCluster
eregion
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 |
---|---|
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
|
ClusterName, |
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
-
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
-
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" \