O modo sidecar injeta um contêiner dedicado do LoongCollector (Logtail) em cada pod de aplicação para coleta de logs por pod. Use este modo quando precisar de controle granular, isolamento multi-tenant ou coleta de logs vinculada ao ciclo de vida.
Como funciona
No modo sidecar, o contêiner da aplicação e um contêiner do LoongCollector (Logtail) são executados lado a lado em um pod, compartilhando volumes para acesso aos logs e sincronização do ciclo de vida.
-
Compartilhamento de logs: O contêiner da aplicação grava logs em um volume compartilhado (geralmente um
emptyDir), que o contêiner do LoongCollector (Logtail) monta como somente leitura para coletar em tempo real. -
Associação de configuração: Cada sidecar do LoongCollector (Logtail) declara sua identidade por meio de um
custom identifierexclusivo. Um grupo de máquinas no console do SLS com o mesmo identificador distribui configurações de coleta para todas as instâncias de sidecar correspondentes. -
Sincronização do ciclo de vida: Arquivos de sinal (
cornerstoneetombstone) no volume compartilhado coordenam o encerramento dos contêineres. Combinados com ograceful termination period(terminationGracePeriodSeconds), isso garante que o LoongCollector (Logtail) termine de enviar os logs restantes antes que o pod seja encerrado.
Antes de começar
Crie um Project e um logstore para armazenar seus logs. Se já os tiver, pule para Etapa 1: Injetar o contêiner sidecar do LoongCollector.
-
Project: Uma unidade de gerenciamento de recursos no SLS que isola logs por projeto ou serviço.
-
logstore: Uma unidade de armazenamento para logs.
Criar um Project
Criar um logstore
Etapa 1: Injetar o contêiner sidecar do LoongCollector
Injete um contêiner sidecar do LoongCollector no pod da sua aplicação com um volume compartilhado para coleta de logs. Para um teste rápido, use o Apêndice: Exemplo de YAML.
1. Modificar a configuração YAML do pod
-
Definir volumes compartilhados
Em
spec.template.spec.volumes, adicione três volumes compartilhados no mesmo nível decontainers:volumes: # Shared log directory (written by the application container, read by the sidecar) - name: ${shared_volume_name} # <-- The name must match the name in volumeMounts emptyDir: {} # Signal directory for inter-container communication (for graceful start/stop) - name: tasksite emptyDir: medium: Memory # Use memory as the medium for better performance sizeLimit: "50Mi" # Shared host time zone configuration: Synchronizes the time zone for all containers in the pod - name: tz-config # <-- The name must match the name in volumeMounts hostPath: path: /usr/share/zoneinfo/Asia/Shanghai # Modify the time zone as needed -
Configurar as montagens do contêiner da aplicação
Na seção
volumeMountsdo contêiner da sua aplicação, comoyour-business-app-container, adicione as seguintes montagens de volume:Certifique-se de que o contêiner da aplicação grave os logs no diretório
${shared_volume_path}para que o LoongCollector possa coletá-los.volumeMounts: # Mount the shared log volume to the application log output directory - name: ${shared_volume_name} mountPath: ${shared_volume_path} # Example: /var/log/app # Mount the communication directory - name: tasksite mountPath: /tasksite # Shared directory for communication with the LoongCollector container # Mount the timezone file - name: tz-config mountPath: /etc/localtime readOnly: true -
Injetar o contêiner sidecar do LoongCollector
No array
spec.template.spec.containers, adicione a seguinte definição de contêiner sidecar:- name: loongcollector image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun command: ["/bin/bash", "-c"] args: - | echo "[$(date)] LoongCollector: Starting initialization" # Start the LoongCollector service /etc/init.d/loongcollectord start # Wait for the configuration to download and the service to be ready sleep 15 # Verify the service status if /etc/init.d/loongcollectord status; then echo "[$(date)] LoongCollector: Service started successfully" touch /tasksite/cornerstone else echo "[$(date)] LoongCollector: Failed to start service" exit 1 fi # Wait for the application container to complete (via the tombstone file signal) echo "[$(date)] LoongCollector: Waiting for application container to complete" until [[ -f /tasksite/tombstone ]]; do sleep 2 done # Allow time to upload remaining logs echo "[$(date)] LoongCollector: Business completed, waiting for log transmission" sleep 30 # Stop the service echo "[$(date)] LoongCollector: Stopping service" /etc/init.d/loongcollectord stop echo "[$(date)] LoongCollector: Shutdown complete" # health check livenessProbe: exec: command: ["/etc/init.d/loongcollectord", "status"] initialDelaySeconds: 30 periodSeconds: 10 timeoutSeconds: 5 failureThreshold: 3 # resource configuration resources: requests: cpu: "100m" memory: "128Mi" limits: cpu: "2000m" memory: "2048Mi" # environment variable configuration env: - name: ALIYUN_LOGTAIL_USER_ID value: "${your_aliyun_user_id}" - name: ALIYUN_LOGTAIL_USER_DEFINED_ID value: "${your_machine_group_user_defined_id}" - name: ALIYUN_LOGTAIL_CONFIG value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json" # Enable full drain mode to ensure all logs are sent before the pod terminates - name: enable_full_drain_mode value: "true" # Append pod environment information as log tags - name: ALIYUN_LOG_ENV_TAGS value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_" # Automatically inject pod and node metadata as log tags - name: "_pod_name_" valueFrom: fieldRef: fieldPath: metadata.name - name: "_pod_ip_" valueFrom: fieldRef: fieldPath: status.podIP - name: "_namespace_" valueFrom: fieldRef: fieldPath: metadata.namespace - name: "_node_name_" valueFrom: fieldRef: fieldPath: spec.nodeName - name: "_node_ip_" valueFrom: fieldRef: fieldPath: status.hostIP # Volume mounts (shared with the application container) volumeMounts: # Read-only mount for the application log directory - name: ${shared_volume_name} # <-- Shared log directory name mountPath: ${dir_containing_your_files} # <-- Path to the shared directory in the sidecar readOnly: true # Mount the communication directory - name: tasksite mountPath: /tasksite # Mount the timezone - name: tz-config mountPath: /etc/localtime readOnly: true
2. Adaptar a lógica do ciclo de vida do contêiner da aplicação
Dependendo do tipo de carga de trabalho, modifique o contêiner da aplicação para suportar uma saída coordenada com o sidecar:
Tarefas de curta duração (Job/CronJob)
# 1. Wait for LoongCollector to be ready
echo "[$(date)] Application: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Application: LoongCollector is ready, starting application logic"
# 2. Execute core application logic (ensure logs are written to the shared directory)
echo "Hello, World!" >> /app/logs/business.log
# 3. Save the exit code
retcode=$?
echo "[$(date)] Application: Task completed with exit code: $retcode"
# 4. Notify LoongCollector that the application task is complete
touch /tasksite/tombstone
echo "[$(date)] Application: Tombstone created, exiting"
exit $retcode
Serviços de longa duração (Deployment / StatefulSet)
# Define the signal handler function
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Send a QUIT signal to Nginx for a graceful stop
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Wait for Nginx to stop gracefully
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Notify LoongCollector that the application container has stopped
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Register the signal handler
trap _term_handler SIGTERM SIGINT SIGQUIT
# Wait for LoongCollector to be ready
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting application logic"
# Start Nginx
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Wait for the Nginx process
wait $NGINX_PID
EXIT_CODE=$?
# Also notify LoongCollector if the exit was not caused by a signal
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
3. Definir o período de encerramento gracioso
Em spec.template.spec, defina um período de encerramento gracioso longo o suficiente para permitir que o LoongCollector envie todos os logs restantes.
spec:
# ... Your other existing spec configurations ...
template:
spec:
terminationGracePeriodSeconds: 600 # 10-minute graceful stop period4. Variáveis
|
Parâmetro |
Descrição |
|
|
O ID da sua conta do Alibaba Cloud. Configure user identifiers. |
|
|
Um identificador personalizado usado para criar um grupo de máquinas. Exemplo: null
Certifique-se de que este identificador seja exclusivo dentro da região do Project. |
|
|
A configuração que corresponde à região e ao tipo de acesso à rede do seu Project do SLS. Service regions. Exemplo: Se o seu Project estiver na região China (Hangzhou), use |
|
|
Um nome personalizado para o volume compartilhado. null
O |
|
|
O caminho de montagem no contêiner do LoongCollector onde os logs de texto estão localizados. |
5. Aplicar a configuração e verificar
-
Execute o seguinte comando para implantar as alterações:
kubectl apply -f <YOUR-YAML> -
Verifique o status do pod para confirmar que o contêiner do LoongCollector foi injetado com sucesso:
kubectl describe pod <YOUR-POD-NAME>Se você vir dois contêineres (o contêiner da aplicação e
loongcollector) com status Running, a injeção foi bem-sucedida.
Etapa 2: Criar um grupo de máquinas com identificador personalizado
Esta etapa registra as instâncias de sidecar do LoongCollector no SLS para gerenciamento centralizado da configuração de coleta.
Procedimento
-
Criar um grupo de máquinas
-
Acesse o Project de destino. No painel de navegação à esquerda, clique em
. -
Na página Machine Groups, clique em
> Create Machine Group.
-
-
Configurar o grupo de máquinas
Defina os seguintes parâmetros e clique em OK:
-
Name: O nome do grupo de máquinas. Não pode ser alterado após a criação. O nome deve atender aos seguintes requisitos:
-
Conter apenas letras minúsculas, dígitos, hifens (-) e underscores (_).
-
Começar e terminar com uma letra minúscula ou um dígito.
-
Ter de 2 a 128 caracteres.
-
-
Machine Group Identifier: Selecione Custom Identifier.
-
Custom Identifier: Insira o valor da variável de ambiente
ALIYUN_LOGTAIL_USER_DEFINED_IDque você definiu para o contêiner do LoongCollector no arquivo YAML na Etapa 1. O valor deve corresponder exatamente. Caso contrário, a associação falhará.
-
-
Verificar o status de heartbeat do grupo de máquinas
Após criar o grupo de máquinas, clique no nome dele para verificar o status de heartbeat na seção Status do Grupo de Máquinas.
-
OK: O LoongCollector se conectou ao SLS e o grupo de máquinas está registrado.
-
FAIL:
-
A alteração de configuração pode levar até dois minutos para entrar em vigor. Atualize a página e verifique o status novamente.
-
Se o status ainda estiver como FAIL após dois minutos, consulte Troubleshoot Logtail machine group issues.
-
-
Cada pod corresponde a uma instância separada do LoongCollector. Para gerenciamento granular, use identificadores personalizados diferentes para aplicações ou ambientes distintos.
Etapa 3: Criar uma configuração de coleta
Uma configuração de coleta especifica quais arquivos de log o LoongCollector coleta, como analisá-los e qual conteúdo filtrar.
Procedimento
-
Na página
Logstore, clique no
antes do nome do Logstore de destino para expandir. -
Clique em
ao lado de Data Collection. Na caixa de diálogo Quick Data Import, localize o cartão Kubernetes - File e clique em Integrate Now. -
Defina as Machine Group Configurations e clique em Next.
-
Cenário: Selecione Kubernetes Clusters.
-
Método de implantação: Selecione Sidecar.
-
Selecionar grupo de máquinas: Na lista Source Machine Group, selecione o grupo de máquinas criado na Etapa 2. Clique em
para movê-lo para a lista Applied Machine Group.
-
-
Na página Logtail Configurations, defina as regras de coleta do Logtail.
1. Configurações globais e de entrada
Defina o nome, a fonte de logs e o escopo de coleta para a configuração de coleta.
Global Configurations:
-
Configuration Name: Um nome personalizado para a configuração de coleta. Este nome deve ser exclusivo dentro do Project e não pode ser alterado após a criação. Convenções de nomenclatura:
-
Pode conter apenas letras minúsculas, dígitos, hifens (-) e underscores (_).
-
Deve começar e terminar com uma letra minúscula ou um dígito.
-
Input Configurations:
-
Type: Selecione Text Log Collection.
-
Logtail Deployment Mode: Selecione Sidecar.
-
File Path Type:
-
Path in Container: Coleta arquivos de log de dentro de um contêiner.
-
Host Path: Coleta logs de serviço locais do host.
-
-
File Path: O caminho para coleta de logs.
-
Linux: O caminho deve começar com uma barra (/). Por exemplo,
/data/mylogs/**/*.logespecifica todos os arquivos com a extensão .log no diretório/data/mylogse seus subdiretórios. -
Windows: O caminho deve começar com uma letra de unidade, como
C:\Program Files\Intel\**\*.Log.
-
-
Maximum Directory Monitoring Depth: Especifica a profundidade máxima de diretório para o curinga
**no File Path. O valor padrão de 0 monitora apenas o diretório atual.
Maximum Directory Monitoring Depth: Especifica a profundidade máxima de diretório para o curinga ** no File Path. O valor padrão 0 monitora apenas o diretório atual.
2. Processamento e estruturação de logs
Configure regras de processamento para estruturar logs brutos em pares chave-valor pesquisáveis. Primeiro, adicione uma amostra de log:
Na seção Processor Configurations da página Logtail Configuration, clique em Add Sample Log e insira uma amostra de log. O sistema identifica o formato e gera regras de análise automaticamente.
Caso de uso 1: Processar logs multilinha (como logs de pilha Java)
Logs como pilhas de exceções Java abrangem várias linhas. Sem o modo multilinha, eles são divididos em registros incompletos. Ative o modo multilinha e defina uma expressão regular para corresponder à primeira linha, mesclando linhas consecutivas em um único log.
Exemplo:
|
Log bruto sem nenhum processamento |
No modo de coleta padrão, cada linha é um log separado, quebrando o stack trace e perdendo o contexto |
Com o modo multilinha ativado, uma expressão regular para corresponder à primeira linha identifica o log completo, preservando toda a sua estrutura semântica. |
|
|
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configuration, ative Multi-line Mode:
-
Em Type, selecione Custom ou Multi-line JSON.
-
Custom: Para logs brutos com formato variável, configure uma Regex to Match First Line para identificar a linha inicial de cada log.
-
Regex to Match First Line: Gere automaticamente ou insira manualmente uma expressão regular que corresponda a uma linha completa de dados. Por exemplo, a expressão regular para o exemplo anterior é
\[\d+-\d+-\w+:\d+:\d+,\d+]\s\[\w+]\s.*.-
Geração automática: Clique em Generate. Em seguida, na caixa de texto Log Sample, selecione o conteúdo do log que deseja extrair e clique em Automatically Generate.
-
Entrada manual: Clique em Manually Enter Regular Expression. Depois de inserir a expressão, clique em Validate.
-
-
-
Multi-line JSON: O SLS trata automaticamente as quebras de linha dentro de um único log bruto se o log estiver no formato JSON padrão.
-
-
Processing Method If Splitting Fails:
-
Discard: Descarta um segmento de texto se ele não corresponder à regra de início de linha.
-
Retain Single Line: Mantém o texto não correspondente em linhas separadas.
-
Cenário 2: Logs estruturados
Logs brutos em formatos não estruturados (como logs de acesso NGINX) são difíceis de consultar diretamente. Os plugins de análise do SLS convertem esses logs em pares chave-valor estruturados para análise e alertas.
Exemplo:
|
Log bruto |
Log estruturado |
|
|
Etapas de configuração: Na área Processor Configurations da página Logtail Configurations:
-
Adicione um plugin de análise: Clique em Add Processor e configure um plugin, como expressão regular, delimitador ou plugin de análise JSON, de acordo com o formato do seu log. Por exemplo, para coletar logs NGINX, selecione .
-
NGINX Log Configuration: Copie toda a definição
log_formatdo arquivo de configuração do seu servidor Nginx (nginx.conf) e cole nesta caixa de texto.Exemplo:
log_format main '$remote_addr - $remote_user [$time_local] "$request" ''$request_time $request_length ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent"';nullA definição de formato deve corresponder exatamente ao log_format do seu servidor. Caso contrário, a análise falhará.
-
Descrição dos parâmetros de configuração gerais: Os parâmetros a seguir são comuns a vários plugins de análise e possuem funções consistentes.
-
Campo original: Especifica o campo de origem a ser analisado. O padrão é
content, que corresponde à entrada de log coletada inteira. -
Manter campo original se a análise falhar: Recomendado. Se o plugin não conseguir analisar um log, esta opção mantém o conteúdo bruto do log no campo original.
-
Manter campo original se a análise for bem-sucedida: Se selecionada, esta opção mantém o conteúdo bruto do log mesmo após a análise bem-sucedida.
-
3. Filtragem de logs
Coletar grandes volumes de logs de baixo valor (como nível DEBUG ou INFO) desperdiça armazenamento, aumenta custos, reduz a eficiência de consultas e apresenta riscos de vazamento de dados. Configure políticas de filtragem para uma coleta de logs eficiente e segura.
Filtragem de conteúdo
Filtre campos com base no conteúdo do log, como coletar apenas logs em que o nível seja WARNING ou ERROR.
Exemplo:
|
Log bruto sem nenhum processamento |
Coletar apenas logs |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configuration
Clique em Add Processor e selecione :
-
Field Name: O campo de log usado para filtragem.
-
Field Value: A expressão regular usada para filtragem. Somente correspondências completas são suportadas, não correspondências parciais de palavras-chave.
Lista de bloqueios de coleta
Use uma lista de bloqueios para excluir diretórios ou arquivos específicos, evitando que logs irrelevantes ou sensíveis sejam enviados.
Procedimento: Na seção da página Logtail Configuration, ative Collection Blacklist e clique em Add.
Suporta correspondência completa e com curingas para diretórios e nomes de arquivos. Os únicos caracteres curinga suportados são o asterisco (*) e o ponto de interrogação (?).
-
File Path Blacklist: Especifica os caminhos de arquivo a serem excluídos. Exemplos:
-
/home/admin/private*.log: Ignora todos os arquivos no diretório/home/admin/que começam com private e terminam com .log. -
/home/admin/private*/*_inner.log: Ignora arquivos que terminam com _inner.log dentro de diretórios que começam com private sob o diretório/home/admin/.
-
-
File Blacklist: Uma lista de nomes de arquivos a serem ignorados durante a coleta. Exemplo:
-
app_inner.log: Ignora todos os arquivos com o nomeapp_inner.logdurante a coleta.
-
-
Directory Blacklist: Os caminhos de diretório não podem terminar com uma barra (/). Exemplos:
-
/home/admin/dir1/: A lista de bloqueios de diretório não terá efeito. -
/home/admin/dir*: Ignora arquivos em todos os subdiretórios que começam com dir sob o diretório/home/admin/durante a coleta. -
/home/admin/*/dir: Ignora todos os arquivos em subdiretórios chamados dir no segundo nível do diretório/home/admin/. Por exemplo, arquivos no diretório/home/admin/a/dirsão ignorados, mas arquivos no diretório/home/admin/a/b/dirsão coletados.
-
Filtragem de contêineres
Defina condições de coleta com base em metadados de contêineres (variáveis de ambiente, labels de Pod, namespaces, nomes de contêineres) para controlar de quais contêineres os logs são coletados.
Etapas de configuração: Na página Logtail Configurations, na área Input Configurations, ative Container Filtering e clique em Add.
Múltiplas condições possuem uma relação "AND". Toda correspondência de expressões regulares é baseada no mecanismo de expressões regulares RE2 do Go, que possui algumas limitações em comparação com mecanismos como PCRE. Siga as diretrizes em Apêndice: Limites de expressões regulares (filtragem de contêineres) ao escrever expressões regulares.
-
Lista de bloqueios/lista de permissões de variáveis de ambiente: Filtre contêineres com base em suas variáveis de ambiente.
-
Lista de bloqueios/lista de permissões de labels de Pod K8s: Filtre contêineres com base nos labels de Pod dos seus pods de hospedagem.
-
Correspondência de regex de nome de Pod K8s: Filtre contêineres com base no nome do Pod.
-
Correspondência de regex de Namespace K8s: Filtre contêineres com base no namespace.
-
Correspondência de regex de nome de contêiner K8s: Filtre contêineres com base no nome.
-
Lista de bloqueios/lista de permissões de labels de contêiner: Filtre contêineres com base em seus labels. Este método é destinado ao Docker e não é recomendado para Kubernetes.
4. Classificação de logs
Em cenários onde múltiplas aplicações compartilham o mesmo formato de log, distinguir a origem do log pode ser difícil. Configure tópicos de log e marcação de logs para automatizar a associação de contexto e a classificação lógica.
Tópicos de log
Quando múltiplas aplicações possuem logs com o mesmo formato, mas caminhos diferentes (como /apps/app-A/run.log e /apps/app-B/run.log), gere um tópico para diferenciar os logs de cada serviço.
Procedimento: : Selecione um método para gerar tópicos. Os três tipos a seguir são suportados:
-
Tópico do grupo de máquinas: Quando uma configuração de coleta é aplicada a vários grupos de máquinas, o LoongCollector usa o nome do grupo de máquinas do servidor como o campo
__topic__. Adequado para dividir logs por host. -
Custom: Usa o formato
customized://<custom_topic_name>, comocustomized://app-login. Este formato é adequado para casos de uso de tópicos estáticos com identificadores de negócios fixos. -
Extração de caminho de arquivo: Extraia informações-chave do caminho do arquivo de log para marcar dinamicamente a origem do log. Adequado quando múltiplos usuários ou aplicações compartilham o mesmo nome de arquivo de log, mas diferem no caminho:
/data/logs ├── userA │ └── serviceA │ └── service.log ├── userB │ └── serviceA │ └── service.log └── userC └── serviceA └── service.logConfigure a Extração de caminho de arquivo e use uma expressão regular para extrair informações-chave do caminho completo. O resultado correspondente é então enviado para o logstore como o tópico.
Regra de extração de caminho de arquivo: Baseada em grupos de captura de expressões regulares
Ao configurar uma expressão regular, o sistema determina automaticamente o formato do campo de saída com base no número e na nomeação dos grupos de captura. As regras são as seguintes:
Na expressão regular para um caminho de arquivo, você deve escapar a barra (/).
Tipo de grupo de captura
Caso de uso
Campo gerado
Exemplo de regex
Exemplo de caminho correspondente
Exemplo de campo gerado
Grupo de captura único (apenas um
(.*?))Apenas uma dimensão é necessária para distinguir a origem (como nome de usuário ou ambiente)
Gera o campo
__topic__\/logs\/(.*?)\/app\.log/logs/userA/app.log__topic__: userAMúltiplos grupos de captura - sem nome (múltiplos
(.*?))Múltiplas dimensões são necessárias para distinguir a origem, mas tags semânticas não são necessárias
Gera um campo de tag
__tag__:__topic_{i}__, onde{i}é o número ordinal do grupo de captura\/logs\/(.*?)\/(.*?)\/app\.log/logs/userA/svcA/app.log__tag__:__topic_1__userA__tag__:__topic_2__svcAMúltiplos grupos de captura - nomeados (usando
(?P<name>.*?)Múltiplas dimensões são necessárias para distinguir a origem, e os significados dos campos devem ser claros para facilitar a consulta e análise
Gera um campo de tag
__tag__:{name}\/logs\/(?P<user>.*?)\/(?P<service>.*?)\/app\.log/logs/userA/svcA/app.log__tag__:user:userA;__tag__:service:svcA
Marcação de logs
Ative o enriquecimento de tags de log para extrair informações-chave de variáveis de ambiente de contêineres ou labels de Pod do Kubernetes como tags para agrupamento detalhado de logs.
Etapas de configuração: Na área Input Configurations da página Logtail Configurations, ative Log Tag Enrichment e clique em Add.
-
Environment Variables: Configure o nome da variável de ambiente e o nome da tag. O valor da variável de ambiente é armazenado como o valor da tag.
-
Nome da variável de ambiente: O nome da variável de ambiente a ser extraída.
-
Nome da tag: O nome da tag.
-
-
Pod Labels: Configure o nome do label de Pod e o nome da tag. O valor do label de Pod é armazenado como o valor da tag.
-
Nome do label de Pod: O nome do label de Pod do Kubernetes a ser extraído.
-
Nome da tag: O nome da tag.
-
5. Configuração de saída
Por padrão, todos os logs são enviados para o logstore atual com compressão lz4. Para distribuir logs para vários logstores, configure destinos de saída adicionais.
Distribuição dinâmica para múltiplos destinos
-
A distribuição para múltiplos destinos está disponível apenas para LoongCollector 3.0.0 e versões posteriores. Este recurso não é suportado pelo Logtail.
-
Você pode configurar no máximo cinco destinos de saída.
-
Após configurar múltiplos destinos de saída, a configuração de coleta não aparece mais na lista de configurações de coleta do logstore atual. Para visualizar, modificar ou excluir uma configuração de distribuição para múltiplos destinos, consulte Gerenciar configurações de distribuição para múltiplos destinos.
Etapas de configuração: Na área Output Configurations da página Logtail Configurations.
-
Clique em
para expandir a configuração de saída. -
Clique em Add Output Targets e preencha a seguinte configuração:
-
Logstores: Selecione o logstore de destino.
-
Compression Method: lz4 e zstd são suportados.
-
Route Settings: Roteie logs com base em campos de tag. O sistema envia os logs correspondentes para o logstore de destino. Se esta configuração estiver vazia, o sistema envia todos os logs coletados para este destino.
-
Tag Name: O nome do campo de tag usado para roteamento. Insira apenas o nome do campo (por exemplo,
__path__), sem o prefixo__tag__:. Os campos de tag se dividem em duas categorias:As tags são descritas em Gerenciar tags de coleta do LoongCollector.
-
Relacionadas ao agente: Relacionadas ao agente de coleta e independentes de plugins. Exemplos incluem
__hostname__e__user_defined_id__. -
Relacionadas a plugins de entrada: Fornecidas por plugins de entrada para enriquecer logs com informações contextuais. Exemplos incluem
__path__para coleta de arquivos e_pod_name_ou_container_name_para coleta do Kubernetes.
-
-
Tag Value: Se o campo de tag de um log corresponder a este valor, o sistema envia o log para este logstore de destino.
-
Discard this tag?: Se ativado, o sistema remove este campo de tag dos logs antes de enviá-los.
-
-
Etapa 4: Configurar consulta e análise
Após configurar o processamento de logs e os plugins, clique em Next para acessar a página Query and Analysis Configurations:
-
O índice de texto completo é habilitado por padrão, permitindo buscas por palavras-chave no conteúdo bruto dos logs.
-
Para consultas precisas por campo, aguarde o carregamento de Preview Data e clique em Automatic Index Generation. O SLS gera um índice de campo com base na primeira entrada dos dados de pré-visualização.
Após concluir a configuração, clique em Next para finalizar todo o processo de coleta.
Etapa 5: Visualizar logs enviados
Após criar uma configuração de coleta e aplicá-la a um grupo de máquinas, o sistema a implanta e começa a coletar logs incrementais.
-
Verificar novas entradas de log: O LoongCollector coleta apenas logs incrementais. Execute
tail -f /path/to/your/log/filee use sua aplicação para gerar novas entradas de log. -
Consultar logs: Acesse a página Search & Analyze do Logstore de destino e clique em Search & Analyze. O intervalo de tempo padrão é os últimos 15 minutos. Verifique se novos logs aparecem. Os campos padrão para logs de texto de contêiner são os seguintes:
Parâmetro
Descrição
tag:hostname
O nome do host do contêiner.
tag:path
O caminho do arquivo de log no contêiner.
tag:container_ip
O endereço IP do contêiner.
tag:image_name
O nome da imagem utilizada pelo contêiner.
nullSe várias imagens possuírem o mesmo hash, mas nomes ou tags diferentes, a configuração de coleta seleciona um dos nomes com base no hash. Não há garantia de que o nome selecionado corresponda ao definido no arquivo YAML.
tag:pod_name
O nome do pod.
tag:namespace
O namespace ao qual o pod pertence.
tag:pod_uid
O identificador exclusivo (UID) do pod.
Configurações essenciais para integridade dos logs
Os parâmetros de configuração a seguir afetam diretamente a integridade e a confiabilidade da coleta de logs.
Configuração de recursos do LoongCollector
A configuração adequada de recursos é essencial para o desempenho da coleta em cenários de alto volume. Parâmetros principais:
# Configure CPU and memory resources based on the log generation rate
resources:
limits:
cpu: "2000m"
memory: "2Gi"
# Parameters that affect collection performance
env:
- name: cpu_usage_limit
value: "2"
- name: mem_usage_limit
value: "2048"
- name: max_bytes_per_sec
value: "209715200"
- name: process_thread_count
value: "8"
- name: send_request_concurrency
value: "20"
Para configurar o Logtail com base no volume de dados, consulte Tipos de rede, parâmetros de inicialização e arquivos de configuração do Logtail.
Configuração de cota no lado do servidor
Limites de cota no lado do servidor ou problemas de rede podem bloquear a transmissão de dados, criando contrapressão que afeta a integridade dos logs. Use o CloudLens for SLS para monitorar as cotas de recursos do Project.
Otimização da configuração de coleta inicial
A política de coleta inicial de arquivos na inicialização do pod afeta a integridade dos logs, especialmente em cenários de alto throughput.
O tamanho de coleta inicial especifica onde a coleta começa em um novo arquivo. Padrão: 1024 KB.
-
Se um arquivo for menor que 1024 KB, a coleta começa desde o início.
-
Se um arquivo for maior que 1024 KB, a coleta começa a 1024 KB do final.
-
O tamanho de coleta inicial pode variar de 0 a 10.485.760 KB (10 GB).
enable_full_drain_mode
Este parâmetro garante que o LoongCollector conclua toda a coleta e transmissão de dados antes de encerrar ao receber um sinal SIGTERM.
# Parameter that affects collection integrity
env:
- name: enable_full_drain_mode
value: "true" # Enable full drain mode
FAQ
Gerenciar configurações de distribuição para múltiplos destinos
As configurações de distribuição para múltiplos destinos se aplicam a vários Logstores e devem ser gerenciadas no nível do Project:
-
Faça login no console do Log Service e clique no nome do Project de destino.
-
Na página do Project de destino, no painel de navegação à esquerda, clique em
.nullEsta página centraliza o gerenciamento de todas as configurações de coleta dentro do Project, incluindo as que permanecem após a exclusão de um Logstore.
Próximas etapas
-
Visualização de dados: Utilize um painel de visualização para monitorar tendências nas principais métricas.
-
Alertas automatizados para anomalias de dados: Configure políticas de alerta para detectar anomalias do sistema em tempo real.
-
O SLS coleta apenas logs incrementais. Para coletar logs históricos, consulte Importar arquivos de log históricos.
Apêndice: Exemplo de YAML
Este exemplo mostra uma configuração completa do Kubernetes com um contêiner de aplicação Nginx e um contêiner sidecar do LoongCollector.
Antes de usar esta configuração, substitua os seguintes placeholders:
-
Substitua
${your_aliyun_user_id}pelo ID da sua conta Alibaba Cloud. -
Substitua
${your_machine_group_user_defined_id}pelo identificador personalizado do grupo de máquinas que você criou na Etapa 3. O valor deve corresponder exatamente. -
Substitua
${your_region_config}pelo nome da configuração correspondente à região e ao tipo de rede do seu Project do SLS.Exemplo: Se seu Project estiver na região China (Hangzhou), use
cn-hangzhoupara acesso pela rede interna oucn-hangzhou-internetpara acesso pela rede pública.
Tarefas de curta duração (Job/CronJob)
apiVersion: batch/v1
kind: Job
metadata:
name: demo-job
spec:
backoffLimit: 3
activeDeadlineSeconds: 3600
completions: 1
parallelism: 1
template:
spec:
restartPolicy: Never
terminationGracePeriodSeconds: 300
containers:
# Application container
- name: demo-job
image: debian:bookworm-slim
command: ["/bin/bash", "-c"]
args:
- |
# Wait for LoongCollector to be ready.
echo "[$(date)] Business: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] Business: LoongCollector is ready, starting business logic"
# Run the application logic.
echo "Hello, World!" >> /app/logs/business.log
# Save the exit code.
retcode=$?
echo "[$(date)] Business: Task completed with exit code: $retcode"
# Notify LoongCollector that the task is finished.
touch /tasksite/tombstone
echo "[$(date)] Business: Tombstone created, exiting"
exit $retcode
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500"
memory: "512Mi"
# volume mounts
volumeMounts:
- name: app-logs
mountPath: /app/logs
- name: tasksite
mountPath: /tasksite
# LoongCollector sidecar container
- name: loongcollector
image: aliyun-observability-release-registry.cn-hongkong.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Start the LoongCollector service.
/etc/init.d/loongcollectord start
# Wait for the configuration to download and the service to be ready.
sleep 15
# Verify the service status.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Wait for the application container to finish.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Allow sufficient time to send remaining logs.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "500m"
memory: "512Mi"
# environment variables
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "your-user-id"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "your-user-defined-id"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/cn-hongkong/ilogtail_config.json"
- name: ALIYUN_LOG_ENV_TAGS
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_"
# Inject pod metadata.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
# volume mounts
volumeMounts:
- name: app-logs
mountPath: /app/logs
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Volume definitions
volumes:
- name: app-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "10Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Serviços de longa duração (Deployment / StatefulSet)
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-demo
namespace: production
labels:
app: nginx-demo
version: v1.0.0
spec:
replicas: 3
strategy:
type: RollingUpdate
rollingUpdate:
maxUnavailable: 1
maxSurge: 1
selector:
matchLabels:
app: nginx-demo
template:
metadata:
labels:
app: nginx-demo
version: v1.0.0
spec:
terminationGracePeriodSeconds: 600 # 10-minute graceful shutdown period
containers:
# Application container - Web application
- name: nginx-demo
image: anolis-registry.cn-zhangjiakou.cr.aliyuncs.com/openanolis/nginx:1.14.1-8.6
# Startup command and signal handling
command: ["/bin/sh", "-c"]
args:
- |
# Define the signal handler.
_term_handler() {
echo "[$(date)] [nginx-demo] Caught SIGTERM, starting graceful shutdown..."
# Send the QUIT signal to Nginx for a graceful stop.
if [ -n "$NGINX_PID" ]; then
kill -QUIT "$NGINX_PID" 2>/dev/null || true
echo "[$(date)] [nginx-demo] Sent SIGQUIT to Nginx PID: $NGINX_PID"
# Wait for Nginx to stop gracefully.
wait "$NGINX_PID"
EXIT_CODE=$?
echo "[$(date)] [nginx-demo] Nginx stopped with exit code: $EXIT_CODE"
fi
# Notify LoongCollector that the application container has stopped.
echo "[$(date)] [nginx-demo] Writing tombstone file"
touch /tasksite/tombstone
exit $EXIT_CODE
}
# Register the signal handler.
trap _term_handler SIGTERM SIGINT SIGQUIT
# Wait for LoongCollector to be ready.
echo "[$(date)] [nginx-demo]: Waiting for LoongCollector to be ready..."
until [[ -f /tasksite/cornerstone ]]; do
sleep 1
done
echo "[$(date)] [nginx-demo]: LoongCollector is ready, starting business logic"
# Start Nginx.
echo "[$(date)] [nginx-demo] Starting Nginx..."
nginx -g 'daemon off;' &
NGINX_PID=$!
echo "[$(date)] [nginx-demo] Nginx started with PID: $NGINX_PID"
# Wait for the Nginx process to exit.
wait $NGINX_PID
EXIT_CODE=$?
# If the process exits without a signal, notify LoongCollector.
if [ ! -f /tasksite/tombstone ]; then
echo "[$(date)] [nginx-demo] Unexpected exit, writing tombstone"
touch /tasksite/tombstone
fi
exit $EXIT_CODE
# Resource requests and limits
resources:
requests:
cpu: "200m"
memory: "256Mi"
limits:
cpu: "1000m"
memory: "1Gi"
# volume mounts
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# LoongCollector sidecar container
- name: loongcollector
image: aliyun-observability-release-registry.cn-shenzhen.cr.aliyuncs.com/loongcollector/loongcollector:v3.1.1.0-20fa5eb-aliyun
command: ["/bin/bash", "-c"]
args:
- |
echo "[$(date)] LoongCollector: Starting initialization"
# Start the LoongCollector service.
/etc/init.d/loongcollectord start
# Wait for the configuration to download and the service to be ready.
sleep 15
# Verify the service status.
if /etc/init.d/loongcollectord status; then
echo "[$(date)] LoongCollector: Service started successfully"
touch /tasksite/cornerstone
else
echo "[$(date)] LoongCollector: Failed to start service"
exit 1
fi
# Wait for the application container to finish.
echo "[$(date)] LoongCollector: Waiting for business container to complete"
until [[ -f /tasksite/tombstone ]]; do
sleep 2
done
echo "[$(date)] LoongCollector: Business completed, waiting for log transmission"
# Allow sufficient time to send remaining logs.
sleep 30
echo "[$(date)] LoongCollector: Stopping service"
/etc/init.d/loongcollectord stop
echo "[$(date)] LoongCollector: Shutdown complete"
# health check
livenessProbe:
exec:
command: ["/etc/init.d/loongcollectord", "status"]
initialDelaySeconds: 30
periodSeconds: 10
timeoutSeconds: 5
failureThreshold: 3
# Resource requests and limits
resources:
requests:
cpu: "100m"
memory: "128Mi"
limits:
cpu: "2000m"
memory: "2048Mi"
# environment variables
env:
- name: ALIYUN_LOGTAIL_USER_ID
value: "${your_aliyun_user_id}"
- name: ALIYUN_LOGTAIL_USER_DEFINED_ID
value: "${your_machine_group_user_defined_id}"
- name: ALIYUN_LOGTAIL_CONFIG
value: "/etc/ilogtail/conf/${your_region_config}/ilogtail_config.json"
# Enable full drain mode to send all logs when the pod stops.
- name: enable_full_drain_mode
value: "true"
# Append pod environment information as log tags.
- name: "ALIYUN_LOG_ENV_TAGS"
value: "_pod_name_|_pod_ip_|_namespace_|_node_name_|_node_ip_"
# Get pod and node information.
- name: "_pod_name_"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: "_pod_ip_"
valueFrom:
fieldRef:
fieldPath: status.podIP
- name: "_namespace_"
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: "_node_name_"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
- name: "_node_ip_"
valueFrom:
fieldRef:
fieldPath: status.hostIP
# volume mounts
volumeMounts:
- name: nginx-logs
mountPath: /var/log/nginx
readOnly: true
- name: tasksite
mountPath: /tasksite
- name: tz-config
mountPath: /etc/localtime
readOnly: true
# Volume definitions
volumes:
- name: nginx-logs
emptyDir: {}
- name: tasksite
emptyDir:
medium: Memory
sizeLimit: "50Mi"
- name: tz-config
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
Apêndice: Processadores nativos
Na seção Processor Configurations da página Logtail Configuration, adicione processadores para estruturar logs brutos. Para adicionar um plugin de processamento a uma configuração existente:
-
No painel de navegação à esquerda, escolha
Logstores e localize o logstore de destino. -
Clique no ícone
antes do nome para expandir o logstore. -
Clique em Logtail Configuration. Na lista de configurações, localize a configuração do Logtail desejada e clique em Manage Logtail Configuration na coluna Actions.
-
Na página de configuração do Logtail, clique em Edit.
Esta seção apresenta apenas os plugins de processamento mais utilizados, que cobrem os casos de uso comuns de processamento de log. Para mais recursos, consulte Extended processors.
Regras para combinar plugins (para LoongCollector / Logtail 2.0 e posterior):
-
Processadores nativos e estendidos podem ser usados de forma independente ou combinados conforme necessário.
-
Priorize processadores nativos, pois oferecem melhor desempenho e estabilidade.
-
Quando os recursos nativos não atenderem às suas necessidades de negócio, adicione processadores estendidos após os nativos configurados para processamento complementar.
Restrição de ordem:
Os plugins são executados sequencialmente na ordem configurada, formando uma cadeia de processamento. Todos os processadores nativos devem preceder qualquer processador estendido. Após adicionar um processador estendido, não é possível adicionar mais processadores nativos.
Parsing com regex
Use expressões regulares para extrair campos de logs em pares chave-valor para consulta e análise independentes.
Exemplo:
|
Log bruto sem nenhum processamento |
Usando o plugin de parsing com expressão regular |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configurations, clique em Add Processor e selecione .
-
Regular Expression: Uma expressão regular para corresponder ao conteúdo do log. Você pode gerá-la automaticamente ou inseri-la manualmente.
-
Geração automática:
-
Clique em Generate.
-
Na caixa Log Sample, selecione o conteúdo do log a ser extraído.
-
Clique em Generate Regular Expression.
Por exemplo, se você colar um log no formato Apache Combined na caixa Log Sample, ele conterá campos como IP do cliente, timestamp, método e caminho da requisição, código de status, Referer e User-Agent.
-
-
Entrada manual: Manually Enter Regular Expression com base no formato do log.
Após inserir a expressão, clique em Validate para testar se ela analisa corretamente o conteúdo do log.
-
-
Extracted Field: Defina um nome de campo (chave) para cada parte do conteúdo de log extraído (valor).
-
Para informações sobre outros parâmetros, consulte as descrições gerais de parâmetros em Use case 2: Structured logs.
Parsing com delimitador
Use o parsing com delimitador para dividir o conteúdo do log em pares chave-valor. Suporta delimitadores de caractere único e múltiplos caracteres.
Exemplo:
|
Log bruto sem nenhum processamento |
Campos divididos pelo caractere especificado |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configurations, clique em Add Processor e selecione .
-
Delimiter: O caractere usado para dividir o conteúdo do log.
Exemplo: Para um arquivo CSV, selecione Custom e insira uma vírgula (,).
-
Quote: Quando um valor de campo contém o delimitador, você deve especificar um caractere de aspas para envolver o campo e evitar divisão incorreta.
-
Extracted Field: Atribua um nome de campo (chave) a cada coluna em ordem sequencial. Os nomes de campo devem seguir estas regras:
-
Podem conter apenas letras, dígitos e underscores (_).
-
Devem começar com uma letra ou um underscore (_).
-
Podem ter até 128 bytes de comprimento.
-
-
Para informações sobre outros parâmetros, consulte as descrições gerais de parâmetros em Use case 2: Structured logs.
Parsing JSON
Analisa logs formatados como objetos JSON em pares chave-valor.
Exemplo:
|
Log bruto sem nenhum processamento |
Extração automática de pares chave-valor JSON padrão |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configurations, clique em Add Processor e selecione .
-
Original Field: O valor padrão é
content. Este campo contém o log bruto a ser analisado. -
Para informações sobre outros parâmetros, consulte as descrições gerais de parâmetros em Use case 2: Structured logs.
Expansão de campos JSON
Expande um campo contendo um objeto JSON aninhado em múltiplos pares chave-valor.
Exemplo:
|
Log bruto sem nenhum processamento |
Profundidade de expansão: 0, usando profundidade de expansão como prefixo |
Profundidade de expansão: 1, usando profundidade de expansão como prefixo |
|
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configurations, clique em Add Processor e selecione .
-
Original Field: O nome do campo original a ser expandido, por exemplo,
content. -
JSON Expansion Depth: O nível de expansão do objeto JSON. O valor 0 (padrão) expande completamente o objeto, 1 expande apenas o nível atual, e assim por diante.
-
Character to Concatenate Expanded Keys: O caractere usado para unir nomes de campo durante a expansão JSON. O padrão é o underscore (_).
-
Name Prefix of Expanded Keys: Um prefixo a ser adicionado aos nomes de campo após a expansão JSON.
-
Expand Array: Ative este botão para expandir arrays em pares chave-valor com índices.
Exemplo:
{"k":["a","b"]}é expandido parak[0]: "a", k[1]: "b".Para renomear um campo expandido (por exemplo, de
prefix_s_key_k1paranew_field_name), adicione um processador Rename Fields para concluir o mapeamento. -
Para informações sobre outros parâmetros, consulte as descrições gerais de parâmetros em Use case 2: Structured logs.
Parsing de array JSON
Use a função json_extract para extrair objetos JSON de um array JSON.
Exemplo:
|
Log bruto sem nenhum processamento |
Extrair estrutura de array JSON |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configuration, alterne o Processing Mode para SPL, configure o SPL Statement e use a função json_extract para extrair objetos JSON do array JSON.
Exemplo: Extraia elementos do array JSON no campo de log content e armazene os resultados nos novos campos json1 e json2.
* | extend json1 = json_extract(content, '$[0]'), json2 = json_extract(content, '$[1]')Parsing de log Apache
Estruture o conteúdo do log com base nas definições do seu arquivo de configuração de log Apache, analisando-o em múltiplos pares chave-valor.
Exemplo:
|
Log bruto sem nenhum processamento |
Parsing do Apache Common Log Format |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configurations, clique em Add Processor e selecione .
-
Log Format: combined
-
APACHE LogFormat Configuration: O sistema preenche automaticamente este campo com base no Log Format selecionado.
nullCertifique-se de que o conteúdo preenchido automaticamente corresponda exatamente à definição
LogFormatno arquivo de configuração Apache do seu servidor (normalmente/etc/apache2/apache2.conf). -
Para informações sobre outros parâmetros, consulte as descrições gerais de parâmetros em Use case 2: Structured logs.
Mascaramento de dados
Mascara dados sensíveis em logs.
Exemplo:
|
Log bruto sem nenhum processamento |
Resultado do mascaramento |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configuration, clique em Add Processor e selecione :
-
Original Field: O campo que contém o conteúdo do log antes do parsing.
-
Data Masking Method:
-
const: Substitui o conteúdo sensível por uma string constante.
-
md5: Substitui o conteúdo sensível pelo seu hash MD5.
-
-
Replacement String: Se o Data Masking Method estiver definido como const, insira uma string para substituir o conteúdo sensível.
-
Content Expression that Precedes Replaced Content: A expressão usada para localizar o conteúdo sensível, configurada usando a sintaxe RE2.
-
Content Expression to Match Replaced Content: A expressão regular usada para corresponder ao conteúdo sensível. A expressão deve ser escrita em sintaxe RE2.
Parsing de tempo
Analisa o campo de tempo no log e define o resultado do parsing como o campo __time__ do log.
Exemplo:
|
Log bruto sem nenhum processamento |
Parsing de tempo |
|
|
Procedimento: Na seção Processor Configurations da página Logtail Configuration, clique em Add Processor e selecione :
-
Original Field: O campo que contém o conteúdo do log antes do parsing.
-
Time Format: Defina o formato de tempo correspondente aos timestamps no log.
-
Time Zone: Selecione o fuso horário para o campo de tempo do log. Por padrão, é o fuso horário do ambiente onde o processo LoongCollector (Logtail) está em execução.
Limitações de expressões regulares para filtragem de contêineres
As expressões regulares para filtragem de contêineres usam o motor Go RE2, que possui limitações de sintaxe em comparação com o PCRE.
1. Diferenças de sintaxe de grupos nomeados
Go usa a sintaxe (?P<name>...) para definir um grupo nomeado e não suporta a sintaxe (?<name>...) do PCRE.
-
Sintaxe correta:
(?P<year>\d{4}) -
Sintaxe incorreta:
(?<year>\d{4})
2. Recursos de expressão regular não suportados
O motor RE2 não suporta os seguintes recursos de expressão regular comuns, porém complexos:
-
Asserções:
(?=...),(?!...),(?<=...)e(?<!...) -
Expressões condicionais:
(?(condition)true|false) -
Correspondência recursiva:
(?R)e(?0) -
Referências de subprogramas:
(?&name)e(?P>name) -
Grupos atômicos:
(?>...)
3. Recomendações
Use ferramentas como o Regex101 para depurar expressões regulares. Selecione o modo Golang (RE2) para garantir compatibilidade. Sintaxe não suportada impede que o plugin realize o parsing ou a correspondência corretamente.



