Tüm Ürünler
Search
Belge Merkezi

Simple Log Service:LoongCollector kullanarak ECS metin günlüklerini toplayın ve analiz edin

Son Güncelleme:Oct 06, 2026

LoongCollector kullanarak bir ECS örneğinden Nginx günlüklerini Simple Log Service (SLS) hizmetine toplayın. 30 dakika içinde günlük toplamayı yapılandırabilir, verileri SQL ile analiz edebilir, bir panoyu görüntüleyebilir, uyarıları ayarlayabilir ve ücretlerden kaçınmak için kaynakları temizleyebilirsiniz.

image

Ön koşullar

SLS hizmetini etkinleştirin ve bir hesap hazırlayın

  • SLS hizmetini etkinleştirin: İlk kez kullanıyorsanız, Simple Log Service konsolu üzerinde oturum açın ve ekrandaki talimatları izleyerek hizmeti etkinleştirin.

  • Bir hesap hazırlayın:

    • Alibaba Cloud hesabı: Varsayılan olarak tam izinlere sahiptir.

    • RAM kullanıcısı: Bir RAM kullanıcısı kullanıyorsanız, gerekli izin ilkelerini vermeniz gerekir:

      • AliyunLogFullAccess: Projeler ve logstore'lar gibi SLS kaynaklarını oluşturma ve yönetme izinleri verir.

      • AliyunECSFullAccess: Bir ECS örneğine toplama aracısını yüklemek için izinler verir.

      • AliyunOOSFullAccess: Operation Orchestration Service (OOS) aracılığıyla bir ECS örneğine toplama aracısını otomatik olarak yüklemek için izinler verir.

      Üretim ortamında, RAM kullanıcısı izinleri üzerinde daha ayrıntılı kontrol sağlamak için özel izin ilkeleri oluşturabilirsiniz .

Bir ECS örneği hazırlayın

ECS örneği güvenlik grubunun 80 numaralı bağlantı noktasındaki (HTTP) ve 443 numaralı bağlantı noktasındaki (HTTPS) giden trafiğe izin verdiğinden emin olun.

Sahte günlükler oluşturun

  1. ECS örneğinde oturum açın.

  2. generate_nginx_logs.sh adlı bir betik dosyası oluşturun ve aşağıdaki içeriği yapıştırın. Bu betik, her 5 saniyede bir standart bir Nginx erişim günlüğü girdisini /var/log/nginx/access.log dosyasına yazar.

    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. Çalıştırma izinleri verin: chmod +x generate_nginx_logs.sh.

  4. Betik arka planda çalıştırın: nohup ./generate_nginx_logs.sh &.

Proje ve logstore oluşturun

Bir proje, SLS içindeki verileri izole eder ve yönetir. Bir logstore, bir proje içindeki günlük verilerini tutar.

  1. Simple Log Service konsolunda oturum açın.

  2. Create Project seçeneğini tıklayın:

    • Region: Günlükleri iç ağ üzerinden toplamak için ECS örneğinizle aynı bölgeyi seçin.

    • Project Name: Genel olarak benzersiz bir ad girin, örneğin nginx-quickstart-abc.

  3. Diğer yapılandırmalar için varsayılan ayarları koruyun ve Create seçeneğini tıklayın.

  4. Proje oluşturulduktan sonra, Create Logstore seçeneğini tıklayın.

  5. Bir Logstore Name girin (örneğin, nginx-access-log), diğer yapılandırmalar için varsayılan ayarları koruyun ve OK seçeneğini tıklayın.

    Varsayılan olarak, Standard bir logstore oluşturulur ve bu logstore yazılan veri hacmine göre faturalandırılır .

LoongCollector yükleyin

  1. Logstore oluşturulduktan sonra, onay iletişim kutusunda OK seçeneğini tıklayarak Quick Data Import panelini açın.

  2. Nginx - Text Logs kartında, Integrate Now seçeneğini tıklayın.

  3. Machine Group Configurations:

    • Scenario: Servers

    • Installation Environment: ECS

  4. Create Machine Group seçeneğini tıklayın. Açılan panelde hedef ECS örneğini seçin.

  5. Install and Create Machine Group seçeneğini tıklayın. Yükleme başarılı olduktan sonra, makine grubu için bir Name girin, örneğin my-nginx-server ve ardından OK seçeneğini tıklayın.

    Not

    Yükleme başarısız olursa veya beklemede kalırsa, ECS bölgesinin proje bölgesiyle aynı olduğundan emin olun.

  6. Heartbeat durumu kontrolüne devam etmek için Next seçeneğini tıklayın.

    İlk kez bir makine grubu oluşturduğunuzda, heartbeat durumu FAIL ise Automatic Retry seçeneğini tıklayın. Durum yaklaşık iki dakika içinde OK olarak değişir.

Toplama yapılandırması oluşturun

  1. Heartbeat durumu OK olduktan sonra, Next seçeneğini tıklayarak Logtail Configurations sayfasına gidin:

    • Configuration Name: Yapılandırma için bir ad girin, örneğin nginx-access-log-config.

    • File Path: İlk kutuya /var/log/nginx ve ikinci kutuya access.log girin.

    • Processor Configurations:

      • Log Sample: Add Sample Log seçeneğini tıklayın ve bir örnek günlük girdisi yapıştırın:

        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: Data Parsing (NGINX Mode) seçeneğini tıklayın. NGINX Log Configuration bölümünde, aşağıdaki içeriği kopyalayıp yapıştırarak log_format yapılandırmasını yapın. Ardından, Confirm seçeneğini tıklayın.

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        Üretim ortamında, burada belirtilen log_format değeri Nginx yapılandırma dosyanızdaki (genellikle /etc/nginx/nginx.conf içinde) tanımla eşleşmelidir.

        Günlük ayrıştırma örneği:

        Ham günlük

        Yapılandırılmış günlük

        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. Next seçeneğini tıklayarak Query and Analysis Configurations sayfasına gidin. Toplama yapılandırmasının etkili olması yaklaşık 1 dakika sürer. Automatic Refresh seçeneğini tıklayın. Önizleme verileri, yapılandırmanın etkili olduğunu gösterir.

Günlükleri sorgulayın ve analiz edin

End seçeneğini tıklayarak End sayfasına gidin ve ardından Query Log seçeneğini tıklayın. Hedef logstore'un sorgu ve analiz sayfasına yönlendirilirsiniz. Yapılandırılmış günlüklerden temel ölçümleri çıkarmak için SQL kullanın. Zaman aralığını Last 15 Minutes olarak ayarlayın:

Not

Bir hata açılır penceresi görünürse, dizin henüz yapılandırılmamış demektir. Kapatın ve access.log dosyasından günlük içeriğini görüntüleyebilene kadar yaklaşık 1 dakika bekleyin.

  • Örnek 1: Toplam sayfa görüntülemesi (PV)

    Belirtilen zaman aralığındaki toplam günlük girdisi sayısını hesaplayın.

    * | SELECT count(*) AS pv
  • Örnek 2: Dakika başına istekler ve hata oranı

    Dakika başına toplam istekleri, hata isteklerini (HTTP durum kodu ≥ 400) ve hata oranını hesaplayın.

    * | 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
    
  • Örnek 3: İstek yöntemine göre PV'ler (GET, POST vb.)

    Sayfa görüntülemelerini dakikaya ve istek yöntemine (GET, POST vb.) göre gruplayın ve sayın.

    * |
    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

Verileri bir panoda görselleştirin

Nginx ayrıştırma işlemcisini yapılandırdıktan sonra, SLS otomatik olarak nginx-access-log_Nginx Access Log adlı önceden ayarlanmış bir pano oluşturur.

  1. Sol gezinme bölmesinde, imageDashboard > Dashboards seçeneğini belirleyin.

  2. Temel ölçümler için grafikleri görüntülemek üzere pano adına tıklayın: PV'ler, UV'ler, hata oranı ve istek yöntemi dağılımı.

  3. İş ihtiyaçlarınıza göre grafikleri özelleştirin.

image

İzleme ve uyarıları yapılandırın

Hatalarda ani artış gibi anormal davranışlar gerçekleştiğinde bildirim almak için bir uyarı kuralı oluşturun.

  1. Sol gezinme bölmesinde, imageAlerts seçeneğini tıklayın.

  2. Bir eylem ilkesi oluşturun:

    • Notification Policy > Action Policy sekmesinde, Create seçeneğini tıklayın.

    • ID ve Name değerlerini yapılandırın (örneğin, send-notification-to-admin).

    • Primary Action Policy alanında, imageAction Group seçeneğini tıklayın.

    • Bir Notification Method seçin (örneğin, SMS), Recipient değerini yapılandırın ve bir Alert Template seçin.

    • Confirm seçeneğini tıklayın.

  3. Bir uyarı kuralı oluşturun:

    1. Alert Monitoring Rule sekmesine geçiş yapın ve Create Alert seçeneğini tıklayın.

    2. Kural adı: Açıklayıcı bir ad girin, örneğin Too many server 5xx errors.

    3. Query Statistics: Add seçeneğini tıklayın ve sorgu koşullarını yapılandırın.

      • Logstore: nginx-access-log seçeneğini belirleyin.

      • Query Time Range: 15 minutes (Relative).

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

      • Verileri sorgulayabildiğinizi onaylamak için Preview seçeneğini tıklayın ve ardından OK seçeneğini tıklayın.

    4. Trigger Condition: Specific number of entries değeri >100 olduğunda bir Critical uyarısı tetiklenecek şekilde koşulu ayarlayın.

      Bu yapılandırma, 15 dakika içinde 100'den fazla 5xx hatası oluşursa bir uyarı tetikler.
    5. Destination: SLS Notification seçeneğini belirleyin ve Enable edin.

      • Action Policy: Önceki adımda oluşturduğunuz eylem ilkesini seçin.

      • Repeat Interval: Tekrarlanan bildirimleri önlemek için 15 dakika olarak ayarlayın.

    6. Uyarı kuralını kaydetmek için OK seçeneğini tıklayın.

  4. Doğrulama: Tetikleme koşulu karşılandığında, yapılandırılmış bildirim kanalı bir uyarı alır. Tetiklenen tüm uyarıları Alert History sayfasında görüntüleyebilirsiniz.

Kaynak temizleme

Devam eden ücretlerden kaçınmak için bu eğitimde oluşturulan tüm kaynakları temizleyin.

  1. Günlük oluşturma betiğini durdurun

    ECS örneğinde oturum açın ve arka plan betiğini durdurmak için aşağıdaki komutu çalıştırın.

    kill $(ps aux | grep '[g]enerate_nginx_logs.sh' | awk '{print $2}')
  2. LoongCollector kaldırın (isteğe bağlı)

    1. ${region_id} değerini cn-hangzhou ile değiştirin veya en iyi performans için ${region_id} değerini ECS örneğinizin bölge kimliği ile değiştirin.

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. Kaldırma komutunu çalıştırın.

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. Projeyi silin

    1. Simple Log Service konsolunun proje listesi sayfasında, oluşturduğunuz projeyi bulun, örneğin nginx-quickstart-xxx.

    2. Actions sütununda, Delete seçeneğini tıklayın.

    3. Açılan panelde, proje adını girin ve silme nedenini seçin.

    4. OK seçeneğini tıklayın. Bir projenin silinmesi, logstore'lar, toplama yapılandırmaları, panolar ve uyarı kuralları dahil olmak üzere ilişkili tüm kaynakları kaldırır.

    Uyarı

    Bir projenin silinmesi, tüm günlük verilerini ve yapılandırmalarını kalıcı olarak kaldırır. Bu işlem geri alınamaz.

Sonraki adımlar

Artık günlükleri topladığınız, sorguladığınız, görselleştirdiğiniz ve izlediğiniz için daha fazla bilgi edinmek amacıyla aşağıdaki kaynakları keşfedin:

SSS

Toplamadan sonra tutarsız günlük zamanı

Varsayılan olarak, __time__ alanı sunucu varış zamanını kullanır. Orijinal günlükten zaman damgasını kullanmak için toplama yapılandırmasına bir zaman ayrıştırma eklentisi ekleyin.

Proje ve logstore oluşturma ücretleri

Bir logstore oluşturmak varsayılan olarak parça kaynaklarını ayırır ve bu da aktif parça kira ücretlerine yol açabilir. Neden aktif parça kira ücretlerinden ücretlendiriliyorum?

Günlük toplama hatalarının giderilmesi

Logtail ile günlük toplama, anormal Logtail heartbeats, toplama hataları veya yanlış Logtail yapılandırmaları nedeniyle başarısız olabilir. Logtail günlük toplama hatalarının giderilmesi.

Günlükleri analiz etme hatası

Günlük analizi, istatistik özelliği etkinleştirilmiş alan dizinleri gerektirir. Logstore'unuzun dizin yapılandırmasını doğrulayın.

Faturalandırmayı durdurma

Simple Log Service etkinleştirildikten sonra devre dışı bırakılamaz. Hizmeti artık kullanmak istemiyorsanız, hesabınız altındaki tüm projeleri silerek faturalandırmayı durdurabilirsiniz.