Se você encontrar problemas ao coletar logs de contêineres padrão ou Kubernetes com o Logtail, use este tópico para solucionar o problema, verificar o status de execução e executar outras operações de manutenção.
Verificar o heartbeat do grupo de máquinas
Verifique o heartbeat do grupo de máquinas para confirmar se o Logtail está instalado corretamente nos contêineres.
-
Verifique o status de heartbeat do grupo de máquinas.
Faça login no console do Simple Log Service.
-
Na seção Projects, clique em o projeto desejado.

No painel de navegação à esquerda, escolha .
Na lista de grupos de máquinas, clique em o grupo de máquinas de destino.
Na página Machine Group Configurations, visualize o status do grupo de máquinas e anote o número de nós com status de heartbeat OK.
-
Verifique o número de nós de trabalho no cluster de contêineres.
-
Execute o comando a seguir para visualizar o número de nós de trabalho no cluster.
kubectl get node | grep -v masterA saída será semelhante à seguinte:
NAME STATUS ROLES AGE VERSION cn-hangzhou.i-bp17enxc2us3624wexh2 Ready <none> 238d v1.10.4 cn-hangzhou.i-bp1ad2b02jtqd1shi2ut Ready <none> 220d v1.10.4
-
Compare o número de nós com status de heartbeat OK com o número de nós de trabalho no cluster de contêineres. Solucione o problema com base no resultado.
-
O status de heartbeat de todos os nós no grupo de máquinas é Failed.
Para coleta de logs de contêineres docker padrão, consulte Coletar logs de contêineres docker (saída padrão e arquivos) para verificar se os parâmetros
${your_region_name},${your_aliyun_user_id}e${your_machine_group_user_defined_id}estão corretos.-
Caso utilize um cluster Kubernetes autogerenciado, consulte Coletar logs de texto de contêineres Kubernetes usando sidecar para validar se os parâmetros
{regionId},{aliuid},{access-key-id}e{access-key-secret}estão corretos.Se os parâmetros estiverem incorretos, execute o comando
helm del --purge alibaba-log-controllerpara excluir o pacote de instalação e reinstale-o em seguida.
-
A quantidade de nós com status de heartbeat OK é menor que o número de nós de trabalho no cluster.
-
Verifique se um DaemonSet foi implantado manualmente por meio de um arquivo YAML.
-
Execute o comando abaixo. Se houver retorno, significa que um DaemonSet foi implantado manualmente via arquivo YAML.
kubectl get po -n kube-system -l k8s-app=logtail Defina parâmetros como ${your_region_name}, ${your_aliyun_user_id} e ${your_machine_group_name} com seus valores reais.
-
Execute o comando a seguir para aplicar o arquivo atualizado.
kubectl apply -f ./logtail-daemonset.yaml
-
-
-
No host, crie o diretório
/etc/ilogtail/users/.mkdir -p /etc/ilogtail/users/ -
Dentro do diretório
/etc/ilogtail/users/, crie um arquivo vazio nomeado com o ID da sua conta Alibaba Cloud.touch /etc/ilogtail/users/<your-alibaba-cloud-account-id> -
Ao iniciar o contêiner do LoongCollector ou Logtail, monte o diretório como somente leitura adicionando a seguinte flag:
-v /etc/ilogtail/users:/etc/ilogtail/users:ro Reinicie o contêiner do LoongCollector ou Logtail.
-
Ao coletar logs de arquivos em contêineres, observe os seguintes pontos:
Após aplicar uma configuração do Logtail, a coleta de logs de um arquivo só ocorre se houver atualização nesse arquivo. Para mais informações, consulte Ler logs.
O Logtail coleta logs apenas de arquivos armazenados no armazenamento padrão do contêiner ou montados em um caminho local. Outros métodos de armazenamento não são suportados.
Depois que os logs forem coletados, crie um índice para consultá-los e analisá-los no Logstore. Para mais detalhes, veja Criar um índice.
Verifique se há problemas de heartbeat no grupo de máquinas. Para mais informações, consulte Verificar o heartbeat do grupo de máquinas.
-
Valide se a configuração do Logtail está correta.
Confira se as definições de IncludeLabel, ExcludeLabel, IncludeEnv e ExcludeEnv na configuração do Logtail atendem aos seus requisitos de coleta de logs.
NotaOs rótulos especificados aqui referem-se aos rótulos de contêiner da saída do comando
docker inspect, e não aos rótulos do Kubernetes.Remova temporariamente as configurações de IncludeLabel, ExcludeLabel, IncludeEnv e ExcludeEnv para testar a coleta de logs. Se a coleta funcionar, as configurações dos parâmetros estão incorretas.
NotaSe você utiliza um nó docker autogerenciado (não Kubernetes) com uma configuração legada do Logtail, atente-se ao seguinte:
O campo
_container_name_não suporta correspondência por expressão regular para múltiplos valores. Não é possível usar uma única expressão regular para filtrar vários nomes de contêineres específicos.Para coletar logs de múltiplos contêineres específicos (por exemplo, contêineres chamados
aeb), crie duas configurações separadas do Logtail, cada uma com sua própria lista de permissões, e vincule ambas ao mesmo Machine Groups.Nomes de rótulos duplicados em uma única configuração do Logtail não são reconhecidos. Caso precise corresponder a valores diferentes para o mesmo nome de rótulo, use uma expressão regular ou crie múltiplas configurações independentes do Logtail.
-
Em todos os servidores relevantes, execute o comando a seguir para identificar em quais nós os contêineres estão realmente sendo executados:
docker ps -a | grep <container-name> Se um contêiner estiver sendo executado em um servidor que não foi adicionado ao grupo de máquinas, adicione o endereço IP desse servidor aos Machine Groups no console SLS.
Modifique sua aplicação para gravar logs no stdout ou stderr em vez de arquivos.
-
No console SLS, configure o caminho de coleta para usar o caminho de log padrão do Kubernetes:
/logtail_host/var/log/pods/<namespace>_<pod-name>-<uid>/<container-name>/*.log Na especificação do seu Pod, substitua o volume
emptyDirpor uma definição dehostPathou PVC, de modo que os logs sejam persistidos em um caminho acessível a partir do host.-
Ajuste o caminho de coleta do SLS para apontar para o caminho de montagem real no host, por exemplo:
/logtail_host/var/log/your-app/*.log Crie manualmente o arquivo vazio especificado na mensagem de erro dentro do contêiner.
-
Defina as permissões do arquivo para
-rw-r--r--(644):chmod 644 <file-path> Reinicie o contêiner.
-
Verifique e ajuste a expressão regular de início de linha ou desative o modo multilinha:
Na configuração YAML: Comente a seção de configuração
multiline.No console SLS: Abra a configuração do Logtail e desative o modo multilinha.
Verifique se o K8s Namespace Regex e outros campos de formato estão corretos. Se precisar especificar múltiplos namespaces, garanta que estejam separados pelo delimitador correto.
-
Após modificar a configuração YAML, reaplique-a para que as alterações entrem em vigor:
kubectl apply -f <your-config-file>.yaml -
docker Padrão
-
No host, execute o comando a seguir para localizar o contêiner Logtail.
docker ps | grep logtailA saída será semelhante à seguinte:
223****6e registry.cn-hangzhou.aliyuncs.com/log-service/logtail "/usr/local/ilogta..." 8 days ago Up 8 days logtail-iba -
Execute o comando a seguir para iniciar um shell bash no contêiner Logtail.
docker exec -it 223****6e bashSubstitua
223****6epelo ID real do contêiner.
-
-
Kubernetes
-
Execute o comando a seguir para localizar o pod do Logtail.
kubectl get po -n kube-system | grep logtailA saída será semelhante à seguinte:
logtail-ds-****d 1/1 Running 0 8d logtail-ds-****8 1/1 Running 0 8d -
Execute o comando a seguir para fazer login no pod.
kubectl exec -it -n kube-system logtail-ds-****d -- bashSubstitua
logtail-ds-****dpelo ID real do pod.
-
Faça login no contêiner Logtail. Para mais informações, consulte Fazer login em um contêiner Logtail.
-
Acesse o diretório /usr/local/ilogtail/.
cd /usr/local/ilogtail -
Visualize os arquivos ilogtail.LOG e logtail_plugin.LOG.
cat ilogtail.LOG cat logtail_plugin.LOG -
No host, execute o comando a seguir para visualizar a versão, o endereço IP e a hora de inicialização do Logtail.
Essas informações estão armazenadas no arquivo
/usr/local/ilogtail/app_info.jsondo contêiner Logtail.kubectl exec logtail-ds-****k -n kube-system cat /usr/local/ilogtail/app_info.jsonA saída será semelhante à seguinte:
{ "UUID" : "", "hostname" : "logtail-****k", "instance_id" : "0EB****_172.20.4.2_1517810940", "ip" : "172.20.4.2", "logtail_version" : "0.16.2", "os" : "Linux; 3.10.0-693.2.2.el7.x86_64; #1 SMP Tue Sep 12 22:26:13 UTC 2017; x86_64", "update_time" : "2018-02-05 06:09:01" } Nome do Projeto SLS
Nome da configuração de coleta do Logtail
Nome do Pod de destino
Nome do contêiner de destino
Na configuração da CRD, utilize um Logstore diferente daquele que foi excluído.
-
Reinicie o pod alibaba-log-controller.
Execute o comando a seguir para localizar o pod.
kubectl get po -n kube-system | grep alibaba-log-controller
FAQ: Por que não há heartbeat após implantar docker/LoongCollector?
Quando o LoongCollector ou Logtail não apresenta heartbeat ou falha ao se registrar no grupo de máquinas após a implantação do docker, a causa raiz geralmente é a falta de configuração do identificador de usuário (AliUID).
Solução:
Verificação: Faça login no console SLS, acesse Resources > Machine Groups e abra o grupo de máquinas de destino. Na página Machine Group Configurations, confirme se o status de heartbeat do grupo de máquinas mudou para OK.
FAQ: Por que o grupo de máquinas mostra apenas um servidor quando vários servidores docker Swarm reportam o mesmo IP?
Causa: Em um cluster docker Swarm, vários servidores podem reportar o mesmo endereço IP interno através da rede do contêiner. Se esses servidores também compartilharem o mesmo valor da variável de ambiente
ALIYUN_LOGTAIL_USER_DEFINED_ID, o sistema não consegue distingui-los, e a página Machine Groups exibe apenas uma entrada.Solução 1: Defina uma variável de ambiente
ALIYUN_LOGTAIL_USER_DEFINED_IDexclusiva para o contêiner Logtail em cada servidor.Configure um valor diferente em cada servidor e garanta que ele corresponda à configuração de Machine Groups correspondente. Por exemplo:
-e ALIYUN_LOGTAIL_USER_DEFINED_ID=<unique-id-for-this-server>Solução 2: Defina a variável de ambiente
ALIYUN_LOGTAIL_WORKING_IPpara especificar manualmente um endereço IP exclusivo para cada servidor.Utilize um valor que identifique exclusivamente cada host, como o endereço IP público do host ou um endereço IP de rede interna que seja único em todos os servidores:
-e ALIYUN_LOGTAIL_WORKING_IP=<unique-ip-for-this-server>Solucionar problemas na coleta de logs de contêineres
Caso não encontre logs na página Preview ou na página de consulta do Logstore no console do Simple Log Service, é possível que o serviço não esteja coletando os logs dos seus contêineres. Verifique o status do contêiner e realize as verificações a seguir.
ImportanteO grupo de máquinas não cobre todos os nós de contêineres
Sintoma: O heartbeat do grupo de máquinas está normal, mas a coleta de logs de alguns contêineres parou.
Esse problema pode ocorrer quando os contêineres estão sendo executados em servidores que não foram incluídos nos Machine Groups.
Etapas de solução de problemas:
FAQ: Por que não consigo encontrar o Pod na visualização de metadados do contêiner ou por que os logs do emptyDir não são coletados?
Causa: O Logtail executado no modo DaemonSet não consegue acessar diretamente o armazenamento temporário emptyDir dentro de um contêiner. Isso impede que o Logtail leia arquivos de log e extraia metadados do contêiner, fazendo com que o Pod não apareça na Preview de metadados do contêiner.
Solução 1 (Recomendada): Redirecione a saída de logs da aplicação para a saída padrão (stdout/stderr).
Solução 2: Se sua aplicação precisar obrigatoriamente gravar logs em arquivos, altere a montagem do volume de logs de emptyDir para hostPath ou PVC.
FAQ: Como lidar com falhas na criação de arquivos ou erros de permissão ao coletar logs de contêineres?
Sintoma: Uma mensagem de erro indica que o Logtail precisa criar um arquivo vazio específico dentro do contêiner, mas a criação falha ou um erro de permissão é reportado.
Solução:
Alternativa: Se o problema persistir após as etapas acima, monte o diretório de logs do contêiner no host e configure o SLS para coletar logs do caminho correspondente no host. Essa abordagem é mais estável do que a coleta de arquivos dentro do contêiner.
FAQ: Como resolver o erro "parse cri docker line error: invalid CRI log, timestamp not found"?
Causa: Falha na análise de logs. Esse erro é comumente causado por uma configuração incorreta de log multilinha.
Solução:
Outras operações de manutenção
Fazer login em um contêiner Logtail
Visualizar logs de execução do Logtail
O Logtail armazena seus logs no diretório
/usr/local/ilogtail/do contêiner Logtail. Os arquivos de log sãoilogtail.LOGelogtail_plugin.LOG.Saída padrão (stdout) do contêiner Logtail
A saída padrão de um contêiner Logtail não fornece informações úteis para solução de problemas. Ignore o conteúdo a seguir.
start umount useless mount points, /shm$|/merged$|/mqueue$ umount: /logtail_host/var/lib/docker/overlay2/3fd0043af174cb0273c3c7869500fbe2bdb95d13b1e110172ef57fe840c82155/merged: must be superuser to unmount umount: /logtail_host/var/lib/docker/overlay2/d5b10aa19399992755de1f85d25009528daa749c1bf8c16edff44beab6e69718/merged: must be superuser to unmount umount: /logtail_host/var/lib/docker/overlay2/5c3125daddacedec29df72ad0c52fac800cd56c6e880dc4e8a640b1e16c22dbe/merged: must be superuser to unmount ...... xargs: umount: exited with status 255; aborting umount done start logtail ilogtail is running logtail status: ilogtail is runningVerificar o status dos componentes do Kubernetes
Execute o comando a seguir para visualizar o status e as informações da implantação do Simple Log Service.
kubectl get deploy -n kube-system | grep -E 'alibaba-log-controller|loongcollector-operator'A seguinte saída será retornada:
NAME READY UP-TO-DATE AVAILABLE AGE alibaba-log-controller 1/1 1 1 11dExecute o comando a seguir para visualizar as informações de status do recurso DaemonSet.
kubectl get ds -n kube-system | grep -E 'logtail-ds|loongcollector-ds'A seguinte saída será retornada:
NAME DESIRED CURRENT READY UP-TO-DATE AVAILABLE NODE SELECTOR AGE logtail-ds 2 2 2 2 2 **ux 11dVersão, endereço IP e hora de inicialização do Logtail
Obter informações de solução de problemas para logs de Pod em um cluster ACK
Se a coleta de logs de um Pod em um cluster ACK apresentar anomalias, siga as etapas abaixo para obter as informações básicas necessárias para autossolução de problemas ou para fornecer ao suporte técnico.
Etapa 1: Localize o nome do Pod do Logtail ou LoongCollector.
kubectl get pods -n kube-system | grep loongcollectorEtapa 2: Obtenha o endereço IP da instância do Logtail ou LoongCollector no arquivo
app_info.json.kubectl exec <pod-name> -n kube-system cat /usr/local/ilogtail/app_info.jsonO campo
ipna saída JSON retornada corresponde ao endereço IP da instância do Logtail.Ao solicitar suporte, forneça as seguintes informações para auxiliar na solução de problemas:
Lidar com Logstores CRD excluídos acidentalmente
Se você excluir um Logstore criado automaticamente por uma Custom Resource Definition (CRD), os dados coletados serão irrecuperáveis e a configuração da CRD para esse Logstore se tornará inválida. Para evitar problemas na coleta de logs, escolha uma das soluções a seguir:
-