Todos os produtos
Search
Central de documentação

Simple Log Service:Instalação e configuração

Última atualização: Aug 25, 2026

O LoongCollector é o agente de coleta de logs de última geração do Alibaba Cloud Simple Log Service (SLS), que substitui o Logtail com capacidades aprimoradas. Instale-o em um cluster Kubernetes no modo DaemonSet ou Sidecar.

Pré-requisitos

Antes de instalar o LoongCollector, verifique a conectividade de rede entre os nós do cluster e o endpoint do Simple Log Service. Os nós precisam alcançar esse endpoint para que a coleta de logs reporte dados.

  1. Obtenha o endpoint do service:

    1. Faça logon no console do Simple Log Service. Na lista de projetos, clique em no projeto desejado.

    2. Clique em no ícone image ao lado do nome do projeto para abrir a página de visão geral do projeto.

    3. Na seção Basic Information, localize os endpoints públicos e internos da região do projeto.

  2. Execute um teste de conectividade: Faça logon no nó do cluster onde você instalará o LoongCollector e execute o seguinte comando curl. Substitua ${ProjectName} e ${SLS_ENDPOINT} pelos valores reais.

    curl https://${ProjectName}.${SLS_ENDPOINT}
  3. Verifique o resultado do teste:

    • Se o comando retornar {"Error":{"Code":"OLSInvalidMethod",...}}, o nó tem conectividade de rede com o Simple Log Service.

      Nota

      Este teste verifica apenas a conectividade na camada de rede. A resposta de erro é esperada porque a solicitação não possui os parâmetros de API necessários.

    • Caso o comando atinja o tempo limite ou retorne outros erros de camada de rede, como Connection refused, verifique a configuração de rede do nó, as regras do grupo de segurança ou a resolução de DNS.

Métodos de instalação

Escolha um método de instalação com base no tipo de cluster e nos seus requisitos.

Método de instalação

Casos de uso

Instalação em um cluster ACK (modo DaemonSet)

Coleta de logs de clusters gerenciados e dedicados do ACK na mesma conta e região do Alibaba Cloud.

Instalação em um cluster autogerenciado (modo DaemonSet)

  • Coleta de logs de clusters ACK em diferentes contas ou regiões do Alibaba Cloud.

  • Coleta de logs de clusters Kubernetes em data centers autogerenciados.

  • Coleta de logs de clusters Kubernetes em outros provedores de cloud.

Instalação no modo Sidecar

Coleta de logs de aplicações específicas que exigem:

  • Isolamento de recursos: Evita que o agente DaemonSet afete outros Pods no nó.

  • Coleta granular: Permite configurar uma source de coleta, regras de filtragem e destino de saída separados para cada aplicação.

Instalação em um cluster ACK (modo DaemonSet)

Instale o LoongCollector com um único clique em no console do Container Service for Kubernetes (ACK). Por padrão, o LoongCollector coleta logs de contêineres e os envia para um Project na mesma conta e região do Alibaba Cloud. Para coletar logs entre contas ou regiões, consulte Instalação em um cluster autogerenciado (modo DaemonSet).

Instalar em um cluster gerenciado ACK existente

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em Components and Add-ons .

  3. Na aba Logs and Monitoring, localize loongcollector e clique em Install.

  4. Após a instalação, o Simple Log Service (SLS) cria automaticamente os seguintes recursos na região do cluster ACK. Visualize-os no console do Simple Log Service (SLS).

    Tipo de recurso

    Nome do recurso

    Finalidade

    Project

    k8s-log-${cluster_id}

    Isola logs de diferentes serviços.

    Machine group

    k8s-group-${cluster_id}

    Grupo de máquinas para loongcollector-ds, usado para coleta de logs.

    k8s-group-${cluster_id}-cluster

    Grupo de máquinas para loongcollector-cluster, usado para coleta de métricas.

    k8s-group-${cluster_id}-singleton

    Grupo de máquinas para configurações específicas de coleta de instância única.

    Importante

    O componente LoongCollector não cria um LogStore chamado config-operation-log. Se esse LogStore já existir, o LoongCollector não gravará logs nele.

Instalar durante a criação de um cluster gerenciado ACK

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Clique em Create Cluster. Na página Component Configurations, marque a caixa de seleção Enable Log Service. Em seguida, selecione Create a new Project ou Use an existing Project.

    Este tópico descreve apenas as configurações do Simple Log Service (SLS). Para obter mais informações sobre outros itens de configuração, consulte Criar um cluster gerenciado ACK .
  3. Ao selecionar Create Project, o Simple Log Service (SLS) cria automaticamente os seguintes recursos. Visualize-os no console do Simple Log Service (SLS).

    Tipo de recurso

    Nome do recurso

    Finalidade

    Project

    k8s-log-${cluster_id}

    Isola logs de diferentes serviços.

    Machine group

    k8s-group-${cluster_id}

    Grupo de máquinas para loongcollector-ds, usado para coleta de logs.

    k8s-group-${cluster_id}-cluster

    Grupo de máquinas para loongcollector-cluster, usado para coleta de métricas.

    k8s-group-${cluster_id}-singleton

    Grupo de máquinas para configurações específicas de coleta de instância única.

    Importante

    O componente LoongCollector não cria um LogStore chamado config-operation-log. Se esse LogStore já existir, o LoongCollector não gravará logs nele.

Instalação em um cluster autogerenciado (modo DaemonSet)

Casos de uso

  • Clusters Kubernetes em data centers autogerenciados

  • Clusters Kubernetes implantados em outros provedores de cloud

  • Coleta de logs de contêineres de clusters ACK em diferentes contas ou regiões do Alibaba Cloud

Nota

Certifique-se de que seu cluster autogerenciado execute o Kubernetes 1.6 ou posterior.

Procedimento

  1. Baixe e extraia o pacote de instalação: Em uma máquina com kubectl instalado e configurado, execute o comando apropriado para a região do seu cluster para baixar o LoongCollector e suas dependências.

    # China regions
    wget https://aliyun-observability-release-cn-shanghai.oss-cn-shanghai.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
    # Regions outside the Chinese mainland
    wget https://aliyun-observability-release-ap-southeast-1.oss-ap-southeast-1.aliyuncs.com/loongcollector/k8s-custom-pkg/3.2.6/loongcollector-custom-k8s-package.tgz; tar xvf loongcollector-custom-k8s-package.tgz; chmod 744 ./loongcollector-custom-k8s-package/k8s-custom-install.sh
  2. Modifique o arquivo de configuração values.yaml: Acesse o diretório loongcollector-custom-k8s-package e modifique o arquivo de configuração ./loongcollector/values.yaml.

    Parâmetros

    values.yaml

    # ===================== Required parameters =====================
    # The name of the project for log collection in this cluster. Example: k8s-log-custom-sd89ehdq
    projectName: ""
    # The region of the project. Example for Shanghai: cn-shanghai
    region: ""
    # The ID of the Alibaba Cloud account that owns the project. Enclose the ID in quotation marks. Example: "123456789"
    aliUid: ""
    # The network to use. Options: Internet (public network) or Intranet (internal network). Default: Internet
    net: Internet
    # The AccessKey ID and AccessKey secret of the Alibaba Cloud account or RAM user.
    accessKeyID: ""
    accessKeySecret: ""
    # A custom cluster ID. The ID can contain uppercase letters, lowercase letters, digits, and hyphens (-).
    clusterID: ""
    
    # ... Optional parameters are omitted ...

    projectName String (Obrigatório)

    Nome do Project para o qual o LoongCollector envia logs. O nome deve seguir estas regras:

    • Deve conter apenas letras minúsculas, dígitos e hifens (-).

    • Deve começar com uma letra minúscula e terminar com uma letra minúscula ou um dígito.

    • Deve ter entre 3 e 63 caracteres.

    region String (Obrigatório)

    ID da região do Project. Para obter uma lista de IDs de região, consulte Regiões.

    aliUid String (Obrigatório)

    ID da conta do Alibaba Cloud proprietária do Project.

    net String (Obrigatório)

    O tipo de rede para transmissão de dados de log.

    • Internet (padrão): Rede pública.

    • Intranet: Rede interna.

    accessKeyID String (Obrigatório)

    AccessKey ID usado para acessar o Project. Recomendamos usar o par de AccessKeys de um usuário RAM. Conceda a política de sistema AliyunLogFullAccess ao usuário RAM. Para obter mais informações sobre o RAM, consulte Visão geral.

    accessKeySecret String (Obrigatório)

    AccessKey secret correspondente ao AccessKey ID.

    clusterID String (Obrigatório)

    ID personalizado para o cluster. O ID deve conter apenas letras maiúsculas, letras minúsculas, dígitos e hifens (-).

    Importante

    Não atribua o mesmo ID de cluster a diferentes clusters Kubernetes.

  3. Execute o script de instalação: No diretório loongcollector-custom-k8s-package, execute o seguinte comando para instalar o LoongCollector e suas dependências.

    bash k8s-custom-install.sh install
  4. Verifique a instalação: Após concluir a instalação, execute o seguinte comando para verificar o status dos pods:

    # Check the pod status
    kubectl get po -n kube-system | grep loongcollector-ds

    Saída de exemplo:

    loongcollector-ds-gnmnh   1/1     Running   0    63s

    Se um pod falhar ao iniciar (seu status não for Running):

    1. Verifique a configuração: Confirme se os parâmetros em values.yaml estão corretos.

    2. Verifique a imagem: Execute o seguinte comando e confira a seção Events da saída para confirmar se a imagem do contêiner foi baixada com êxito.

      kubectl describe pod loongcollector-ds -n kube-system
  5. Após a instalação do LoongCollector, o Simple Log Service cria automaticamente os seguintes recursos. Visualize-os no console do Simple Log Service.

    Tipo de recurso

    Nome do recurso

    Descrição

    Project

    O valor projectName especificado no arquivo values.yaml.

    Unidade de gerenciamento de recursos que isola logs de diferentes serviços.

    Machine group

    k8s-group-${cluster_id}

    Grupo de máquinas contendo todos os nós que coletam logs.

    k8s-group-${cluster_id}-cluster

    Grupo de máquinas para loongcollector-cluster. Usado principalmente para coleta de métricas.

    k8s-group-${cluster_id}-singleton

    Grupo de máquinas de instância única para configurações de coleta específicas.

    Importante

    O LoongCollector não cria um LogStore chamado config-operation-log. Se esse LogStore já existir, o LoongCollector não gravará logs nele.

Instalação no modo Sidecar

O modo Sidecar funciona injetando um contêiner dedicado do LoongCollector (Logtail) no Pod da sua aplicação para coletar logs exclusivamente desse Pod. Esse padrão é ideal quando você precisa de gerenciamento granular de logs, isolamento multilocatário ou uma vinculação estreita entre a coleta de logs e o ciclo de vida da aplicação. Se você ainda não implantou uma aplicação ou deseja testar o processo, use o Apêndice: Exemplos de YAML para verificar rapidamente o fluxo de trabalho.

1. Modifique a configuração YAML do pod

  1. Defina volumes compartilhados

    Em spec.template.spec.volumes, adicione três volumes compartilhados no mesmo nível de containers:

    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
    
  2. Configure as montagens do contêiner da aplicação

    Na seção volumeMounts do contêiner da sua aplicação, como your-business-app-container, adicione as seguintes montagens de volume:

    Certifique-se de que o contêiner da aplicação grave 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
    
  3. Injete o contêiner sidecar do LoongCollector

    No array spec.template.spec.containers, anexe 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. Adapte 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. Defina o período de carência de encerramento

Em spec.template.spec, defina um período de carência de encerramento 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 period

4. Variáveis

Parâmetro

Descrição

${your_aliyun_user_id}

ID da sua conta do Alibaba Cloud. Configurar identificadores de usuário.

${your_machine_group_user_defined_id}

Identificador personalizado usado para criar um grupo de máquinas. Exemplo: nginx-log-sidecar.

Importante

Certifique-se de que este identificador seja exclusivo na região do Project.

${your_region_config}

Configuração correspondente à região e ao tipo de acesso à rede do seu Project do SLS. Regiões de service.

Exemplo: Se o seu Project estiver na região China (Hangzhou), use cn-hangzhou para acesso pela rede interna do Alibaba Cloud ou cn-hangzhou-internet para acesso pela rede pública.

${shared_volume_name}

Nome personalizado para o volume compartilhado.

Importante

O name em volumeMounts deve corresponder ao name em volumes. Isso garante que ambos os contêineres montem o mesmo volume compartilhado.

${dir_containing_your_files}

Caminho de montagem no contêiner do LoongCollector onde os logs de texto estão localizados.

5. Aplique a configuração e verifique

  1. Execute o seguinte comando para implantar as alterações:

    kubectl apply -f <YOUR-YAML>
  2. Verifique o status do pod para confirmar se o contêiner do LoongCollector foi injetado com êxito:

    kubectl describe pod <YOUR-POD-NAME>

    Se você vir dois contêineres (o contêiner da aplicação e loongcollector) e o status deles for Running, a injeção foi bem-sucedida.

6. Crie um grupo de máquinas baseado em identificador personalizado

  1. Faça logon no console do Simple Log Service e clique em no projeto desejado.

  2. Na barra de navegação à esquerda, selecione image Resources > Machine Groups e clique em machine group > Create Machine Group à direita de Machine Groups.

  3. Na caixa de diálogo Create Machine Group, configure os seguintes parâmetros e clique em OK.

    • Name: Nome do grupo de máquinas. Não é possível alterar esse nome após a criação. O nome deve atender aos seguintes requisitos:

      • Pode conter apenas letras minúsculas, dígitos, hifens (-) e sublinhados (_).

      • Deve começar e terminar com uma letra minúscula ou um dígito.

      • Deve ter entre 2 e 128 caracteres.

    • Machine Group Identifier: Selecione Custom Identifier.

    • Custom Identifier: Insira o valor da variável de ambiente ALIYUN_LOGTAIL_USER_DEFINED_ID definida para o contêiner do LoongCollector no arquivo YAML em 1. Modificar a configuração YAML do pod de service. Deve ser uma correspondência exata. Caso contrário, a associação falhará.

  4. Para verificar o heartbeat de um grupo de máquinas, clique em no nome do grupo de máquinas recém-criado e localize a área de status do grupo de máquinas.

    • OK: Indica que o LoongCollector se conectou com êxito ao Simple Log Service e o grupo de máquinas está registrado.

    • FAIL:

Cada Pod tem uma instância dedicada do LoongCollector. Recomendamos usar identificadores personalizados diferentes para aplicações ou ambientes distintos para garantir um gerenciamento granular.

FAQ

Como modifico a configuração do LoongCollector de um cluster gerenciado ACK para coletar logs entre contas ou regiões?

Se você instalou o loongcollector pelo console do ACK do Alibaba Cloud, ele coleta logs de contêineres por padrão em um Project do Simple Log Service na mesma conta do Alibaba Cloud. Para coletar logs entre contas ou regiões, use um dos seguintes métodos:

Método 1: Desinstalar e reinstalar

  1. Faça logon no console do ACK. No painel de navegação à esquerda, clique em Clusters.

  2. Na página Clusters, clique em no nome do seu cluster. No painel de navegação à esquerda, clique em Components and Add-ons .

  3. Na aba Logs and Monitoring, localize loongcollector e clique em Uninstall.

  4. Reinstale o componente conforme descrito em Instalação em um cluster autogerenciado (modo DaemonSet).

Método 2: Atualizar a configuração do Helm e reimplantar o loongcollector

  1. Faça logon no console do ACK. No painel de navegação à esquerda, escolha Apply > Helm.

  2. Na página de gerenciamento de aplicações Helm, localize loongcollector e, na coluna Actions, clique em Update. Na página Update Release, modifique as configurações conforme descrito na tabela a seguir, mantenha as outras configurações inalteradas e clique em OK.

    Cluster e Project

    Parâmetros

    Mesma conta, região diferente

    region: O Region ID da região onde o Project de destino está localizado.

    net: Defina o valor como Internet. Não é possível transferir dados entre regiões diferentes pela rede interna.

    Conta diferente, mesma região

    aliUid: ID da conta do Alibaba Cloud proprietária do Project de destino. Separe vários IDs de conta com vírgula.

    net: Defina o valor como Intranet. Recomendamos usar a rede interna para transferência de dados dentro da mesma região.

    Conta diferente, região diferente

    aliUid: ID da conta do Alibaba Cloud proprietária do Project de destino. Separe vários IDs de conta com vírgula.

    region: O Region ID da região onde o Project de destino está localizado.

    net: Defina o valor como Internet. Não é possível transferir dados entre regiões diferentes pela rede interna.

  3. Crie um grupo de máquinas:

    1. Faça logon no console do Simple Log Service e clique em no Project desejado.

    2. No painel de navegação à esquerda, escolha image Resources > > Machine Groups. À direita de Machine Groups, clique em machine group > > Create Machine Group.

    3. Na caixa de diálogo Create Machine Group, configure os seguintes parâmetros e clique em OK.

      1. Insira um nome para o grupo de máquinas.

      2. Para Machine Group Identifier, selecione Custom Identifier.

      3. Para Custom Identifier, insira k8s-group-${cluster_id}. Substitua ${cluster_id} pelo valor clusterID do seu cluster.

    4. Após criar o grupo de máquinas, localize-o na lista e clique em no seu nome. Na seção Machine Group Configurations > > Machine Group Status, verifique o status do Heartbeat. O status OK indica uma conexão bem-sucedida. Se o heartbeat falhar, verifique se o identificador de usuário e o identificador personalizado estão corretos.

  4. Após modificar a configuração, clique em Update.

Como coleto logs de contêineres de clusters ACK Edge, ACK One, ACS e ACK Serverless?

Como modifico o parâmetro projectName do componente LoongCollector?

  1. Faça logon no console do ACK. No painel de navegação à esquerda, escolha Applications > Helm.

  2. Na página de gerenciamento de aplicações Helm, localize loongcollector e clique em Update na coluna Actions para acessar a página de atualização de release.

  3. Na seção de configuração de parâmetros (Values) do Helm Chart desejado, modifique o parâmetro projectName (campo de nível raiz) e clique em OK.

Nota

Ao configurar variáveis de ambiente, se ALICLOUD_LOG_PROJECT não for especificado explicitamente, o sistema usa o parâmetro Project passado no comando de instalação como valor padrão e cria automaticamente as configurações relacionadas ao LoongCollector e o grupo de máquinas padrão do cluster nesse Project.

Próximas etapas

Após instalar o LoongCollector, consulte Diretrizes para coleta de logs de contêineres de um cluster Kubernetes para entender os princípios fundamentais, processos e melhores práticas para coleta de logs de contêineres. Em seguida, crie uma configuração de coleta usando um dos seguintes métodos:

Apêndice: Exemplos de YAML

Este exemplo mostra uma configuração completa de Deployment do Kubernetes que contém um contêiner de aplicação (Nginx) e um contêiner sidecar do LoongCollector. Use-a para coletar logs de contêineres no modo Sidecar.

Antes de usar a configuração, faça as seguintes substituições:

  1. Substitua ${your_aliyun_user_id} pelo UID da sua conta do Alibaba Cloud.

  2. Substitua ${your_machine_group_user_defined_id} pelo ID personalizado do grupo de máquinas criado na Etapa 3. O ID deve ser uma correspondência exata.

  3. Substitua ${your_region_config} pelo nome da configuração que corresponde à região e ao tipo de rede do seu Project do Log Service (SLS).

    Exemplo: Se o seu Project estiver na região China (Hangzhou), use cn-hangzhou para acesso pela rede interna ou cn-hangzhou-internet para 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

Referências

Regiões

  1. Faça logon no console do Simple Log Service. Na lista de projetos, clique em no projeto de destino.

  2. Clique em no ícone image ao lado do nome do projeto para acessar a página de visão geral do projeto.

  3. Na seção Basic Information, visualize o nome da região do projeto atual. A tabela a seguir mapeia os nomes das regiões para seus respectivos Region IDs.

    Uma região é a localização geográfica do data center físico de um service de cloud . Um Region ID é seu identificador exclusivo.

    Nome da região

    Region ID

    China (Qingdao)

    cn-qingdao

    China (Beijing)

    cn-beijing

    China (Zhangjiakou)

    cn-zhangjiakou

    China (Hohhot)

    cn-huhehaote

    China (Ulanqab)

    cn-wulanchabu

    China (Hangzhou)

    cn-hangzhou

    China (Shanghai)

    cn-shanghai

    China (Nanjing - Local Region - Decommissioning)

    cn-nanjing

    China (Fuzhou - Local Region - Decommissioning)

    cn-fuzhou

    China (Shenzhen)

    cn-shenzhen

    China (Heyuan)

    cn-heyuan

    China (Guangzhou)

    cn-guangzhou

    Philippines (Manila)

    ap-southeast-6

    South Korea (Seoul)

    ap-northeast-2

    Malaysia (Kuala Lumpur)

    ap-southeast-3

    Japan (Tokyo)

    ap-northeast-1

    Thailand (Bangkok)

    ap-southeast-7

    China (Chengdu)

    cn-chengdu

    Singapore

    ap-southeast-1

    Indonesia (Jakarta)

    ap-southeast-5

    China (Hong Kong)

    cn-hongkong

    Germany (Frankfurt)

    eu-central-1

    US (Virginia)

    us-east-1

    US (Silicon Valley)

    us-west-1

    UK (London)

    eu-west-1

    UAE (Dubai)

    me-east-1

    SAU (Riyadh)

    me-central-1

Tipos de transmissão de rede do Loongcollector

Um endpoint é o nome de domínio de acesso do SLS. É a URL usada para acessar um Project e seus dados de log. O endpoint é específico da região onde o Project está localizado. O SLS fornece endpoints privados, endpoints públicos e endpoints de aceleração de transferência. Visualize os endpoints da seguinte forma:

  1. Faça logon no console do SLS. Na lista de projetos, clique em no projeto desejado.

  2. Clique em no ícone image à direita do nome do projeto para acessar a página de visão geral do projeto.

  3. Na seção Access Endpoints, visualize as informações de endpoint do projeto atual. Diferentes métodos de transferência de rede correspondem a diferentes endpoints. Escolher o método de transferência de rede adequado ajuda a garantir uma transmissão de dados de log mais rápida e estável.

Tipo de rede

Tipo de endpoint correspondente

Descrição

Cenários

Rede interna do Alibaba Cloud

Endpoint privado

A rede interna do Alibaba Cloud é uma rede compartilhada gigabit. Transferir dados de log pela rede interna é mais rápido e estável do que pela internet pública. A rede interna inclui VPC e a rede clássica.

A instância ECS e o Project do SLS estão na mesma região, ou você conectou seu servidor local à rede interna.

Nota

Crie um Project do SLS na mesma região da sua instância ECS. Isso permite coletar logs da instância ECS pela rede interna do Alibaba Cloud sem consumir largura de banda pública.

Internet pública

Endpoint público

Ao transferir dados de log pela internet pública, a velocidade e a estabilidade da coleta de dados podem ser afetadas por limites de largura de banda, oscilações de rede, latência e perda de pacotes.

Transfira dados pela internet pública nos dois casos a seguir.

  • A instância ECS e o Project do SLS estão em regiões diferentes.

  • O servidor está hospedado por outro provedor de cloud ou no seu data center local.

Aceleração de transferência

Endpoint de aceleração de transferência

Usar nós de borda do Alibaba Cloud CDN para acelerar a coleta de logs oferece vantagens significativas em latência de rede e estabilidade em comparação à coleta pela internet pública, mas o tráfego incorre em cobranças adicionais.

Se o servidor da sua aplicação e o Project do SLS estiverem em regiões chinesas e internacionais, respectivamente, transferir dados pela internet pública pode causar alta latência e instabilidade. Use a aceleração de transferência para transferir dados nesse caso. Para obter mais informações, consulte Aceleração de transferência.

Modos de execução do Loongcollector

Atributo

Modo DaemonSet

Modo Sidecar

Método de implantação

Implanta um contêiner de coleta em cada nó.

Implanta um contêiner de coleta em cada pod.

Consumo de recursos

Baixo (recursos compartilhados do nó)

Mais alto (cada pod consome recursos independentemente)

Casos de uso

Coleta de logs unificada no nível do nó

Coleta de logs isolada para aplicações específicas

Isolamento

Compartilhamento no nível do nó

Independência no nível do pod

Como funciona o modo DaemonSet

Implanta um agente do LoongCollector em cada nó para coletar logs de todos os contêineres nesse nó. Oferece operações simples, baixo consumo de recursos e configuração flexível, mas com isolamento de locatário mais fraco.

  • No modo DaemonSet, o Kubernetes executa exatamente um contêiner do LoongCollector em cada nó para coletar logs de todos os contêineres nesse nó.

  • O Kubernetes cria e destrói automaticamente contêineres do LoongCollector conforme os nós entram ou saem do cluster, eliminando o gerenciamento manual de instâncias.

image

Como funciona o modo Sidecar

Injeta um sidecar do LoongCollector junto ao contêiner da aplicação em cada pod. O diretório de logs da aplicação é compartilhado por meio de um volume do Kubernetes (emptyDir, hostPath ou PVC), permitindo que o LoongCollector leia arquivos de log diretamente. Fornece forte isolamento de locatário e alto desempenho, mas consome mais recursos.

  • No modo sidecar, cada pod executa um contêiner dedicado do LoongCollector. A coleta de logs é isolada entre pods.

  • Um volume compartilhado deve ser montado tanto no contêiner da aplicação quanto no do LoongCollector para acesso aos arquivos de log.

  • Quando o volume de logs de um pod excede a capacidade do DaemonSet, o modo sidecar permite alocar recursos dedicados ao LoongCollector.

  • Ambientes serverless não possuem nós, tornando o DaemonSet inaplicável. O modo Sidecar integra-se diretamente às arquiteturas serverless.

image