Todos os produtos
Search
Central de documentação

Simple Log Service:Instalar o LoongCollector no Kubernetes

Última atualização: Jul 03, 2026

O LoongCollector é o agente de coleta de logs de última geração do SLS e sucessor do Logtail. Instale-o em um cluster Kubernetes usando o 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 SLS.

  1. Obtenha o endpoint:

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

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

    3. Na seção de endpoints, localize os endpoints públicos e privados da região do projeto.

  2. Execute um teste de conectividade: Faça login em um nó do cluster e execute o comando curl a seguir. Substitua ${PROJECT_NAME} e ${SLS_ENDPOINT} pelos valores reais.

    curl https://${PROJECT_NAME}.${SLS_ENDPOINT}
  3. Verifique os resultados:

    • Se o comando retornar {"Error":{"Code":"OLSInvalidMethod",...}}, a conexão de rede entre o nó e o Simple Log Service estará estabelecida.

      Nota

      Esse erro é esperado: o teste verifica apenas a conectividade de rede. O SLS retorna um erro porque a solicitação não possui os parâmetros de API obrigatórios.

    • Se o comando atingir o tempo limite ou retornar erros como Connection refused, verifique a configuração de rede do nó, as regras do grupo de segurança e a resolução de DNS.

Escolher um método de instalação

Selecione um método com base no tipo do cluster.

Método de instalação

Casos de uso

Instalar em um cluster ACK (modo DaemonSet)

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

Instalar em um cluster autogerenciado (modo DaemonSet)

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

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

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

Instalar no modo Sidecar

Coleta de logs de aplicações específicas com os seguintes requisitos:

  • Isolamento de recursos: evita que o agente DaemonSet afete outros pods no nó.

  • Coleta granular: permite configurar uma fonte de coleta, regras de filtro e destino de saída separados para cada aplicação.

Instalar em um cluster ACK (modo DaemonSet)

Nota

Se estiver atualizando do logtail-ds, desinstale-o antes de instalar o LoongCollector.

Instale o LoongCollector com um clique em console do ACK. Por padrão, ele coleta logs de contêineres em um projeto na mesma conta e região. Para coleta entre contas ou entre regiões, consulte Instalar em um cluster autogerenciado (modo DaemonSet).

Cluster ACK existente

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

  2. Na página Clusters, clique em nome do 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 SLS cria automaticamente os seguintes recursos na região do cluster. Você pode visualizá-los no console do Simple Log Service.

    Tipo

    Parâmetro

    Descrição

    Projeto

    k8s-log-${cluster_id}

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

    Grupo de máquinas

    k8s-group-${cluster_id}

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

    k8s-group-${cluster_id}-cluster

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

    k8s-group-${cluster_id}-singleton

    Grupo de máquinas para coleta de instância única.

    Importante

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

Novo cluster ACK

  1. Faça login 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 e selecione Create New Project ou Use Existing Project.

    Este tópico aborda apenas as configurações relacionadas ao SLS. Outras configurações do cluster estão documentadas em Criar um cluster ACK gerenciado .
  3. Se você selecionar Create Project, o SLS criará automaticamente os seguintes recursos. Visualize-os no console do Simple Log Service.

    Tipo

    Parâmetro

    Descrição

    Projeto

    k8s-log-${cluster_id}

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

    Grupo de máquinas

    k8s-group-${cluster_id}

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

    k8s-group-${cluster_id}-cluster

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

    k8s-group-${cluster_id}-singleton

    Grupo de máquinas para coleta de instância única.

    Importante

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

Instalar em um cluster autogerenciado (modo DaemonSet)

Casos de uso

  • Clusters Kubernetes em data centers autogerenciados

  • Clusters Kubernetes implantados em outros provedores de nuvem

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

Nota

Certifique-se de que o 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 configurado, execute o comando correspondente à região do cluster.

    # Regions in Chinese mainland
    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 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. Edite values.yaml: no diretório loongcollector-custom-k8s-package, edite ./loongcollector/values.yaml.

    Descrição

    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 type to use. Options: Internet or Intranet. 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: ""
    
    # ... Other optional parameters are omitted ...

    projectName String (Obrigatório)

    Nome do projeto para o qual o LoongCollector envia logs. As convenções de nomenclatura são:

    • O nome do projeto pode 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 dígito.

    • O nome deve ter entre 3 e 63 caracteres.

    region String (Obrigatório)

    ID da região onde o projeto está localizado. Para obter uma lista de IDs de região, consulte Regiões.

    aliUid String (Obrigatório)

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

    net String (Obrigatório)

    Tipo de rede usado para transmissão de dados de log.

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

    • Intranet: rede interna.

    accessKeyID String (Obrigatório)

    AccessKey ID da conta proprietária do projeto. Para maior segurança, use o AccessKey de um usuário RAM com a política AliyunLogFullAccess. Visão geral do usuário RAM.

    accessKeySecret String (Obrigatório)

    AccessKey secret correspondente ao AccessKey ID especificado.

    clusterID String (Obrigatório)

    ID personalizado para o cluster. O ID pode 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.

    bash k8s-custom-install.sh install
  4. Verifique a instalação: execute o seguinte comando para verificar o status dos componentes:

    # 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 componente falhar ao iniciar (status diferente de Running):

    1. Verifique os parâmetros em values.yaml.

    2. Verifique a imagem: execute o seguinte comando e confira a seção Events para confirmar se a imagem foi baixada.

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

    Tipo de recurso

    Nome do recurso

    Finalidade

    Projeto

    O projectName especificado no arquivo values.yaml

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

    Grupo de máquinas

    k8s-group-${cluster_id}

    Grupo de nós 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 de instância única para coleta de instância única.

    Importante

    O LoongCollector não cria um Logstore chamado config-operation-log. Se esse Logstore já existir, o LoongCollector interromperá a gravação nele.

Instalar no modo sidecar

Use o modo sidecar para gerenciamento granular de logs, isolamento multilocatário ou coleta de logs acoplada ao ciclo de vida. Um contêiner dedicado do LoongCollector é injetado em cada pod da aplicação. Para testar o processo, utilize o Apêndice: Exemplo de YAML.

1. Modificar 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 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. Adaptar a lógica de 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 tolerância de encerramento

Em spec.template.spec, defina um período de tolerâ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 da 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 projeto.

${your_region_config}

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

Exemplo: se o projeto estiver na região China (Hangzhou), use cn-hangzhou para acesso à rede interna da Alibaba Cloud ou cn-hangzhou-internet para acesso à 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. Aplicar configuração e verificar

  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 sucesso:

    kubectl describe pod <YOUR-POD-NAME>

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

6. Criar um grupo de máquinas com identificador personalizado

  1. Faça login no console do Simple Log Service e clique em projeto de destino.

  2. No painel 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 pode ser modificado após a criação. As convenções de nomenclatura são:

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

      • Deve começar e terminar com uma letra minúscula ou 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 em 1. Modificar a configuração YAML do Pod de serviço. O valor deve ser uma correspondência exata, caso contrário, a associação falhará.

  4. Após a criação do grupo de máquinas, verifique o status de heartbeat clicando em nome do grupo e visualizando a área de status.

    • OK: o LoongCollector conectou-se com sucesso ao Simple Log Service e registrou o grupo de máquinas.

    • FAIL:

Cada pod executa sua própria instância do LoongCollector. Use um identificador personalizado exclusivo por aplicação ou ambiente para gerenciamento granular.

FAQ

Coleta entre contas ou entre regiões

Por padrão, o LoongCollector instalado a partir do console do ACK coleta logs de contêineres em um projeto SLS na mesma conta. Para coletar entre contas ou entre regiões, use um dos seguintes métodos:

Método 1: Desinstalar e reinstalar o loongcollector.

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

  2. Na página Clusters, clique em nome do 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 usando o procedimento Instalar em um cluster autogerenciado (modo DaemonSet).

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

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

  2. Na página Helm, localize loongcollector e clique em Update na coluna Actions. Na página Update Release, modifique os parâmetros conforme mostrado na tabela abaixo e clique em OK.

    Cluster e projeto

    Parâmetro

    Mesma conta, região diferente

    region: o RegionID da região onde o projeto está localizado.

    net: defina o valor como internet. Dados não podem ser transferidos entre regiões diferentes por uma intranet.

    Conta diferente, mesma região

    aliUid: o ID da conta da Alibaba Cloud proprietária do projeto Simple Log Service. Separe vários IDs de conta com vírgula (,).

    net: defina o valor como intranet. A transferência de dados dentro da mesma região é mais eficiente pela intranet.

    Conta diferente, região diferente

    aliUid: o ID da conta da Alibaba Cloud proprietária do projeto Simple Log Service. Separe vários IDs de conta com vírgula (,).

    region: o RegionID da região onde o projeto está localizado.

    net: defina o valor como internet. Dados não podem ser transferidos entre regiões diferentes por uma intranet.

  3. Criar um grupo de máquinas:

    1. Faça login no console do Simple Log Service e clique em projeto de destino.

    2. No painel de navegação à esquerda, escolha image Resources > > Machine Groups. Ao lado de Machine Groups, escolha 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. Identificador personalizado: k8s-group-${cluster_id}. Substitua ${cluster_id} pelo clusterID real do cluster.

    4. Após a criação do grupo de máquinas, localize-o na lista de grupos de máquinas e clique em nome dele. Na seção Machine Group Configurations > > Machine Group Status, verifique o status de Heartbeat. Um status Heartbeat OK indica que o grupo de máquinas está operando corretamente. Se o status não for OK, verifique se os identificadores de usuário e personalizados estão corretos.

  4. Após concluir as modificações, clique em Update .

Coleta de logs para outros clusters

Próximas etapas

Após instalar o LoongCollector, revise Coletar logs de contêineres de um cluster Kubernetes para conceitos principais e melhores práticas e, em seguida, crie uma configuração de coleta:

Apêndice: Exemplos de YAML

Configurações YAML completas para um Job do Kubernetes e um Deployment com um contêiner sidecar do LoongCollector.

Antes de começar, substitua os três espaços reservados a seguir:

  1. Substitua ${your_aliyun_user_id} pelo UID da sua conta da 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 projeto Log Service (SLS).

    Por exemplo, para um projeto na região China (Hangzhou), use cn-hangzhou para acesso à rede interna ou cn-hangzhou-internet para acesso à 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 login no console do Simple Log Service. Na lista de projetos, clique em projeto de destino.

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

  3. Na seção Basic Information, visualize o nome da região do projeto atual. Para o mapeamento entre nomes de região e Region IDs, consulte a tabela a seguir.

    Uma região é a localização física do data center dos seus recursos de nuvem . Um Region ID identifica exclusivamente cada região.

    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

    Filipinas (Manila)

    ap-southeast-6

    Coreia do Sul (Seoul)

    ap-northeast-2

    Malásia (Kuala Lumpur)

    ap-southeast-3

    Japão (Tokyo)

    ap-northeast-1

    Tailândia (Bangkok)

    ap-southeast-7

    China (Chengdu)

    cn-chengdu

    Singapura

    ap-southeast-1

    Indonésia (Jakarta)

    ap-southeast-5

    China (Hong Kong)

    cn-hongkong

    Alemanha (Frankfurt)

    eu-central-1

    EUA (Virginia)

    us-east-1

    EUA (Silicon Valley)

    us-west-1

    Reino Unido (London)

    eu-west-1

    Emirados Árabes Unidos (Dubai)

    me-east-1

    Arábia Saudita (Riyadh)

    me-central-1

Tipos de transferência de rede

Um endpoint é o nome de domínio de acesso para o SLS. É a URL usada para acessar um projeto e seus dados de log. O endpoint é específico da região onde o projeto 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 login no console do SLS. Na lista de projetos, clique em projeto de destino.

  2. Clique em image à direita do nome do projeto para ir à 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 da Alibaba Cloud

Endpoint privado

A rede interna da 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 projeto SLS estão na mesma região, ou você conectou seu servidor local à rede interna.

Nota

Crie um projeto SLS na mesma região da sua instância ECS. Isso permite coletar logs da instância ECS pela rede interna da 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 projeto SLS estão em regiões diferentes.

  • O servidor está hospedado por outro provedor de nuvem ou em 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 de aplicação e o projeto 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 neste caso. Para mais informações, consulte Aceleração de transferência.

Modos de execução

Recurso

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 (compartilha recursos do nó)

Maior (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

Modo DaemonSet

Implanta um agente 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 isolamento de locatário mais fraco.

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

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

image

Modo Sidecar

Injeta um sidecar LoongCollector ao lado do contêiner da aplicação em cada pod. O diretório de logs da aplicação é compartilhado via 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 LoongCollector dedicado. A coleta de logs é isolada entre pods.

  • Um volume compartilhado deve ser montado tanto nos contêineres da aplicação quanto nos 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