Todos los productos
Search
Centro de documentos

Simple Log Service:Recopilación y análisis de registros de texto de ECS mediante LoongCollector

Última actualización: Sep 02, 2026

Utilice LoongCollector para recopilar registros de Nginx desde una instancia de ECS hacia Simple Log Service (SLS). En 30 minutos, puede configurar la recopilación de registros, analizar datos con SQL, consultar un panel, establecer alertas y limpiar los recursos para evitar cargos.

image

Requisitos previos

Activar SLS y preparar una cuenta

  • Activar SLS: Si es la primera vez que lo utiliza, inicie sesión en la consola de Simple Log Service y siga las instrucciones en pantalla para activar el servicio.

  • Preparar una cuenta:

    • Cuenta de Alibaba Cloud: Cuenta con todos los permisos de forma predeterminada.

    • Usuario RAM: Si utiliza un usuario RAM, debe grant las directivas de permisos necesarias:

      • AliyunLogFullAccess: Otorga permisos para crear y gestionar recursos de SLS, como proyectos y logstores.

      • AliyunECSFullAccess: Otorga permisos para instalar el agente de recopilación en una instancia de ECS.

      • AliyunOOSFullAccess: Otorga permisos para instalar automáticamente el agente de recopilación en una instancia de ECS mediante Operation Orchestration Service (OOS).

      En un entorno de producción, puede create custom permission policies para obtener un control más granular sobre los permisos del usuario RAM.

Preparar una instancia de ECS

Asegúrese de que el security group ECS instance permita el tráfico de salida por el puerto 80 (HTTP) y el puerto 443 (HTTPS).

Generar registros simulados

  1. Log on to the ECS instance.

  2. Cree un archivo de script llamado generate_nginx_logs.sh y pegue el siguiente contenido. Este script escribe una entrada de registro de acceso estándar de Nginx en /var/log/nginx/access.log 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. Otorgue permisos de ejecución: chmod +x generate_nginx_logs.sh.

  4. Ejecute el script en segundo plano: nohup ./generate_nginx_logs.sh &.

Crear un proyecto y un logstore

Un proyecto aísla y gestiona los datos en SLS. Un logstore almacena los datos de registro dentro de un proyecto.

  1. Inicie sesión en la consola de Simple Log Service.

  2. Haga clic en Create Project:

    • Region: Seleccione la misma región que su instancia de ECS para recopilar registros a través de la red interna.

    • Project Name: Introduzca un nombre globalmente único, como nginx-quickstart-abc.

  3. Mantenga la configuración predeterminada para other configurations y haga clic en Create.

  4. Una vez creado el proyecto, haga clic en Create Logstore.

  5. Introduzca un Logstore Name (por ejemplo, nginx-access-log), mantenga la configuración predeterminada para other configurations y haga clic en OK.

    De forma predeterminada, se crea un logstore Standard , que es billed based on the volume of data written .

Instalar LoongCollector

  1. Después de crear el logstore, haga clic en OK en el cuadro de diálogo de confirmación para abrir el panel Quick Data Import.

  2. En la tarjeta Nginx - Text Logs, haga clic en Integrate Now.

  3. Machine Group Configurations:

    • Scenario: Servers

    • Installation Environment: ECS

  4. Haga clic en Create Machine Group. En el panel que aparece, seleccione la instancia de ECS de destino.

  5. Haga clic en Install and Create Machine Group. Una vez completada la instalación correctamente, introduzca un Name para el grupo de máquinas, como my-nginx-server, y luego haga clic en OK.

    Nota

    Si la instalación falla o permanece pendiente, asegúrese de que la región de ECS coincida con la región del proyecto.

  6. Haga clic en Next para continuar con la verificación del estado del latido.

    Cuando crea un grupo de máquinas por primera vez, si el estado del latido es FAIL, haga clic en Automatic Retry . El estado cambiará a OK en aproximadamente dos minutos.

Crear una configuración de recopilación

  1. Cuando el estado del latido sea OK, haga clic en Next para ir a la página Logtail Configurations:

    • Configuration Name: Introduzca un nombre para la configuración, como nginx-access-log-config.

    • File Path: Introduzca /var/log/nginx en el primer cuadro y access.log en el segundo cuadro.

    • Processor Configurations:

      • Log Sample: Haga clic en Add Sample Log y pegue una entrada de registro de ejemplo:

        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: Haga clic en Data Parsing (NGINX Mode). En la sección NGINX Log Configuration, configure log_format copiando y pegando el siguiente contenido. Luego, haga clic en Confirm.

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        En un entorno de producción, el log_format especificado aquí debe coincidir con la definición en su archivo de configuración de Nginx (generalmente en /etc/nginx/nginx.conf ).

        Ejemplo de análisis de registros:

        Registro sin procesar

        Registro estructurado

        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. Haga clic en Next para ir a la página Query and Analysis Configurations. La configuración de recopilación tarda aproximadamente 1 minuto en surtir efecto. Haga clic en Automatic Refresh. La vista previa de los datos indica que la configuración es efectiva.

Consulta y análisis de registros

Haga clic en End para ir a la página End y luego haga clic en Query Log. Se le redirigirá a la página de consulta y análisis del logstore de destino. Utilice SQL para extraer métricas clave de los registros estructurados. Establezca el intervalo de tiempo en Last 15 Minutes:

Nota

Si aparece una ventana emergente de error, significa que el índice aún no está configurado. Ciérrela y espere aproximadamente 1 minuto hasta que pueda ver el contenido del registro del archivo access.log.

  • Ejemplo 1: Total de páginas vistas (PV)

    Cuente el número total de entradas de registro dentro del intervalo de tiempo especificado.

    * | SELECT count(*) AS pv
  • Ejemplo 2: Solicitudes y tasa de errores por minuto

    Calcule el total de solicitudes, las solicitudes con error (código de estado HTTP ≥ 400) y la tasa de errores 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
    
  • Ejemplo 3: PV por método de solicitud (GET, POST, etc.)

    Agrupe y cuente las páginas vistas por minuto y método de solicitud (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

Visualización de datos en un panel

Después de configurar el procesador de análisis de Nginx, SLS crea automáticamente un panel preestablecido llamado nginx-access-log_Nginx Access Log.

  1. En el panel de navegación izquierdo, elija imageDashboard > Dashboards.

  2. Haga clic en el nombre del panel para ver gráficos de métricas clave: PV, UV, tasa de errores y distribución de métodos de solicitud.

  3. Customize gráficos según sus necesidades comerciales.

image

Configuración de monitoreo y alertas

Cree una regla de alerta para recibir notificaciones cuando ocurra un comportamiento anómalo, como un aumento repentino de errores.

  1. En el panel de navegación izquierdo, haga clic en imageAlerts.

  2. Cree una directiva de acción:

    • En la pestaña Notification Policy > Action Policy, haga clic en Create.

    • Configure el ID y el Name (por ejemplo, send-notification-to-admin).

    • En Primary Action Policy, haga clic en imageAction Group.

    • Seleccione un Notification Method (por ejemplo, SMS), configure el Recipient y seleccione una Alert Template.

    • Haga clic en Confirm.

  3. Cree una regla de alerta:

    1. Cambie a la pestaña Alert Monitoring Rule y haga clic en Create Alert.

    2. Nombre de la regla: Introduzca un nombre descriptivo, como Too many server 5xx errors.

    3. Query Statistics: Haga clic en Add y configure las condiciones de consulta.

      • Logstore: Seleccione nginx-access-log.

      • Query Time Range: 15 minutes (Relative).

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

      • Haga clic en Preview para confirmar que puede consultar datos y luego haga clic en OK.

    4. Trigger Condition: Establezca la condición para activar una alerta Critical cuando Specific number of entries sea >100.

      Esta configuración activa una alerta si ocurren más de 100 errores 5xx en un periodo de 15 minutos.
    5. Destination: Seleccione SLS Notification y Enable la opción.

      • Action Policy: Seleccione la directiva de acción que creó en el paso anterior.

      • Repeat Interval: Establézcalo en 15 minutos para evitar notificaciones repetidas.

    6. Haga clic en OK para guardar la regla de alerta.

  4. Verificación: Cuando se cumple la condición de activación, el canal de notificación configurado recibe una alerta. Puede consultar todas las alertas activadas en la página Alert History.

Limpieza de recursos

Limpie todos los recursos creados en este tutorial para evitar cargos continuos.

  1. Detener el script de generación de registros

    Inicie sesión en la instancia de ECS y ejecute el siguiente comando para detener el script en segundo plano.

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

    1. Reemplace ${region_id} con cn-hangzhou o, para un rendimiento óptimo, reemplace ${region_id} con el ID de region de su instancia de ECS.

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. Ejecute el comando de desinstalación.

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. Eliminar el proyecto

    1. En la página de lista de proyectos de la consola de Simple Log Service, busque el proyecto que creó, como nginx-quickstart-xxx.

    2. En la columna Actions, haga clic en Delete.

    3. En el panel que aparece, introduzca el nombre del proyecto y seleccione un motivo para la eliminación.

    4. Haga clic en OK. Al eliminar un proyecto, se quitan todos los recursos asociados, incluidos logstores, configuraciones de recopilación, paneles y reglas de alerta.

    Aviso

    La eliminación de un proyecto borra permanentemente todos los datos de registro y configuraciones. Esta acción no se puede deshacer.

Siguientes pasos

Ahora que ha recopilado, consultado, visualizado y monitoreado registros, explore los siguientes recursos para obtener más información:

Preguntas frecuentes

Hora de registro inconsistente después de la recopilación

De forma predeterminada, el campo __time__ utiliza la hora de llegada al servidor. Para usar la marca de tiempo del registro original, agregue un complemento de análisis de tiempo a la configuración de recopilación.

Cargos por crear un proyecto y un logstore

La creación de un logstore reserva recursos de shard de forma predeterminada, lo que puede generar cargos por arrendamiento de shards activos. Why am I charged for active shard lease fees?

Solución de problemas de fallas en la recopilación de registros

La recopilación de registros con Logtail puede fallar debido a latidos anómalos de Logtail, errores de recopilación o configuraciones incorrectas de Logtail. Troubleshooting Logtail log collection failures.

Falla al analizar registros

El análisis de registros requiere índices de campo con la función de estadísticas habilitada. Compruebe index configuration de su logstore.

Detener la facturación

Simple Log Service no se puede desactivar una vez activado. Si ya no desea utilizar el servicio, puede stop billing eliminando todos los proyectos bajo su cuenta.