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.
- Ao criar uma carga de trabalho, defina o registro em logs para o contêiner.
- 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
- 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.
- 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
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.
|
policy.logs.rotate |
Despejo de log |
O despejo de log refere-se à rotação de arquivos de log em um host local.
NOTA:
|
policy.logs.annotations.pathPattern |
Caminho da coleção |
Um caminho de coleta restringe o escopo da coleta para logs especificados.
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.
|
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)