Todos os produtos
Search
Central de documentação

Simple Log Service:Colete e analise logs de texto do ECS com o LoongCollector

Última atualização: Aug 26, 2026

Use o LoongCollector para coletar logs do Nginx de uma instância ECS no Simple Log Service (SLS). Em até 30 minutos, configure a coleta de logs, analise dados com SQL, visualize um painel, defina alertas e limpe os recursos para evitar cobranças.

image

Pré-requisitos

Ative o SLS e prepare uma conta

  • Ative o SLS: se for sua primeira vez, faça login no console do Simple Log Service e siga as instruções na tela para ativar o service.

  • Prepare uma conta:

    • Conta Alibaba Cloud: possui permissões totais por padrão.

    • Usuário RAM: ao utilizar um usuário RAM, conceda as políticas de permissão obrigatórias:

      • AliyunLogFullAccess: concede permissões para criar e gerenciar recursos do SLS, como projetos e logstores.

      • AliyunECSFullAccess: concede permissões para instalar o agente de coleta em uma instância ECS.

      • AliyunOOSFullAccess: concede permissões para instalar automaticamente o agente de coleta em uma instância ECS por meio do Operation Orchestration Service (OOS).

      Em ambientes de produção, crie políticas de permissão personalizadas para obter um controle mais granular sobre as permissões do usuário RAM.

Prepare uma instância ECS

Verifique se o grupo de segurança da instância ECS permite tráfego de saída nas portas 80 (HTTP) e 443 (HTTPS).

Gere 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 &.

Crie um projeto e um logstore

Um projeto isola e gerencia dados no SLS. O logstore armazena os dados de log dentro de um projeto.

  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 para coletar logs pela rede interna.

    • Project Name: insira um nome globalmente exclusivo, como nginx-quickstart-abc.

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

  4. Após a criação do projeto, clique em Create Logstore.

  5. Insira um Logstore Name (por exemplo, nginx-access-log), mantenha as configurações padrão para as outras configurações e clique em OK.

    Por padrão, um logstore Standard é criado e faturado com base no volume de dados gravados.

Instale o LoongCollector

  1. Depois de criar o logstore, clique em OK na caixa de diálogo de confirmação 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, insira um Name para o machine group, como my-nginx-server, e clique em OK.

    Nota

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

  6. Clique em Next para prosseguir com a verificação do status de heartbeat.

    Ao criar um machine group pela primeira vez, caso o status do heartbeat seja FAIL, clique em Automatic Retry . O status mudará para OK em aproximadamente dois minutos.

Crie uma configuração de coleta

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

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

    • File Path: insira /var/log/nginx no primeiro campo e access.log no segundo.

    • Processor Configurations:

      • Log Sample: clique em Add Sample Log 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: clique em Data Parsing (NGINX Mode). Na seção NGINX Log Configuration, configure o log_format copiando e colando o conteúdo abaixo. Em seguida, clique em Confirm.

        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 especificado 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 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 ir à página Query and Analysis Configurations. A configuração de coleta leva cerca de 1 minuto para entrar em vigor. Clique em Automatic Refresh. A visualização dos dados indica que a configuração está ativa.

Consulte e analise logs

Clique em End para acessar a página End e, em seguida, clique em Query Log. Você será redirecionado para a página de consulta e análise do logstore de destino. Utilize SQL para extrair métricas principais dos logs estruturados. Defina o intervalo de tempo como Last 15 Minutes:

Nota

Caso surja um pop-up de erro, significa que o índice ainda não foi configurado. Feche-o e aguarde cerca de 1 minuto até conseguir visualizar o conteúdo do log no arquivo access.log.

  • Exemplo 1: Total de visualizações de página (PV)

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

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

    Calcule o total de requisições, requisiçõ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: PVs por método de requisição (GET, POST, etc.)

    Agrupe e conte as visualizações de página por minuto e método de requisiçã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

Visualize dados em um painel

Ao configurar o processador 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, escolha imageDashboard > Dashboards.

  2. Clique no nome do painel para visualizar gráficos das métricas principais: PVs, UVs, taxa de erro e distribuição de métodos de requisição.

  3. Personalize os gráficos conforme as necessidades do seu negócio.

image

Configure monitoramento e alertas

Crie uma regra de alerta para receber notificações quando ocorrerem comportamentos anormais, como um pico de erros.

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

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

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

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

    • Em Primary Action Policy, clique em imageAction Group.

    • Selecione um Notification Method (por exemplo, SMS), configure o Recipient e escolha um Alert Template.

    • Clique em Confirm.

  3. Crie uma regra de alerta:

    1. Mude para a aba Alert Monitoring Rule e clique em Create Alert.

    2. Nome da regra: insira um nome descritivo, como Too many server 5xx errors.

    3. Query Statistics: clique em Add e configure as condições de consulta.

      • Logstore: selecione nginx-access-log.

      • Query Time Range: 15 minutes (Relative).

      • Search: insira status >= 500 | SELECT * .

      • Clique em Preview para confirmar que é possível consultar dados e, depois, clique em OK.

    4. Trigger Condition: defina a condição para acionar um alerta Critical quando o Specific number of entries for >100.

      Esta configuração dispara um alerta se ocorrerem mais de 100 erros 5xx em 15 minutos.
    5. Destination: selecione SLS Notification e Enable a opçã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.

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

  4. Verificação: quando a condição de gatilho for atendida, o canal de notificação configurado receberá um alerta. É possível visualizar todos os alertas disparados na página Alert History.

Limpeza de recursos

Limpe todos os recursos criados neste tutorial para evitar cobranças contínuas.

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

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

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

    1. Substitua ${region_id} por cn-hangzhou ou, para melhor desempenho, substitua ${region_id} pelo ID da 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. Exclua o projeto

    1. Na página de lista de projetos do console do Simple Log Service, localize o projeto criado, como nginx-quickstart-xxx.

    2. Na coluna Actions, clique em Delete.

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

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

    Aviso

    A exclusão de um projeto remove permanentemente todos os dados de log e configurações. Esta ação não pode ser desfeita.

Próximas etapas

Agora que você coletou, consultou, visualizou e monitorou logs, explore os seguintes recursos para saber mais:

FAQ

Horário do log inconsistente após a coleta

Por padrão, o campo __time__ utiliza o horário de chegada ao servidor. Para usar o carimbo de data/hora do log original, adicione um plug-in de análise de tempo à configuração de coleta.

Cobranças pela criação de projeto e logstore

A criação de um logstore reserva recursos de shard por padrão, o que pode gerar taxas de aluguel de shard ativo. Por que sou cobrado pelas taxas de aluguel de shard ativo?

Solução de problemas para falhas na coleta de logs

A coleta de logs com o Logtail pode falhar devido a heartbeats anormais, erros de coleta ou configurações incorretas do Logtail. Solução de problemas para falhas na coleta de logs do Logtail.

Falha ao analisar logs

A análise de logs exige índices de campo com o recurso de estatísticas ativado. Verifique a configuração de índice do seu logstore.

Interrupção do faturamento

Não é possível desativar o Simple Log Service após a ativação. Se não desejar mais utilizar o service, você pode parar o faturamento excluindo todos os projetos da sua conta.