Tous les produits
Search
Centre de documentation

Simple Log Service:Collecter et analyser les journaux texte ECS à l'aide de LoongCollector

Dernière mise à jour :Aug 26, 2026

Utilisez LoongCollector pour collecter les journaux Nginx d'une instance ECS vers Simple Log Service (SLS). En 30 minutes, configurez la collecte des journaux, analysez les données avec SQL, affichez un tableau de bord, définissez des alertes et nettoyez les ressources pour éviter les frais.

image

Prérequis

Activer SLS et préparer un compte

  • Activez SLS : si c'est votre première utilisation, connectez-vous à la console Simple Log Service et suivez les instructions à l'écran pour activer le service.

  • Préparez un compte :

    • Compte Alibaba Cloud : dispose par défaut de toutes les autorisations.

    • Utilisateur RAM : si vous utilisez un utilisateur RAM, accordez-lui les stratégies d'autorisation requises :

      • AliyunLogFullAccess : accorde les autorisations nécessaires pour créer et gérer les ressources SLS, telles que les projets et les logstores.

      • AliyunECSFullAccess : accorde les autorisations nécessaires pour installer l'agent de collecte sur une instance ECS.

      • AliyunOOSFullAccess : accorde les autorisations nécessaires pour installer automatiquement l'agent de collecte sur une instance ECS via Operation Orchestration Service (OOS).

      Dans un environnement de production, vous pouvez créer des stratégies d'autorisation personnalisées pour un contrôle plus granulaire des autorisations des utilisateurs RAM.

Préparer une instance ECS

Assurez-vous que le groupe de sécurité de l'instance ECS autorise le trafic sortant sur les ports 80 (HTTP) et 443 (HTTPS).

Générer des journaux fictifs

  1. Connectez-vous à l'instance ECS.

  2. Créez un fichier de script nommé generate_nginx_logs.sh et collez-y le contenu suivant. Ce script écrit une entrée de journal d'accès Nginx standard dans /var/log/nginx/access.log toutes les 5 secondes.

    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. Accordez les droits d'exécution : chmod +x generate_nginx_logs.sh.

  4. Exécutez le script en arrière-plan : nohup ./generate_nginx_logs.sh &.

Créer un projet et un logstore

Un projet isole et gère les données dans SLS. Un logstore contient les données de journal au sein d'un projet.

  1. Connectez-vous à la console Simple Log Service.

  2. Cliquez sur Create Project :

    • Region : sélectionnez la même région que votre instance ECS pour collecter les journaux via le réseau interne.

    • Project Name : saisissez un nom globalement unique, par exemple nginx-quickstart-abc.

  3. Conservez les paramètres par défaut pour les autres configurations et cliquez sur Create.

  4. Une fois le projet créé, cliquez sur Create Logstore.

  5. Saisissez un Logstore Name (par exemple, nginx-access-log), conservez les paramètres par défaut pour les autres configurations, puis cliquez sur OK.

    Par défaut, un logstore Standard est créé ; sa facturation est basée sur le volume de données écrites .

Installer LoongCollector

  1. Une fois le logstore créé, cliquez sur OK dans la boîte de dialogue de confirmation pour ouvrir le panneau Quick Data Import.

  2. Sur la carte Nginx - Text Logs, cliquez sur Integrate Now.

  3. Machine Group Configurations :

    • Scenario : Servers

    • Installation Environment : ECS

  4. Cliquez sur Create Machine Group. Dans le panneau qui s'affiche, sélectionnez l'instance ECS cible.

  5. Cliquez sur Install and Create Machine Group. Une fois l'installation réussie, saisissez un Name pour le groupe de machines, par exemple my-nginx-server, puis cliquez sur OK.

    Remarque

    Si l'installation échoue ou reste en attente, assurez-vous que la région de l'ECS est identique à celle du projet.

  6. Cliquez sur Next pour vérifier l'état du heartbeat.

    Lors de la création initiale d'un groupe de machines, si l'état du heartbeat est FAIL, cliquez sur Automatic Retry . L'état passe à OK en environ deux minutes.

Créer une configuration de collecte

  1. Une fois l'état du heartbeat OK, cliquez sur Next pour accéder à la page Logtail Configurations :

    • Configuration Name : saisissez un nom pour la configuration, par exemple nginx-access-log-config.

    • File Path : saisissez /var/log/nginx dans la première zone et access.log dans la seconde.

    • Processor Configurations :

      • Log Sample : cliquez sur Add Sample Log et collez un exemple d'entrée de journal :

        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 : cliquez sur Data Parsing (NGINX Mode). Dans la section NGINX Log Configuration, configurez log_format en copiant et collant le contenu suivant. Ensuite, cliquez sur Confirm.

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        Dans un environnement de production, le log_format spécifié ici doit correspondre à la définition de votre fichier de configuration Nginx (généralement dans /etc/nginx/nginx.conf ).

        Exemple d'analyse de journal :

        Journal brut

        Journal structuré

        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. Cliquez sur Next pour accéder à la page Query and Analysis Configurations. La prise en compte de la configuration de collecte prend environ 1 minute. Cliquez sur Automatic Refresh. L'aperçu des données indique que la configuration est effective.

Interroger et analyser les journaux

Cliquez sur End pour accéder à la page End, puis cliquez sur Query Log. Vous êtes redirigé vers la page d'interrogation et d'analyse du logstore cible. Utilisez SQL pour extraire les métriques clés des journaux structurés. Définissez la plage de temps sur Last 15 Minutes :

Remarque

Si une fenêtre d'erreur apparaît, l'index n'est pas encore configuré. Fermez-la et attendez environ 1 minute jusqu'à ce que vous puissiez afficher le contenu du journal depuis le fichier access.log.

  • Exemple 1 : Nombre total de pages vues (PV)

    Comptez le nombre total d'entrées de journal dans la plage de temps spécifiée.

    * | SELECT count(*) AS pv
  • Exemple 2 : Requêtes et taux d'erreur par minute

    Calculez le total des requêtes, des requêtes en erreur (code d'état HTTP ≥ 400) et le taux d'erreur par minute.

    * | 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
    
  • Exemple 3 : PV par méthode de requête (GET, POST, etc.)

    Regroupez et comptez les pages vues par minute et par méthode de requête (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

Visualiser les données sur un tableau de bord

Après avoir configuré le processeur d'analyse Nginx, SLS crée automatiquement un tableau de bord prédéfini nommé nginx-access-log_Nginx Access Log.

  1. Dans le volet de navigation de gauche, choisissez imageDashboard > Dashboards.

  2. Cliquez sur le nom du tableau de bord pour afficher les graphiques des métriques clés : PV, UV, taux d'erreur et répartition des méthodes de requête.

  3. Personnalisez les graphiques en fonction de vos besoins métier.

image

Configurer la surveillance et les alertes

Créez une règle d'alerte pour recevoir des notifications en cas de comportement anormal, tel qu'une augmentation soudaine des erreurs.

  1. Dans le volet de navigation de gauche, cliquez sur imageAlerts.

  2. Créez une stratégie d'action :

    • Dans l'onglet Notification Policy > Action Policy, cliquez sur Create.

    • Configurez l'ID et le Name (par exemple, send-notification-to-admin).

    • Dans Primary Action Policy, cliquez sur imageAction Group.

    • Sélectionnez une Notification Method (par exemple, SMS), configurez le Recipient et sélectionnez un Alert Template.

    • Cliquez sur Confirm.

  3. Créez une règle d'alerte :

    1. Basculez vers l'onglet Alert Monitoring Rule et cliquez sur Create Alert.

    2. Nom de la règle : saisissez un nom descriptif, par exemple Too many server 5xx errors.

    3. Query Statistics : cliquez sur Add et configurez les conditions de requête.

      • Logstore : sélectionnez nginx-access-log.

      • Query Time Range : 15 minutes (Relative).

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

      • Cliquez sur Preview pour confirmer que vous pouvez interroger les données, puis cliquez sur OK.

    4. Trigger Condition : définissez la condition pour déclencher une alerte Critical lorsque le Specific number of entries est >100.

      Cette configuration déclenche une alerte si plus de 100 erreurs 5xx se produisent en 15 minutes.
    5. Destination : sélectionnez SLS Notification et Enable-le.

      • Action Policy : sélectionnez la stratégie d'action créée à l'étape précédente.

      • Repeat Interval : définissez sur 15 minutes pour éviter les notifications répétées.

    6. Cliquez sur OK pour enregistrer la règle d'alerte.

  4. Vérification : lorsque la condition de déclenchement est remplie, le canal de notification configuré reçoit une alerte. Vous pouvez consulter toutes les alertes déclenchées sur la page Alert History.

Nettoyage des ressources

Nettoyez toutes les ressources créées dans ce tutoriel pour éviter des frais continus.

  1. Arrêter le script de génération de journaux

    Connectez-vous à l'instance ECS et exécutez la commande suivante pour arrêter le script en arrière-plan.

    kill $(ps aux | grep '[g]enerate_nginx_logs.sh' | awk '{print $2}')
  2. Désinstaller LoongCollector (facultatif)

    1. Remplacez ${region_id} par cn-hangzhou, ou pour des performances optimales, remplacez ${region_id} par l'ID de la région de votre instance ECS.

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. Exécutez la commande de désinstallation.

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. Supprimer le projet

    1. Sur la page de liste des projets de la console Simple Log Service, trouvez le projet que vous avez créé, par exemple nginx-quickstart-xxx.

    2. Dans la colonne Actions, cliquez sur Delete.

    3. Dans le panneau qui s'affiche, saisissez le nom du projet et sélectionnez une raison de suppression.

    4. Cliquez sur OK. La suppression d'un projet supprime toutes les ressources associées, y compris les logstores, les configurations de collecte, les tableaux de bord et les règles d'alerte.

    Avertissement

    La suppression d'un projet supprime définitivement toutes les données de journal et les configurations. Cette action est irréversible.

Étapes suivantes

Maintenant que vous avez collecté, interrogé, visualisé et surveillé les journaux, explorez les ressources suivantes pour en savoir plus :

FAQ

Heure du journal incohérente après la collecte

Par défaut, le champ __time__ utilise l'heure d'arrivée sur le serveur. Pour utiliser l'horodatage du journal d'origine, ajoutez un plug-in d'analyse temporelle à la configuration de collecte.

Frais liés à la création d'un projet et d'un logstore

La création d'un logstore réserve par défaut des ressources de shard, ce qui peut entraîner des frais de location de shard actif. Pourquoi suis-je facturé pour les frais de location de shard actif ?

Dépannage des échecs de collecte de journaux

La collecte de journaux avec Logtail peut échouer en raison de heartbeats Logtail anormaux, d'erreurs de collecte ou de configurations Logtail incorrectes. Dépannage des échecs de collecte de journaux Logtail.

Échec de l'analyse des journaux

L'analyse des journaux nécessite des index de champs avec la fonctionnalité de statistiques activée. Vérifiez la configuration d'index de votre logstore.

Arrêt de la facturation

Simple Log Service ne peut pas être désactivé une fois activé. Si vous ne souhaitez plus utiliser le service, vous pouvez arrêter la facturation en supprimant tous les projets sous votre compte.