Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Cloud Container Engine/ Guia de usuário/ Observabilidade/ Registro em logs/ Uso do ICAgent para coletar logs de contêiner
Atualizado em 2024-11-28 GMT+08:00

Uso do ICAgent para coletar logs de contêiner

O CCE trabalha com o AOM para coletar logs de carga de trabalho. Ao criar um nó, o CCE instala o ICAgent para você (o DaemonSet chamado icagent no namespace do kube-system do cluster). Depois que o ICAgent coletar logs de carga de trabalho e os reportar ao AOM, você poderá exibir logs de carga de trabalho no console do CCE ou AOM.

Restrições

O ICAgent coleta apenas arquivos de log de texto *.log, *.trace e *.out.

Cobrança

O AOM oferece uma cota de coleta de registros gratuita de 500 MB para cada conta todos os meses. Se a cota for excedida, você será cobrado. Para detalhes, veja Cobrança. Você pode clicar aqui para visualizar os logs no console do AOM.

Usar o ICAgent para coletar logs

Você pode adicionar uma política para coletar logs usando o ICAgent para uma carga de trabalho.

  1. Ao criar uma carga de trabalho, defina o registro em logs para o contêiner.
  2. Clique em para adicionar uma política de log.

    O seguinte usa Nginx como um exemplo.As políticas de log variam dependendo das cargas de trabalho.
    Figura 1 Adicionar uma política de log

  3. Defina Storage Type como Host Path ou Container Path.

    Tabela 1 Configurar políticas de log

    Parâmetro

    Descrição

    Storage Type

    • Host Path (hostPath): um caminho de host é montado para o caminho de contêiner especificado (caminho de montagem). No caminho do host do nó, você pode visualizar a saída dos logs do contêiner no caminho de montagem.
    • Container Path (emptyDir): um caminho temporário do nó é montado no caminho especificado (caminho de montagem). Os dados de log que existem no caminho temporário, mas não são relatados pelo coletor ao AOM, desaparecerão depois que o pod for excluído.

    Host Path

    Insira um caminho de host, por exemplo, /var/paas/sys/log/nginx.

    Container Path

    Caminho do contêiner (por exemplo, /tmp) no qual os recursos de armazenamento serão montados.
    AVISO:
    • Não monte o armazenamento em um diretório do sistema, como / ou /var/run; essa ação pode causar um erro de contêiner. É aconselhável montar o contêiner em um diretório vazio. Se o diretório não estiver vazio, verifique se não há arquivos afetando a inicialização do contêiner no diretório. Caso contrário, esses arquivos serão substituídos, resultando em falhas para iniciar o contêiner e criar a carga de trabalho.
    • Quando o contêiner é montado em um diretório de alto risco, é aconselhável usar uma conta com permissões mínimas para iniciar o contêiner; caso contrário, os arquivos de alto risco no computador host podem ser danificados.
    • O AOM coleta apenas os primeiros 20 arquivos de log que foram modificados recentemente. Ele coleta arquivos de 2 níveis de subdiretórios por padrão.
    • O AOM apenas coleta arquivos de log de texto .log, .trace e .out nos caminhos de montagem.
    • Para obter detalhes sobre como definir permissões para pontos de montagem em um contêiner, consulte Configuração de um contexto de segurança para um pod ou contêiner.

    Extended Host Path

    Esse parâmetro é obrigatório somente quando Storage Type estiver definido como Host Path.

    Caminhos de host estendidos contêm IDs de pod ou nomes de contêiner para distinguir diferentes contêineres nos quais o caminho do host é montado.

    Um diretório de nível 3 é adicionado ao diretório/subdiretório do volume original. Você pode facilmente obter os arquivos de saída por um único Pod.

    • None: nenhum caminho estendido está configurado.
    • PodUID: ID de um pod.
    • PodName: nome de um casulo.
    • PodUID/ContainerName: ID de um pod ou nome de um contêiner.
    • PodName/ContainerName: nome de um pod ou contêiner

    Collection Path

    Um caminho de coleta restringe o escopo da coleta para logs especificados.

    • Se nenhum caminho de coleta for especificado, os arquivos de log nos formatos .log, .trace e .out serão coletados do caminho especificado.
    • /Path/**/ indica que todos os arquivos de log nos formatos .log, .trace e .out serão coletados recursivamente do caminho especificado e de todos os subdiretórios em 5 níveis de profundidade.
    • * em nomes de arquivos de log indica uma correspondência difusa.

    Exemplo: o caminho de coleta /tmp/**/test*.log indica que todos os arquivos .log prefixados com test serão coletados de /tmp e subdiretórios de profundidade em 5 níveis.

    CUIDADO:

    Certifique-se de que a versão do ICAgent seja 5.12.22 ou posterior.

    Despejo de log

    O despejo de log refere-se à rotação de arquivos de log em um host local.

    • Enabled: o AOM verifica os arquivos de log a cada minuto. Quando um arquivo de log excede 50 MB, ele é despejado. Um novo arquivo .zip é gerado no diretório em que o arquivo de log está localizado. Para um arquivo de log, o AOM armazena somente os 20 arquivos .zip mais recentes. Quando o número de arquivos .zip exceder 20, os arquivos .zip anteriores serão excluídos.
    • Disabled: o AOM não despeja arquivos de log.
    NOTA:
    • O AOM rotaciona arquivos de log usando copytruncate. Antes de ativar o despejo de log, certifique-se de que os arquivos de log sejam gravados no modo de acréscimo. Caso contrário, podem ocorrer furos de arquivo.
    • Atualmente, os principais componentes de log, como Log4j e Logback, suportam a rotação de arquivos de log. Se você já definiu a rotação para arquivos de log, ignore a configuração. Caso contrário, conflitos podem ocorrer.
    • É aconselhável configurar a rotação de arquivos de log para seus próprios serviços para controlar de forma flexível o tamanho e o número de arquivos rolados.

  4. Clique em OK.

Exemplo YAML (ICAgent)

Você pode definir o caminho de armazenamento do log do contêiner definindo um arquivo YAML.

Como mostrado na figura a seguir, um volume emptyDir é montado um caminho temporário para /var/log/nginx. Dessa forma, o ICAgent coleta logs em /var/log/nginx. O campo policy é personalizado pelo CCE e permite que o ICAgent identifique e colete logs.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testlog
  namespace: default
spec:
  selector:
    matchLabels:
      app: testlog
  template:
    replicas: 1
    metadata:
      labels:
        app: testlog
    spec:
      containers:
        - image: 'nginx:alpine'
          name: container-0
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
          volumeMounts:
            - name: vol-log
              mountPath: /var/log/nginx
              policy:
                logs:
                  rotate: ''
      volumes:
        - emptyDir: {}
          name: vol-log
      imagePullSecrets:
        - name: default-secret

A seguir mostra como usar um volume de hostPath. Comparado com emptyDir, o tipo de volumes é alterado para hostPath e o caminho no host precisa ser configurado para esse volume de hostPath. No exemplo a seguir, /tmp/log no host é montado em /var/log/nginx. Desta forma, o ICAgent pode coletar logs em /var/log/nginx, sem excluir os logs de /tmp/log.

apiVersion: apps/v1
kind: Deployment
metadata:
  name: testlog
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: testlog
  template:
    metadata:
      labels:
        app: testlog
    spec:
      containers:
        - image: 'nginx:alpine'
          name: container-0
          resources:
            requests:
              cpu: 250m
              memory: 512Mi
            limits:
              cpu: 250m
              memory: 512Mi
          volumeMounts:
            - name: vol-log
              mountPath: /var/log/nginx
              readOnly: false
              extendPathMode: PodUID
              policy:
                logs:
                  rotate: Hourly
                  annotations:
                    pathPattern: '**'
                    format: ''
      volumes:
        - hostPath:
            path: /tmp/log
          name: vol-log
      imagePullSecrets:
        - name: default-secret
Tabela 2 Descrição do parâmetro

Parâmetro

Descrição

Descrição

extendPathMode

Caminho do host estendido

Caminhos de host estendidos contêm IDs de pod ou nomes de contêiner para distinguir diferentes contêineres nos quais o caminho do host é montado.

Um diretório de nível 3 é adicionado ao diretório/subdiretório do volume original. Você pode facilmente obter os arquivos de saída por um único Pod.

  • None: nenhum caminho estendido está configurado.
  • PodUID: ID de um pod.
  • PodName: nome de um casulo.
  • PodUID/ContainerName: ID de um pod ou nome de um contêiner.
  • PodName/ContainerName: nome de um pod ou contêiner

policy.logs.rotate

Despejo de log

O despejo de log refere-se à rotação de arquivos de log em um host local.

  • Enabled: o AOM verifica os arquivos de log a cada minuto. Quando um arquivo de log excede 50 MB, ele é despejado imediatamente. Um novo arquivo .zip é gerado no diretório em que o arquivo de log está localizado. Para um arquivo de log, o AOM armazena somente os 20 arquivos .zip mais recentes. Quando o número de arquivos .zip exceder 20, os arquivos .zip anteriores serão excluídos. Depois que o despejo for concluído, o arquivo de log no AOM será limpo.
  • Disabled: o AOM não despeja arquivos de log.
NOTA:
  • O AOM rotaciona arquivos de log usando copytruncate. Antes de ativar o despejo de log, certifique-se de que os arquivos de log sejam gravados no modo de acréscimo. Caso contrário, podem ocorrer furos de arquivo.
  • Atualmente, os principais componentes de log, como Log4j e Logback, suportam a rotação de arquivos de log. Se você definiu a rotação para os arquivos de log, ignore a configuração. Caso contrário, conflitos podem ocorrer.
  • É aconselhável configurar a rotação de arquivos de log para seus próprios serviços para controlar de forma flexível o tamanho e o número de arquivos rolados.

policy.logs.annotations.pathPattern

Caminho da coleção

Um caminho de coleta restringe o escopo da coleta para logs especificados.

  • Se nenhum caminho de coleta for especificado, os arquivos de log nos formatos .log, .trace e .out serão coletados do caminho especificado.
  • /Path/**/ indica que todos os arquivos de log nos formatos .log, .trace e .out serão coletados recursivamente do caminho especificado e de todos os subdiretórios em profundidade de 5 níveis.
  • * em nomes de arquivos de log indica uma correspondência difusa.

Exemplo: o caminho de coleta /tmp/**/test*.log indica que todos os arquivos .log prefixados com test serão coletados de /tmp e subdiretórios em profundidade de 5 níveis.

CUIDADO:

Certifique-se de que a versão do ICAgent seja 5.12.22 ou posterior.

policy.logs.annotations.format

Correspondência de log de várias linhas

Alguns logs de programas (por exemplo, logs de programas Java) contêm um log que ocupa várias linhas. Por padrão, o sistema de coleta de logs coleta logs por linha. Se você quiser exibir logs como uma única mensagem de log no sistema de coleta de log, você pode ativar a função de log de várias linhas e usar o modo de tempo de log ou padrão regular. Quando uma linha de mensagem de log corresponde ao formato de hora predefinido ou expressão regular, ela é considerada como o início de uma mensagem de log e a próxima linha começa com essa linha de mensagem de log é considerada como o identificador final da mensagem de log.

O formato é o seguinte:

{
    "multi": {
        "mode": "time",
        "value": "YYYY-MM-DD hh:mm:ss"
    }
}

multi indica o modo multi-linha.

  • time: tempo de log. Insira um curinga de tempo. Por exemplo, se a hora no registro for 2017-01-01 23:59:59, o curinga será AAAA-MM-DD hh:mm:ss.
  • regular: padrão regular. Insira uma expressão regular.

Visualização de logs

Depois que um caminho de coleta de log é configurado e a carga de trabalho é criada, o ICAgent coleta arquivos de log do caminho configurado. A coleta leva cerca de 1 minuto.

Após a conclusão da coleta de logs, vá para a página de detalhes da carga de trabalho e clique em Logs no canto superior direito para exibir logs.

Você também pode exibir logs no console do AOM.

Você também pode executar o comando kubectl logs para exibir a saída padrão de um contêiner.

# View logs of a specified pod.
kubectl logs <pod_name>
kubectl logs -f <pod_name> # Similar to tail -f

# View logs of a specified container in a specified pod.
kubectl logs <pod_name> -c <container_name>

kubectl logs pod_name -c container_name -n namespace (one-off query)
kubectl logs -f <pod_name> -n namespace (real-time query in tail -f mode)