Todos os produtos
Search
Central de documentação

Simple Log Service:Coletar e analisar logs de texto do ECS com o LoongCollector

Última atualização: Jul 05, 2026

Este guia demonstra como coletar logs do NGINX de uma instância do Elastic Compute Service (ECS) usando o LoongCollector do Simple Log Service (SLS). Você aprenderá a configurar a coleta de logs, consultar dados com SQL, visualizar um painel, configurar alertas e limpar recursos para evitar cobranças.

image

Pré-requisitos

Ativar serviços e preparar uma conta

  • Ativar o SLS: Se esta for a primeira vez que você usa o SLS, faça login no console do Simple Log Service e ative o serviço conforme solicitado.

  • Preparar uma conta:

    • Faça login com uma conta Alibaba Cloud: Esta conta possui todas as permissões por padrão e pode ser usada diretamente.

    • Faça login com um usuário RAM: A conta Alibaba Cloud deve conceder as políticas de acesso necessárias ao usuário RAM:

      • AliyunLogFullAccess: Usada para criar e gerenciar recursos do SLS, como projetos e logstores.

      • AliyunECSFullAccess: Usada para instalar o agente de coleta em uma instância ECS.

      • AliyunOOSFullAccess: Usada para instalar automaticamente o agente de coleta em uma instância ECS por meio do Alibaba Cloud Operation Orchestration Service (OOS).

      Em um ambiente de produção, você pode criar políticas de permissão personalizadas para gerenciar permissões de usuários RAM de forma mais granular.

Preparar uma instância ECS

Certifique-se de que o grupo de segurança da instância ECS permita tráfego de saída na porta 80 (HTTP) e na porta 443 (HTTPS).

Gerar logs simulados

  1. Faça login na instância ECS.

  2. Crie um arquivo de script chamado generate_nginx_logs.sh e cole o conteúdo a seguir. Este script grava uma entrada de log de acesso padrão do NGINX no arquivo /var/log/nginx/access.log a cada 5 segundos.

    generate_nginx_logs.sh

    #!/bin/bash
    
    #==============================================================================
    # Script Name: generate_nginx_logs.sh
    # Script Description: Simulates an NGINX server and continuously writes logs to access.log.
    #==============================================================================
    
    # --- Configurable Parameters ---
    
    # Log file path
    LOG_FILE="/var/log/nginx/access.log"
    
    # --- Mock Data Pools ---
    
    # Random IP address pool
    IP_ADDRESSES=(
        "192.168.1.10" "10.0.0.5" "172.16.31.40" "203.0.113.15"
        "8.8.8.8" "1.1.X.X" "91.198.XXX.XXX" "114.114.114.114"
        "180.76.XX.XX" "223.5.5.5"
    )
    
    # HTTP request method pool
    HTTP_METHODS=("GET" "POST" "PUT" "DELETE" "HEAD")
    
    # Common request path pool
    REQUEST_PATHS=(
        "/index.html" "/api/v1/users" "/api/v1/products?id=123" "/images/logo.png"
        "/static/js/main.js" "/static/css/style.css" "/login" "/admin/dashboard"
        "/robots.txt" "/sitemap.xml" "/non_existent_page.html"
    )
    
    # HTTP status code pool (You can adjust the weights. For example, add more 200s to increase their probability.)
    HTTP_STATUSES=(200 200 200 200 201 301 404 404 500 502 403)
    
    # Common User-Agent pool
    USER_AGENTS=(
        "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
        "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"
        "Mozilla/5.0 (iPhone; CPU iPhone OS 14_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/14.1.1 Mobile/15E148 Safari/604.1"
        "Mozilla/5.0 (Linux; Android 11; SM-G991U) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36"
        "curl/7.68.0"
        "Googlebot/2.1 (+http://www.google.com/bot.html)"
    )
    
    # Common Referer pool
    REFERERS=(
        "https://www.google.com/"
        "https://www.bing.com/"
        "https://github.com/"
        "https://stackoverflow.com/"
        "-"
        "-"
        "-"
    )
    #  Check and create the log directory
    LOG_DIR=$(dirname "$LOG_FILE")
    if [ ! -d "$LOG_DIR" ]; then
        echo "Log directory '$LOG_DIR' does not exist. Attempting to create..."
        # Use sudo to create the directory because root permissions are usually required
        sudo mkdir -p "$LOG_DIR"
        if [ $? -ne 0 ]; then
            echo "Error: Failed to create directory '$LOG_DIR'. Check permissions or create it manually."
            exit 1
        fi
        echo "Directory created successfully."
    fi
    
    # Check write permissions for the log file
    trap 'echo -e "\n\nScript interrupted. Stopping log generation..."; exit 0;' SIGINT
    
    # --- Core Function ---
    
    # Define a function to randomly select an element from an array
    # Usage: random_element "array_name"
    function random_element() {
        local arr=("${!1}")
        echo "${arr[$((RANDOM % ${#arr[@]}))]}"
    }
    
    # Catch the Ctrl+C interrupt signal for a graceful exit
    trap 'echo -e "\n\nScript interrupted. Stopping log generation..."; exit 0;' SIGINT
    
    # --- Main Loop ---
    
    echo "Start generating mock NGINX logs to $LOG_FILE ..."
    echo "A log entry is generated every 5 seconds."
    echo "Press Ctrl+C to stop."
    sleep 2
    
    # Infinite loop to continuously generate logs
    while true; do
        # 1. Get the current time in the default NGINX format: [dd/Mon/YYYY:HH:MM:SS +ZZZZ]
        timestamp=$(date +'%d/%b/%Y:%H:%M:%S %z')
    
        # 2. Randomly select data from the pools
        ip=$(random_element IP_ADDRESSES[@])
        method=$(random_element HTTP_METHODS[@])
        path=$(random_element REQUEST_PATHS[@])
        status=$(random_element HTTP_STATUSES[@])
        user_agent=$(random_element USER_AGENTS[@])
        referer=$(random_element REFERERS[@])
    
        # 3. Generate a random response body size (in bytes)
        bytes_sent=$((RANDOM % 5000 + 100)) # A random number between 100 and 5100
    
        # 4. Concatenate into a complete NGINX combined format log entry
        # Format: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"
        log_line="$ip - - [$timestamp] \"$method $path HTTP/1.1\" $status $bytes_sent \"$referer\" \"$user_agent\""
    
        # 5. Append the log line to the file
        # echo "$log_line" >> "$LOG_FILE"
        echo "$log_line" | sudo tee -a "$LOG_FILE" > /dev/null
        
        # 6. Wait for 5 seconds before the next loop
        sleep 5
    done
  3. Conceda permissões de execução: chmod +x generate_nginx_logs.sh.

  4. Execute o script em segundo plano: nohup ./generate_nginx_logs.sh &.

Criar um projeto e um logstore

O projeto é a unidade de gerenciamento de recursos no SLS e serve para isolar dados de diferentes iniciativas. O logstore é a unidade de armazenamento para dados de log.

  1. Faça login no console do Simple Log Service.

  2. Clique em Create Project:

    • Region: Selecione a mesma região da sua instância ECS. Isso permite coletar logs pela rede interna da Alibaba Cloud, acelerando a coleta.

    • Project Name: Insira um nome globalmente exclusivo na Alibaba Cloud, como nginx-quickstart-abc.

  3. Mantenha as configurações padrão para as outras configurações e clique em Create.

  4. Na página que confirma a criação do projeto, clique em Create Logstore.

  5. Insira um Logstore Name, como nginx-access-log. Não altere as outras configurações e clique em OK.

    Por padrão, o sistema cria um logstore médio , cujo faturamento é baseado no volume de dados gravados .

Instalar o LoongCollector

  1. Na caixa de diálogo exibida após a criação do logstore, clique em OK para abrir o painel Quick Data Import.

  2. No cartão Nginx - Text Logs, clique em Integrate Now.

  3. Machine Group Configurations:

    • Scenario: Servers

    • Installation Environment: ECS

  4. Clique em Create Machine Group. No painel exibido, selecione a instância ECS de destino.

  5. Clique em Install and Create Machine Group. Após a instalação bem-sucedida, configure o Name do grupo de máquinas, como my-nginx-server, e clique em OK.

    Nota

    Se a instalação falhar ou permanecer pendente, verifique se a região do ECS é a mesma do projeto.

  6. Clique em Next para verificar o status de heartbeat do grupo de máquinas.

    Ao criar um grupo de máquinas pela primeira vez, se o status do heartbeat for FAIL, clique em Automatic Retry . O status mudará para OK após cerca de dois minutos.

Criar uma configuração de coleta

  1. Quando o status do heartbeat for OK, clique em Next para acessar a página Logtail Configuration:

    • Configuration Name: Insira um nome para a configuração, como nginx-access-log-config.

    • File Path: Caminho para coleta de logs. Na primeira caixa de entrada, insira o caminho do diretório, como /var/log/nginx. Na segunda, insira o nome do arquivo, como access.log.

    • Processor Configurations:

      • Log Sample: Clique em Add Log Sample e cole uma entrada de log de exemplo:

        192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"
      • Processing Method: Selecione Data Parsing (NGINX Mode). No campo NGINX Log Configuration, configure o log_format. Copie e cole o conteúdo a seguir e clique em OK.

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        Em ambientes de produção, o log_format definido aqui deve corresponder à definição no seu arquivo de configuração do NGINX, geralmente localizado em /etc/nginx/nginx.conf.

        Exemplo de análise de log:

        Log bruto

        Log analisado estruturado

        192.168.*.* - - [15/Apr/2025:16:40:00 +0800] "GET /nginx-logo.png HTTP/1.1" 0.000 514 200 368 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.*.* Safari/537.36"

        body_bytes_sent: 368
            http_referer: -
            http_user_agent : Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.x.x Safari/537.36
            remote_addr:192.168.*.*
            remote_user: -
            request_length: 514
            request_method: GET
            request_time: 0.000
            request_uri: /nginx-logo.png
            status: 200
            time_local: 15/Apr/2025:16:40:00
  2. Clique em Next para acessar a página Query and Analysis Configurations. A aplicação da configuração de coleta leva cerca de um minuto. Clique em Automatic Refresh. Se dados de pré-visualização aparecerem, a configuração foi aplicada.

Consultar e analisar logs

Clique em Next para ir à página final e, em seguida, clique em Query Logs. O sistema redirecionará você para a página de consulta e análise do logstore de destino. Escreva instruções analíticas SQL para extrair métricas essenciais de negócios e O&M dos logs analisados. Defina o intervalo de tempo como Last 15 Minutes:

Nota

Se uma janela pop-up de erro aparecer, significa que o índice ainda não está configurado. Feche a janela e aguarde um minuto. Depois disso, visualize o conteúdo do log do arquivo access.log.

  • Exemplo 1: Visualizações de página do site (PVs)

    Conte o número total de entradas de log dentro do intervalo de tempo especificado.

    * | SELECT count(*) AS pv
  • Exemplo 2: Estatísticas de solicitações e taxa de erro por minuto

    Calcule o número total de solicitações, o número de solicitações com erro (código de status HTTP ≥ 400) e a taxa de erro por minuto.

    * | SELECT 
      date_trunc('minute', __time__) as time,
      count(1) as total_requests,
      count_if(status >= 400) as error_requests,
      round(count_if(status >= 400) * 100.0 / count(1), 2) as error_rate
    GROUP BY time 
    ORDER BY time DESC 
    LIMIT 100
    
  • Exemplo 3: Estatísticas de PVs por método de solicitação (GET, POST, etc.)

    Agrupe e conte visualizações de página por minuto e método de solicitação (GET, POST, etc.).

    * |
    SELECT
        date_format(minute, '%m-%d %H:%i') AS time,
        request_method,
        pv
    FROM (
        SELECT
            date_trunc('minute', __time__) AS minute,
            request_method,
            count(*) AS pv
        FROM
            log
        GROUP BY
            minute,
            request_method
    )
    ORDER BY
        minute ASC
    LIMIT 10000

Visualizar dados em um painel

Após configurar o plug-in de análise do NGINX, o SLS cria automaticamente um painel predefinido chamado nginx-access-log_NGINX Access Log.

  1. No painel de navegação à esquerda, clique em image e escolha Dashboard > Dashboards.

  2. Localize e clique no nome do painel para visualizar gráficos de métricas principais, como visualizações de página (PVs), visitantes únicos (UVs), taxa de erro e distribuição de métodos de solicitação.

  3. É possível personalizar e modificar todos os gráficos conforme necessário.

Configurar monitoramento e alertas

Configure uma regra de alerta para enviar notificações automaticamente quando houver anomalias no serviço, como um aumento repentino no número de erros.

  1. No painel de navegação à esquerda, clique em image Alerts.

  2. Crie uma política de ação:

    • Na aba Notification Management > Action Policy, clique em Create.

    • Configure o ID e o Name, por exemplo, send-notification-to-admin.

    • Na Primary Action Policy, clique em image Action Group.

    • Selecione um Notification Method, como SMS Message, configure o Recipient e selecione um Alert Template.

    • Clique em Confirm.

  3. Crie uma regra de alerta:

    1. Mude para a aba Alert Rules e clique em Create Alert.

    2. Insira um nome para a regra, como Too many server 5xx errors.

    3. No campo Query Statistics, clique em Create para definir as condições de consulta.

      • Logstore: Selecione o nginx-access-log criado anteriormente.

      • Time Range: 15 minutes (Relative).

      • Query: Insira status >= 500 | SELECT * .

      • Clique em Preview para confirmar a consulta dos dados e, em seguida, clique em OK.

    4. Trigger Condition: Configure a regra para acionar um alerta crítico quando o resultado da consulta contiver mais de 100 entradas.

      Esta configuração aciona um alerta se ocorrerem mais de 100 erros 5xx em 15 minutos.
    5. Destination: Selecione Simple Log Service Notification e ative-o.

      • Action Policy: Selecione a política de ação criada na etapa anterior.

      • Repeat Interval: Defina como 15 minutos para evitar notificações repetidas excessivas.

    6. Clique em OK para salvar a regra de alerta.

  4. Verificação: Quando a condição de alerta for atendida, o canal de notificação configurado receberá um alerta. Visualize todos os registros de alerta acionados na página Alert History.

Limpar recursos

Para evitar cobranças desnecessárias, limpe todos os recursos criados após concluir as tarefas.

  1. Parar o script de geração de logs

    Faça login na instância ECS e execute o comando a seguir para parar o script de geração de logs em execução em segundo plano.

    kill $(ps aux | grep '[g]enerate_nginx_logs.sh' | awk '{print $2}')
  2. Desinstalar o LoongCollector (Opcional)

    1. No código de exemplo, substitua ${region_id} por cn-hangzhou. Para acelerar a execução, substitua ${region_id} pela região da sua instância ECS.

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. Execute o comando de desinstalação.

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. Excluir o projeto.

    1. No console do Simple Log Service, acesse a página Project List e localize o projeto criado, como nginx-quickstart-xxx.

    2. Na coluna Actions, clique em Delete.

    3. No painel de exclusão, insira o nome do projeto e selecione um motivo para a exclusão.

    4. Clique em OK. A exclusão de um projeto também remove todos os seus recursos associados, incluindo logstores, configurações de coleta, painéis e regras de alerta.

    Aviso

    Após a exclusão de um projeto, todos os seus dados de log e informações de configuração são liberados e não podem ser recuperados. Confirme a ação antes de excluir um projeto para evitar perda de dados.

Próximos passos

Você concluiu o processo de coleta de logs, consulta e análise, visualização em painel e configuração de alertas. Recomendamos a leitura dos documentos a seguir para compreender melhor os conceitos principais e planejar seu sistema de recursos de log com base nas necessidades do seu negócio:

FAQ

O que devo fazer se o horário exibido for diferente do horário original do log após a coleta?

Por padrão, o campo de tempo (__time__) no SLS utiliza o momento em que o log chega ao servidor. Para usar o horário do log original, adicione um plug-in de análise de tempo à configuração de coleta.

Serei cobrado apenas por criar um projeto e um logstore?

Ao criar um logstore, o SLS reserva recursos de shard por padrão. Isso pode gerar taxas de concessão de shards ativos. Para mais informações, consulte Por que sou cobrado por concessões de shards ativos?

Como soluciono falhas na coleta de logs?

A coleta de logs com o Logtail pode falhar devido a motivos como heartbeats anormais do Logtail, erros de coleta ou configurações incorretas de coleta do Logtail. Para informações sobre solução de problemas, consulte Solucionar falhas na coleta de logs do Logtail.

Por que consigo consultar logs, mas não analisá-los?

Para analisar logs, configure um índice de campo para os campos relevantes e ative o recurso de estatísticas. Verifique a configuração de índice do seu logstore.

Como paro o faturamento do SLS?

O SLS não pode ser desativado após a ativação. Se você não for mais usar o SLS, pare o faturamento excluindo todos os projetos da sua conta.