Configurar a coleta de dados nos insights do contêiner usando o ConfigMap

Esse artigo descreve como configurar a coleta de dados em insights de contêiner usando ConfigMap. ConfigMaps são um mecanismo do Kubernetes que permite armazenar dados não confidenciais, como arquivo de configuração ou variáveis de ambiente.

O ConfigMap é usado principalmente para configurar a coleta de dados dos logs do contêiner e variáveis de ambiente do cluster. Você pode configurar individualmente os logs stdout e stderr e também ativar o log multilinha. l A configuração específica que você pode executar com o ConfigMap inclui:

  • Habilitar/desabilitar a filtragem de namespace para logs stdout e stderr
  • Habilitar/desabilitar a coleta de variáveis de ambiente para o cluster
  • Filtrar eventos normais do Kube
  • Selecionar esquema de log
  • Habilitar/desabilitar registro multilinha
  • Ignorar configurações de proxy

Importante

A configuração completa da coleta de dados em insights de contêiner pode exigir a edição do ConfigMap e da regra de coleta de dados (DCR) para o cluster, pois cada método permite a configuração de um conjunto diferente de configurações.

Consulte Configurar a coleta de dados em insights de contêiner usando a regra de coleta de dados para obter uma lista de configurações e o processo para configurar a coleta de dados usando o DCR.

Pré-requisitos

  • ConfigMap é uma lista global e só pode haver um ConfigMap aplicado ao agente para insights de contêiner. Aplicar outro ConfigMap anulará as configurações anteriores da coleção ConfigMap.
  • A versão mínima do agente com suporte para coletar variáveis stdout, stderr e variáveis de ambiente de cargas de trabalho do contêiner é ciprod06142019 ou posterior. Para verificar a versão do agente, na guia , selecione um nó. No painel Propriedades, observe o valor da propriedade Marca de Imagem do Agente. Para obter mais informações sobre as versões do agente e o que está incluído em cada uma, consulte as Notas de versão do agente.

Configurar e implantar o ConfigMap

Use o procedimento a seguir para configurar e implementar seu arquivo de configuração ConfigMap em seu cluster:

  1. Baixe o modelo de arquivo ConfigMap YAML e abra-o em um editor. Se você já possui um arquivo ConfigMap, poderá usá-lo.

  2. Edite o arquivo ConfigMap YAML com suas customizações usando as configurações descritas em Configurações de coleta de dados

  3. Crie um ConfigMap executando o seguinte comando kubectl:

    kubectl apply -f <configmap_yaml_file.yaml>
    

    Exemplo:

    kubectl apply -f container-azm-ms-agentconfig.yaml
    

    A alteração da configuração pode levar alguns minutos para ser concluída, antes de entrar em vigor. Em seguida, todos os pods do Agente do Azure Monitor no cluster serão reiniciados. A reinicialização ocorre sem interrupção para todos os pods do agente do Azure Monitor e, assim, nem todos são reiniciados mesmo tempo. Quando as reinicializações terminarem, você receberá uma mensagem semelhante ao seguinte resultado:

    configmap "container-azm-ms-agentconfig" created`.
    

Configurações da coleta de dados

A tabela a seguir descreve as configurações possíveis para controlar a coleta de dados.

Configuração Data type Valor DESCRIÇÃO
schema-version Cadeia de caracteres (diferencia maiúsculas e minúsculas) v1 Usado pelo agente ao analisar este ConfigMap. No momento, a versão de esquema com suporte é v1. Não há suporte para modificar esse valor, e ele será rejeitado quando o ConfigMap for avaliado.
config-version String Permite que você acompanhe a versão deste arquivo de configuração em seu sistema/repositório de controle de origem. São permitidos no máximo dez caracteres; todos os outros são truncados.
[log_collection_settings]
[stdout] enabled Booliano true
false
Controla se a coleta de logs do contêiner stdout está habilitada. Quando definido como true e nenhum namespace for excluído para a coleta de logs stdout, os logs stdout serão coletados de todos os contêineres em todos os pods e nós do cluster. Se ele não for especificado no ConfigMap, o valor padrão será true.
[stdout] exclude_namespaces String Matriz separada por vírgulas Matriz de namespaces de Kubernetes para os quais os logs de stdout não serão coletados. Essa configuração só entrará em vigor se enabled estiver definido como true. Se esse campo não for especificado no ConfigMap, o valor padrão será
["kube-system","gatekeeper-system"].
[stderr] enabled Booliano true
false
Controla se a coleta de logs do contêiner stderr está habilitada. Quando definido como true e nenhum namespace for excluído para a coleta de logs stderr, os logs stderr serão coletados de todos os contêineres em todos os pods e nós no cluster. Se ele não for especificado no ConfigMap, o valor padrão será true.
[stderr] exclude_namespaces String Matriz separada por vírgulas Matriz de namespaces de Kubernetes para os quais os logs de stderr não serão coletados. Essa configuração só entrará em vigor se enabled estiver definido como true. Se esse campo não for especificado no ConfigMap, o valor padrão será
["kube-system","gatekeeper-system"].
[env_var] enabled Booliano true
false
Essa configuração controla a coleta de variáveis de ambiente em todos os pods e nós do cluster. Se ele não for especificado no ConfigMap, o valor padrão será true. Se a coleção de variáveis de ambiente estiver habilitada globalmente, você poderá desabilitá-la para um contêiner específico definindo a variável de ambiente AZMON_COLLECT_ENV como False com uma configuração do Dockerfile ou no arquivo de configuração do pod na seção env:. Se a coleta de variáveis de ambiente estiver desabilitada globalmente, você não poderá habilitá-la para um contêiner específico. A única substituição que pode ser aplicada no nível do contêiner é desabilitar a coleta quando ela já estiver habilitada globalmente.
[enrich_container_logs] enabled Booliano true
false
Controla o enriquecimento de log de contêiner para preencher os valores de propriedade Name e Image para cada registro de log gravado na tabela ContainerLogV2 ou ContainerLog para todos os logs de contêiner no cluster. Se ele não for especificado no ConfigMap, o valor padrão será false.
[collect_all_kube_events] enabled Booliano true
false
Controla se eventos Kube de todos os tipos são coletados. Por padrão, os eventos Kube com tipo Normal não são coletados. Quando essa configuração é true, os eventos Normais não são mais filtrados e todos os eventos são coletados. Se ele não for especificado no ConfigMap, o valor padrão será false.
[schema] containerlog_schema_version Cadeia de caracteres (diferencia maiúsculas e minúsculas) v2
v1
Define o formato de ingestão de log. Se v2, a tabela ContainerLogV2 será usada. Se v1, a tabela ContainerLog será usada (essa tabela foi descontinuada). Para clusters que habilitam insights de contêiner usando a CLI do Azure versão 2.54.0 ou superior, a configuração padrão é v2. Veja Esquema de log do Container Insights para obter detalhes.
[enable_multiline_logs] enabled Booliano true
false
Controla se os logs de contêiner multilinha estão habilitados. Veja Registro multilinha no Contêiner de Insights para obter detalhes. Se ele não for especificado no ConfigMap, o valor padrão será false. Isso requer que a configuração schema seja v2.
[metric_collection_settings]
[collect_kube_system_pv_metrics] enabled Booliano true
false
Permite que métricas de uso de volume persistente (PV) sejam coletadas no namespace kube-system. Por padrão, métricas de uso para volumes persistentes com declarações de volume persistente no namespace kube-system não são coletadas. Quando essa configuração é definida como true, são coletadas métricas de uso de PV para todos os namespaces. Se ele não for especificado no ConfigMap, o valor padrão será false.
[agent_settings]
[proxy_config] ignore_proxy_settings Booliano true
false
Quando true, as configurações de proxy são ignoradas. Para ambientes Kubernetes ativados por AKS e Arc, se o seu cluster estiver configurado com proxy de encaminhamento, as configurações de proxy serão automaticamente aplicadas e usadas para o agente. Para determinadas configurações, como AMPLS + Proxy, talvez você queira que a configuração do proxy seja ignorada. Se ele não for especificado no ConfigMap, o valor padrão será false.

Verificar a configuração

Para verificar se a configuração foi aplicada com sucesso a um cluster, use o comando a seguir para revisar os logs de um pod de agente.

kubectl logs ama-logs-fdf58 -n kube-system

Se houver erros de configuração de pods do Agente do Azure Monitor, a saída mostrará erros semelhantes ao exemplo a seguir:

***************Start Config Processing******************** 
config::unsupported/missing config schema version - 'v21' , using defaults

Os erros relacionados à aplicação de alterações de configuração também estão disponíveis para verificação. As opções a seguir estão disponíveis para realizar mais soluções de problemas de alterações de configuração:

  • De um log de pod de agente usando o mesmo comando kubectl logs.

  • Em logs dinâmicos. Os logs dinâmicos mostram erros semelhantes ao exemplo a seguir:

    config::error::Exception while parsing config map for log collection/env variable settings: \nparse error on value \"$\" ($end), using defaults, please check config map for errors
    
  • Da tabela KubeMonAgentEvents no seu espaço de trabalho do Log Analytics. Os dados são enviados a cada hora, com a severidade do erro para erros de configuração. Se não houver erros, a entrada na tabela terá dados com informações sobre severidade, que relatarão nenhum erro. A propriedade Tags contém mais informações sobre o pod e a ID do contêiner em que o erro ocorreu, e também a primeira e a última ocorrências e a contagem da última hora.

Verificar a versão do esquema

As versões de esquema de configuração com suporte estão disponíveis como uma anotação de pod (versões de esquema) no pod do agente do Azure Monitor. Você pode vê-los com o seguinte comando kubectl.

kubectl describe pod ama-logs-fdf58 -n=kube-system.

A saída semelhante ao exemplo a seguir aparece com a anotação schema-versions:

    Name:           ama-logs-fdf58
    Namespace:      kube-system
    Node:           aks-agentpool-95673144-0/10.240.0.4
    Start Time:     Mon, 10 Jun 2019 15:01:03 -0700
    Labels:         controller-revision-hash=589cc7785d
                    dsName=ama-logs-ds
                    pod-template-generation=1
    Annotations:    agentVersion=1.10.0.1
                  dockerProviderVersion=5.0.0-0
                    schema-versions=v1 

Perguntas frequentes

Como habilito a coleta de log para contêineres no namespace kube-system por meio do Helm?

A coleta de log de contêineres no namespace kube-system está desabilitada por padrão. Você pode habilitar a coleta de log definindo uma variável de ambiente no Agente do Azure Monitor. Confira a página Insights do contêiner no GitHub.

Próximas etapas