Usando um coletor AWS gerenciado - Amazon Managed Service para Prometheus

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Usando um coletor AWS gerenciado

Para usar um coletor do Amazon Managed Service for Prometheus, é necessário criar um extrator que descubra e extraia métricas no cluster do Amazon EKS.

  • É possível criar um extrator como parte da criação do cluster do Amazon EKS. Para obter mais informações sobre a criação de um cluster do Amazon EKS, incluindo a criação de um extrator, consulte Criar um cluster do Amazon EKS no Guia do usuário do Amazon EKS.

  • Você pode criar seu próprio raspador, programaticamente com a AWS API ou usando o. AWS CLI

nota

Os espaços de trabalho do Amazon Managed Service for Prometheus criados com chaves gerenciadas pelo cliente não podem AWS usar coletores gerenciados para ingestão.

Um coletor do Amazon Managed Service for Prometheus extrai métricas compatíveis com o Prometheus. Para obter mais informações sobre as métricas compatíveis com o Prometheus, consulte O que são métricas compatíveis com o Prometheus?.

Os tópicos a seguir descrevem como criar, gerenciar e configurar extratores.

Criar um extrator

Um coletor do Amazon Managed Service for Prometheus consiste em um extrator que descobre e coleta métricas de um cluster do Amazon EKS. O Amazon Managed Service for Prometheus gerencia o extrator para você, fornecendo a escalabilidade, a segurança e a confiabilidade necessárias, sem que você precise gerenciar instâncias, agentes ou extratores por conta própria.

Um extrator é criado automaticamente para você ao criar um cluster do Amazon EKS por meio do console do Amazon EKS. No entanto, em algumas situações, talvez você queira criar um extrator por conta própria. Por exemplo, se você quiser adicionar um coletor AWS gerenciado a um cluster Amazon EKS existente ou se quiser alterar a configuração de um coletor existente.

Você pode criar um raspador usando a AWS API ou o. AWS CLI

Há alguns pré-requisitos para a criação de um extrator próprio:

  • É necessário ter um cluster do Amazon EKS.

  • O cluster do Amazon EKS deve ter o controle de acesso ao endpoint do cluster definido para incluir acesso privado. Ele pode incluir o privado e o público, mas deve incluir o privado.

nota

O cluster será associado ao raspador pelo nome de recurso da Amazon (ARN). Se você excluir um cluster e criar um novo com o mesmo nome, o ARN será reutilizado para o novo cluster. Por esse motivo, o raspador tentará coletar métricas para o novo cluster. Você exclui os raspadores separadamente da exclusão do cluster.

AWS API

Para criar um raspador usando a API AWS

Use a operação da API CreateScraper para criar um extrator com a API da AWS . O exemplo a seguir cria um extrator na região us-west-2. Você precisa substituir as informações do espaço de trabalho Conta da AWS, da segurança e do cluster do Amazon EKS por suas próprias IDs e fornecer a configuração a ser usada para seu raspador.

nota

É necessário incluir, pelo menos, duas sub-redes em, pelo menos, duas zonas de disponibilidade.

scrapeConfiguration é um arquivo YAML de configuração do Prometheus codificado em base64. É possível baixar uma configuração de uso geral com a operação GetDefaultScraperConfiguration da API. Para obter mais informações sobre o formato doscrapeConfiguration, consulteConfiguração do extrator.

POST /scrapers HTTP/1.1 Content-Length: 415 Authorization: AUTHPARAMS X-Amz-Date: 20201201T193725Z User-Agent: aws-cli/1.18.147 Python/2.7.18 Linux/5.4.58-37.125.amzn2int.x86_64 botocore/1.18.6 { "alias": "myScraper", "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id" } }, "source": { "eksConfiguration": { "clusterArn": "arn:aws:eks:us-west-2:account-id:cluster/cluster-name", "securityGroupIds": ["sg-security-group-id"], "subnetIds": ["subnet-subnet-id-1", "subnet-subnet-id-2"] } }, "scrapeConfiguration": { "configurationBlob": <base64-encoded-blob> } }
AWS CLI

Para criar um raspador usando o AWS CLI

Use o create-scraper comando para criar um raspador com o. AWS CLI O exemplo a seguir cria um extrator na região us-west-2. Você precisa substituir as informações do espaço de trabalho Conta da AWS, da segurança e do cluster do Amazon EKS por suas próprias IDs e fornecer a configuração a ser usada para seu raspador.

nota

É necessário incluir, pelo menos, duas sub-redes em, pelo menos, duas zonas de disponibilidade.

scrape-configuration é um arquivo YAML de configuração do Prometheus codificado em base64. Você pode baixar uma configuração de uso geral com o get-default-scraper-configuration comando. Para obter mais informações sobre o formato doscrape-configuration, consulteConfiguração do extrator.

aws amp create-scraper \ --source eksConfiguration="{clusterArn='arn:aws:eks:us-west-2:account-id:cluster/cluster-name', securityGroupIds=['sg-security-group-id'],subnetIds=['subnet-subnet-id-1', 'subnet-subnet-id-2']}" \ --scrape-configuration configurationBlob=<base64-encoded-blob> \ --destination ampConfiguration="{workspaceArn='arn:aws:aps:us-west-2:account-id:workspace/ws-workspace-id'}"

Veja a seguir uma lista completa das operações do extrator que você pode usar com a API da AWS :

nota

O cluster do Amazon EKS que você está extraindo deve ser configurado para permitir que o Amazon Managed Service for Prometheus acesse as métricas. O próximo tópico descreve como configurar o cluster.

Erros comuns ao criar raspadores

A seguir estão os problemas mais comuns ao tentar criar um novo raspador.

  • AWS Os recursos necessários não existem. O grupo de segurança, a sub-rede e o cluster Amazon EKS especificados devem existir.

  • Espaço de endereço IP insuficiente. Você deve ter pelo menos um endereço IP disponível em cada sub-rede que você passa para a CreateScraper API.

Configurar o cluster do Amazon EKS

O cluster do Amazon EKS deve ser configurado para permitir que o extrator acesse as métricas. Há duas opções para essa configuração:

  • Use as entradas de acesso do Amazon EKS para fornecer automaticamente ao Amazon Managed Service para coletores do Prometheus acesso ao seu cluster.

  • Configure manualmente seu cluster Amazon EKS para coleta gerenciada de métricas.

Os tópicos a seguir descrevem cada um deles com mais detalhes.

Configure o Amazon EKS para acesso por raspador com entradas de acesso

Usar entradas de acesso para o Amazon EKS é a maneira mais fácil de dar ao Amazon Managed Service for Prometheus acesso para extrair métricas do seu cluster.

O cluster Amazon EKS que você está copiando deve ser configurado para permitir a autenticação da API. O modo de autenticação do cluster deve ser definido como API ouAPI_AND_CONFIG_MAP. Isso pode ser visualizado no console do Amazon EKS na guia Configuração de acesso dos detalhes do cluster. Para obter mais informações, consulte Permitir que funções do IAM ou usuários acessem o objeto Kubernetes em seu cluster do Amazon EKS no Guia do usuário do Amazon EKS.

Você pode criar o raspador ao criar o cluster ou depois de criar o cluster:

  • Ao criar um cluster — Você pode configurar esse acesso ao criar um cluster Amazon EKS por meio do console do Amazon EKS (siga as instruções para criar um scraper como parte do cluster), e uma política de entrada de acesso será criada automaticamente, dando ao Amazon Managed Service for Prometheus acesso às métricas do cluster.

  • Adicionar após a criação de um cluster — se o seu cluster Amazon EKS já existir, defina o modo de autenticação como API ouAPI_AND_CONFIG_MAP, e todos os raspadores que você criar por meio da API ou CLI do Amazon Managed Service for Prometheus terão automaticamente a política de entrada de acesso correta criada para você, e os raspadores terão acesso ao seu cluster.

Política de entrada de acesso criada

Quando você cria um scraper e permite que o Amazon Managed Service for Prometheus gere uma política de entrada de acesso para você, ele gera a seguinte política. Para obter mais informações sobre entradas de acesso, consulte Permitir que funções do IAM ou usuários acessem o Kubernetes no Guia do usuário do Amazon EKS.

{ "rules": [ { "effect": "allow", "apiGroups": [ "" ], "resources": [ "nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps" ], "verbs": [ "get", "list", "watch" ] }, { "effect": "allow", "apiGroups": [ "extensions", "networking.k8s.io" ], "resources": [ "ingresses/status", "ingresses" ], "verbs": [ "get", "list", "watch" ] }, { "effect": "allow", "nonResourceURLs": [ "/metrics" ], "verbs": [ "get" ] } ] }

Configurando manualmente o Amazon EKS para acesso ao raspador

Se você preferir usar o para controlar o acesso aws-auth ConfigMap ao seu cluster kubernetes, você ainda pode dar aos raspadores do Amazon Managed Service for Prometheus acesso às suas métricas. As etapas a seguir darão ao Amazon Managed Service for Prometheus acesso às métricas de coleta do seu cluster Amazon EKS.

nota

Para obter mais informações ConfigMap e acessar entradas, consulte Permitir que funções do IAM ou usuários acessem o Kubernetes no Guia do usuário do Amazon EKS.

Este procedimento usa kubectl e a AWS CLI. Para obter informações sobre a instalação do kubectl, consulte Instalar o kubectl no Guia do usuário do Amazon EKS.

Para configurar manualmente seu cluster Amazon EKS para coleta gerenciada de métricas
  1. Crie um arquivo denominado clusterrole-binding.yml com o seguinte texto:

    apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRole metadata: name: aps-collector-role rules: - apiGroups: [""] resources: ["nodes", "nodes/proxy", "nodes/metrics", "services", "endpoints", "pods", "ingresses", "configmaps"] verbs: ["describe", "get", "list", "watch"] - apiGroups: ["extensions", "networking.k8s.io"] resources: ["ingresses/status", "ingresses"] verbs: ["describe", "get", "list", "watch"] - nonResourceURLs: ["/metrics"] verbs: ["get"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: ClusterRoleBinding metadata: name: aps-collector-user-role-binding subjects: - kind: User name: aps-collector-user apiGroup: rbac.authorization.k8s.io roleRef: kind: ClusterRole name: aps-collector-role apiGroup: rbac.authorization.k8s.io
  2. Execute o seguinte comando no cluster:

    kubectl apply -f clusterrole-binding.yml

    Isso criará a vinculação e a regra do perfil do cluster. Esse exemplo usa aps-collector-role como nome do perfil e aps-collector-user como nome do usuário.

  3. O comando a seguir fornece informações sobre o extrator com o ID scraper-id. Esse é o extrator que você criou usando o comando na seção anterior.

    aws amp describe-scraper --scraper-id scraper-id
  4. Nos resultados do describe-scraper, encontre o roleArn. Ele terá o seguinte formato:

    arn:aws:iam::account-id:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_unique-id

    O Amazon EKS exige um formato diferente para esse ARN. É necessário ajustar o formato do ARN retornado para ser usado na próxima etapa. Edite-o para corresponder a este formato:

    arn:aws:iam::account-id:role/AWSServiceRoleForAmazonPrometheusScraper_unique-id

    Por exemplo, este ARN:

    arn:aws:iam::111122223333:role/aws-service-role/scraper.aps.amazonaws.com/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7

    Deve ser reescrito como:

    arn:aws:iam::111122223333:role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-56ef-7
  5. Execute o seguinte comando no cluster, usando o roleArn modificado da etapa anterior, bem como o nome e a região do cluster:

    eksctl create iamidentitymapping --cluster cluster-name --region region-id --arn roleArn --username aps-collector-user

    Isso permite que o extrator acesse o cluster usando o perfil e o usuário que você criou no arquivo clusterrole-binding.yml.

Encontrar e excluir extratores

Você pode usar a AWS API ou a AWS CLI para listar os scrapers em sua conta ou excluí-los.

nota

Verifique se você está usando a versão mais recente do AWS CLI ou SDK. A versão mais recente fornece os recursos e funcionalidades mais recentes, bem como as atualizações de segurança. Como alternativa, use o AWS Cloudshell, que fornece uma experiência sempre na linha de up-to-date comando, automaticamente.

Para listar todos os scrapers em sua conta, use a operação de ListScrapersAPI.

Como alternativa, com o AWS CLI, ligue para:

aws amp list-scrapers

ListScrapers retorna todos os extratores da conta, por exemplo:

{ "scrapers": [ { "scraperId": "s-1234abcd-56ef-7890-abcd-1234ef567890", "arn": "arn:aws:aps:us-west-2:123456789012:scraper/s-1234abcd-56ef-7890-abcd-1234ef567890", "roleArn": "arn:aws:iam::123456789012:role/aws-service-role/AWSServiceRoleForAmazonPrometheusScraper_1234abcd-2931", "status": { "statusCode": "DELETING" }, "createdAt": "2023-10-12T15:22:19.014000-07:00", "lastModifiedAt": "2023-10-12T15:55:43.487000-07:00", "tags": {}, "source": { "eksConfiguration": { "clusterArn": "arn:aws:eks:us-west-2:123456789012:cluster/my-cluster", "securityGroupIds": [ "sg-1234abcd5678ef90" ], "subnetIds": [ "subnet-abcd1234ef567890", "subnet-1234abcd5678ab90" ] } }, "destination": { "ampConfiguration": { "workspaceArn": "arn:aws:aps:us-west-2:123456789012:workspace/ws-1234abcd-5678-ef90-ab12-cdef3456a78" } } } ] }

Para excluir um raspador, localize o scraperId raspador que você deseja excluir usando a ListScrapers operação e, em seguida, use a DeleteScraperoperação para excluí-lo.

Como alternativa, com o AWS CLI, ligue para:

aws amp delete-scraper --scraper-id scraperId

Configuração do extrator

É possível controlar como o extrator descobre e coleta métricas com uma configuração de extrator compatível com o Prometheus. Por exemplo, é possível alterar o intervalo em que as métricas são enviadas para o espaço de trabalho, além de usar a nova rotulagem para reescrever dinamicamente os rótulos de uma métrica. A configuração do extrator é um arquivo YAML que faz parte da definição do extrator.

Quando um novo extrator é criado, você especifica uma configuração fornecendo um arquivo YAML codificado em base64 na chamada de API. É possível baixar um arquivo de configuração de uso geral com a operação GetDefaultScraperConfiguration na API do Amazon Managed Service for Prometheus.

Para modificar a configuração de um extrator, exclua o extrator e recrie-o com a nova configuração.

Configuração suportada

Para obter informações sobre o formato de configuração do raspador, incluindo uma análise detalhada dos valores possíveis, consulte Configuração na documentação do Prometheus. As opções de configuração global e do <scrape_config> descrevem as opções mais comumente necessárias.

Como o Amazon EKS é o único serviço compatível, a única configuração de descoberta de serviço (<*_sd_config>) suportada é a. <kubernetes_sd_config>

A lista completa de seções de configuração permitidas:

  • <global>

  • <scrape_config>

  • <static_config>

  • <relabel_config>

  • <metric_relabel_configs>

  • <kubernetes_sd_config>

As limitações dessas seções são listadas após o arquivo de configuração de amostra.

Arquivo de configuração de exemplo

Veja a seguir um exemplo de arquivo de configuração YAML com um intervalo de extração de 30 segundos.

global: scrape_interval: 30s external_labels: clusterArn: apiserver-test-2 scrape_configs: - job_name: pod_exporter kubernetes_sd_configs: - role: pod - job_name: cadvisor scheme: https authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token kubernetes_sd_configs: - role: node relabel_configs: - action: labelmap regex: __meta_kubernetes_node_label_(.+) - replacement: kubernetes.default.svc:443 target_label: __address__ - source_labels: [__meta_kubernetes_node_name] regex: (.+) target_label: __metrics_path__ replacement: /api/v1/nodes/$1/proxy/metrics/cadvisor # apiserver metrics - scheme: https authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token job_name: kubernetes-apiservers kubernetes_sd_configs: - role: endpoints relabel_configs: - action: keep regex: default;kubernetes;https source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_service_name - __meta_kubernetes_endpoint_port_name # kube proxy metrics - job_name: kube-proxy honor_labels: true kubernetes_sd_configs: - role: pod relabel_configs: - action: keep source_labels: - __meta_kubernetes_namespace - __meta_kubernetes_pod_name separator: '/' regex: 'kube-system/kube-proxy.+' - source_labels: - __address__ action: replace target_label: __address__ regex: (.+?)(\\:\\d+)? replacement: $1:10249

A seguir estão as limitações específicas dos coletores AWS gerenciados:

  • Intervalo de extração: a configuração do extrator não pode especificar um intervalo de extração inferior a 30 segundos.

  • Destinos: os destinos no static_config devem ser especificados como endereços IP.

  • Autorização — Omitir se nenhuma autorização for necessária. Se for necessária, a autorização deve ser Bearer e deve apontar para o arquivo/var/run/secrets/kubernetes.io/serviceaccount/token. Em outras palavras, se usada, a seção de autorização deve ter a seguinte aparência:

    authorization: type: Bearer credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
    nota

    type: Beareré o padrão, então pode ser omitido.

Solução de problemas de configuração do extrator

Coletores do Amazon Managed Service for Prometheus descobrem e extraem métricas automaticamente. Mas como você pode solucionar problemas quando não vê uma métrica que espera ver no espaço de trabalho do Amazon Managed Service for Prometheus?

A métrica up é uma ferramenta útil. Para cada endpoint que um coletor do Amazon Managed Service for Prometheus descobre, ele vende automaticamente essa métrica. Há três estados dessa métrica que podem ajudar você a solucionar o que está acontecendo no coletor.

  • up não está presente: se não houver nenhuma métrica up presente para um endpoint, isso significa que o coletor não conseguiu encontrar o endpoint.

    Se você tiver certeza de que o endpoint existe, provavelmente precisará ajustar a configuração de extração. O relabel_config de descoberta talvez precise ser ajustado, ou é possível que haja um problema com o role usado para descoberta.

  • up está presente, mas é sempre 0: se up estiver presente, mas for 0, o coletor poderá descobrir o endpoint, mas não encontrará nenhuma métrica compatível com o Prometheus.

    Nesse caso, você pode tentar usar um comando curl diretamente no endpoint. Você pode validar se os detalhes estão corretos, por exemplo, o protocolo (httpouhttps), o endpoint ou a porta que você está usando. Você também pode verificar se o endpoint está respondendo com uma 200 resposta válida e segue o formato do Prometheus. Finalmente, o corpo da resposta não pode ser maior do que o tamanho máximo permitido. (Para ver os limites dos coletores AWS gerenciados, consulte a seção a seguir.)

  • up está presente e é maior que 0: se up estiver presente e for maior que 0, as métricas serão enviadas para o Amazon Managed Service for Prometheus.

    Verifique se você está procurando as métricas corretas no Amazon Managed Service for Prometheus (ou no painel alternativo, como Amazon Managed Grafana). É possível usar o curl novamente para verificar os dados esperados no endpoint do /metrics. Verifique também se você não excedeu outros limites, como o número de endpoints por extrator. Você pode verificar o número de endpoints de métricas que estão sendo extraídos verificando a contagem de up métricas, usando. count(up)

Limitações do extrator

Há poucas limitações nos extratores totalmente gerenciados fornecidos pelo Amazon Managed Service for Prometheus.

  • Região: o cluster do EKS, o extrator gerenciado e o espaço de trabalho do Amazon Managed Service for Prometheus devem estar todos na mesma região da AWS .

  • Conta: o cluster do EKS, o extrator gerenciado e o espaço de trabalho do Amazon Managed Service for Prometheus devem estar todos na mesma Conta da AWS.

  • Coletores: é possível ter no máximo 10 extratores do Amazon Managed Service for Prometheus por região e por conta.

    nota

    É possível solicitar um aumento para esse limite solicitando um aumento de cota.

  • Resposta de métricas: o corpo de uma resposta de qualquer solicitação de endpoint do /metrics não pode ter mais de 50 megabytes (MB).

  • Endpoints por extrator: um extrator pode extrair no máximo 30.000 endpoints do /metrics.

  • Intervalo de extração: a configuração do extrator não pode especificar um intervalo de extração inferior a 30 segundos.