All Products
Search
Document Center

Simple Log Service:Kumpulkan dan analisis log teks ECS menggunakan LoongCollector

Last Updated:Aug 27, 2026

Gunakan LoongCollector untuk mengumpulkan log Nginx dari instans ECS ke Simple Log Service (SLS). Dalam waktu 30 menit, Anda dapat mengonfigurasi pengumpulan log, menganalisis data dengan SQL, melihat dasbor, menyiapkan notifikasi, dan membersihkan resource untuk menghindari biaya.

Prasyarat

Aktifkan SLS dan siapkan akun

  • Aktifkan SLS: Jika ini pertama kalinya Anda menggunakan layanan ini, login ke Konsol Simple Log Service dan ikuti petunjuk di layar untuk mengaktifkan layanan tersebut.

  • Siapkan akun:

    • Akun Alibaba Cloud: Memiliki izin penuh secara default.

    • RAM user: Jika Anda menggunakan RAM user, Anda harus memberikan kebijakan izin yang diperlukan:

      • AliyunLogFullAccess: Memberikan izin untuk membuat dan mengelola resource SLS seperti project dan logstore.

      • AliyunECSFullAccess: Memberikan izin untuk menginstal agen pengumpulan pada instans ECS.

      • AliyunOOSFullAccess: Memberikan izin untuk menginstal agen pengumpulan secara otomatis pada instans ECS melalui Operation Orchestration Service (OOS).

      Di lingkungan produksi, Anda dapat membuat kebijakan izin kustom untuk kontrol lebih rinci terhadap izin RAM user.

Siapkan instans ECS

Pastikan security group instans ECS mengizinkan lalu lintas outbound pada port 80 (HTTP) dan port 443 (HTTPS).

Buat log simulasi

  1. Login ke instans ECS.

  2. Buat file skrip bernama generate_nginx_logs.sh dan tempel konten berikut. Skrip ini menulis entri log akses Nginx standar ke /var/log/nginx/access.log setiap 5 detik.

    generate_nginx_logs.sh

    #!/bin/bash
    
    #==============================================================================
    # Nama Skrip: generate_nginx_logs.sh
    # Deskripsi Skrip: Mensimulasikan server NGINX dan terus-menerus menulis log ke access.log.
    #==============================================================================
    
    # --- Parameter yang Dapat Dikonfigurasi ---
    
    # Jalur file log
    LOG_FILE="/var/log/nginx/access.log"
    
    # --- Kolam Data Simulasi ---
    
    # Kolam alamat IP acak
    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"
    )
    
    # Kolam metode permintaan HTTP
    HTTP_METHODS=("GET" "POST" "PUT" "DELETE" "HEAD")
    
    # Kolam jalur permintaan umum
    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"
    )
    
    # Kolam kode status HTTP (Anda dapat menyesuaikan bobotnya, misalnya tambahkan lebih banyak 200 untuk meningkatkan probabilitasnya)
    HTTP_STATUSES=(200 200 200 200 201 301 404 404 500 502 403)
    
    # Kolam User-Agent umum
    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)"
    )
    
    # Kolam Referer umum
    REFERERS=(
        "https://www.google.com/"
        "https://www.bing.com/"
        "https://github.com/"
        "https://stackoverflow.com/"
        "-"
        "-"
        "-"
    )
    # Periksa dan buat direktori log
    LOG_DIR=$(dirname "$LOG_FILE")
    if [ ! -d "$LOG_DIR" ]; then
        echo "Direktori log '$LOG_DIR' tidak ada. Mencoba membuat..."
        # Gunakan sudo untuk membuat direktori karena biasanya memerlukan izin root
        sudo mkdir -p "$LOG_DIR"
        if [ $? -ne 0 ]; then
            echo "Error: Gagal membuat direktori '$LOG_DIR'. Periksa izin atau buat secara manual."
            exit 1
        fi
        echo "Direktori berhasil dibuat."
    fi
    
    # Periksa izin penulisan untuk file log
    trap 'echo -e "\n\nSkrip diinterupsi. Menghentikan pembuatan log..."; exit 0;' SIGINT
    
    # --- Fungsi Inti ---
    
    # Definisikan fungsi untuk memilih elemen acak dari array
    # Penggunaan: random_element "nama_array"
    function random_element() {
        local arr=("${!1}")
        echo "${arr[$((RANDOM % ${#arr[@]}))]}"
    }
    
    # Tangkap sinyal interupsi Ctrl+C untuk keluar secara elegan
    trap 'echo -e "\n\nSkrip diinterupsi. Menghentikan pembuatan log..."; exit 0;' SIGINT
    
    # --- Loop Utama ---
    
    echo "Mulai membuat log simulasi NGINX ke $LOG_FILE ..."
    echo "Satu entri log dihasilkan setiap 5 detik."
    echo "Tekan Ctrl+C untuk berhenti."
    sleep 2
    
    # Loop tak hingga untuk terus menghasilkan log
    while true; do
        # 1. Dapatkan waktu saat ini dalam format default NGINX: [dd/Mon/YYYY:HH:MM:SS +ZZZZ]
        timestamp=$(date +'%d/%b/%Y:%H:%M:%S %z')
    
        # 2. Pilih data acak dari kolam
        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. Hasilkan ukuran badan respons acak (dalam byte)
        bytes_sent=$((RANDOM % 5000 + 100)) # Bilangan acak antara 100 dan 5100
    
        # 4. Gabungkan menjadi entri log lengkap dalam format gabungan NGINX
        # 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. Tambahkan baris log ke file
        # echo "$log_line" >> "$LOG_FILE"
        echo "$log_line" | sudo tee -a "$LOG_FILE" > /dev/null
        
        # 6. Tunggu 5 detik sebelum loop berikutnya
        sleep 5
    done
  3. Beri izin eksekusi: chmod +x generate_nginx_logs.sh.

  4. Jalankan skrip di latar belakang: nohup ./generate_nginx_logs.sh &.

Buat project dan logstore

Project mengisolasi dan mengelola data di SLS. Logstore menyimpan data log dalam sebuah project.

  1. Login ke Konsol Simple Log Service.

  2. Klik Create Project:

    • Region: Pilih region yang sama dengan instans ECS Anda agar log dikumpulkan melalui jaringan internal.

    • Project Name: Masukkan nama yang unik secara global, misalnya nginx-quickstart-abc.

  3. Pertahankan pengaturan default untuk konfigurasi lainnya dan klik Create.

  4. Setelah project dibuat, klik Create Logstore.

  5. Masukkan Logstore Name (misalnya, nginx-access-log), pertahankan pengaturan default untuk konfigurasi lainnya, lalu klik OK.

    Secara default, logstore Standard dibuat, yang ditagih berdasarkan volume data yang ditulis.

Instal LoongCollector

  1. Setelah logstore dibuat, klik OK pada kotak dialog konfirmasi untuk membuka panel Quick Data Import.

  2. Pada kartu Nginx - Text Logs, klik Integrate Now.

  3. Machine Group Configurations:

    • Scenario: Servers

    • Installation Environment: ECS

  4. Klik Create Machine Group. Di panel yang muncul, pilih instans ECS target.

  5. Klik Install and Create Machine Group. Setelah instalasi berhasil, masukkan Name untuk kelompok mesin, misalnya my-nginx-server, lalu klik OK.

    Catatan

    Jika instalasi gagal atau tetap tertunda, pastikan region ECS sama dengan region project.

  6. Klik Next untuk melanjutkan ke pemeriksaan status heartbeat.

    Saat pertama kali membuat kelompok mesin, jika status heartbeat adalah FAIL, klik Automatic Retry. Status akan berubah menjadi OK dalam waktu sekitar dua menit.

Buat konfigurasi pengumpulan

  1. Setelah status heartbeat menjadi OK, klik Next untuk menuju halaman Logtail Configurations:

    • Configuration Name: Masukkan nama untuk konfigurasi, misalnya nginx-access-log-config.

    • File Path: Masukkan /var/log/nginx di kotak pertama dan access.log di kotak kedua.

    • Processor Configurations:

      • Log Sample: Klik Add Sample Log dan tempel entri log contoh:

        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: Klik Data Parsing (NGINX Mode). Di bagian NGINX Log Configuration, konfigurasikan log_format dengan menyalin dan menempel konten berikut. Lalu, klik Confirm.

        log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                            '$status $body_bytes_sent "$http_referer" '
                            '"$http_user_agent" $request_time $request_length';
        Di lingkungan produksi, log_format yang ditentukan di sini harus sesuai dengan definisi di file konfigurasi Nginx Anda (biasanya di /etc/nginx/nginx.conf).

        Contoh penguraian log:

        Log mentah

        Log terstruktur

        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. Klik Next untuk menuju halaman Query and Analysis Configurations. Dibutuhkan waktu sekitar 1 menit agar konfigurasi pengumpulan berlaku. Klik Automatic Refresh. Pratinjau data menunjukkan bahwa konfigurasi telah berlaku.

Kueri dan analisis log

Klik End untuk menuju halaman End, lalu klik Query Log. Anda akan diarahkan ke halaman kueri dan analisis logstore target. Gunakan SQL untuk mengekstrak metrik utama dari log terstruktur. Atur rentang waktu ke Last 15 Minutes:

Catatan

Jika muncul pop-up error, indeks belum dikonfigurasi. Tutup pop-up tersebut dan tunggu sekitar 1 menit hingga Anda dapat melihat konten log dari file access.log.

  • Contoh 1: Total tampilan halaman (PV)

    Hitung jumlah total entri log dalam rentang waktu yang ditentukan.

    * | SELECT count(*) AS pv
  • Contoh 2: Permintaan dan tingkat error per menit

    Hitung total permintaan, permintaan error (kode status HTTP ≥ 400), dan tingkat error per menit.

    * | 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
    
  • Contoh 3: PV berdasarkan metode permintaan (GET, POST, dll.)

    Grup dan hitung tampilan halaman berdasarkan menit dan metode permintaan (GET, POST, dll.).

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

Visualisasikan data pada dasbor

Setelah Anda mengonfigurasi prosesor penguraian Nginx, SLS secara otomatis membuat dasbor preset bernama nginx-access-log_Nginx Access Log.

  1. Di panel navigasi sebelah kiri, pilih imageDashboard > Dashboards.

  2. Klik nama dasbor untuk melihat grafik metrik utama: PV, UV, tingkat error, dan distribusi metode permintaan.

  3. Sesuaikan grafik sesuai kebutuhan bisnis Anda.

image

Konfigurasi pemantauan dan notifikasi

Buat aturan notifikasi untuk menerima pemberitahuan saat terjadi perilaku abnormal, seperti lonjakan error.

  1. Di panel navigasi sebelah kiri, klik imageAlerts.

  2. Buat kebijakan aksi:

    • Di tab Notification Policy > Action Policy, klik Create.

    • Konfigurasi ID dan Name (misalnya, send-notification-to-admin).

    • Di Primary Action Policy, klik imageAction Group.

    • Pilih Notification Method (misalnya, SMS), konfigurasi Recipient, dan pilih Alert Template.

    • Klik Confirm.

  3. Buat aturan notifikasi:

    1. Beralih ke tab Alert Monitoring Rule dan klik Create Alert.

    2. Nama aturan: Masukkan nama deskriptif, misalnya Too many server 5xx errors.

    3. Query Statistics: Klik Add dan konfigurasi kondisi kueri.

      • Logstore: Pilih nginx-access-log.

      • Query Time Range: 15 minutes (Relative).

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

      • Klik Preview untuk memastikan Anda dapat mengkueri data, lalu klik OK.

    4. Trigger Condition: Atur kondisi untuk memicu notifikasi Critical ketika Specific number of entries adalah >100.

      Konfigurasi ini memicu notifikasi jika terjadi lebih dari 100 error 5xx dalam waktu 15 menit.
    5. Destination: Pilih SLS Notification dan Enable fitur tersebut.

      • Action Policy: Pilih kebijakan aksi yang telah Anda buat pada langkah sebelumnya.

      • Repeat Interval: Atur menjadi 15 menit untuk mencegah notifikasi berulang.

    6. Klik OK untuk menyimpan aturan notifikasi.

  4. Verifikasi: Saat kondisi pemicu terpenuhi, saluran notifikasi yang dikonfigurasi akan menerima notifikasi. Anda dapat melihat semua notifikasi yang dipicu di halaman Alert History.

Pembersihan resource

Bersihkan semua resource yang dibuat dalam tutorial ini untuk menghindari biaya berkelanjutan.

  1. Hentikan skrip pembuatan log

    Login ke instans ECS dan jalankan perintah berikut untuk menghentikan skrip latar belakang.

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

    1. Ganti ${region_id} dengan cn-hangzhou, atau untuk kinerja optimal, ganti ${region_id} dengan ID region instans ECS Anda.

      wget https://aliyun-observability-release-${region_id}.oss-${region_id}.aliyuncs.com/loongcollector/linux64/latest/loongcollector.sh -O loongcollector.sh;
    2. Jalankan perintah uninstal.

      chmod +x loongcollector.sh; sudo ./loongcollector.sh uninstall;
  3. Hapus proyek

    1. Di halaman daftar project Konsol Simple Log Service, temukan project yang telah Anda buat, misalnya nginx-quickstart-xxx.

    2. Di kolom Actions, klik Delete.

    3. Di panel yang muncul, masukkan nama project dan pilih alasan penghapusan.

    4. Klik OK. Menghapus project akan menghapus semua resource terkait, termasuk logstore, konfigurasi pengumpulan, dasbor, dan aturan notifikasi.

    Peringatan

    Menghapus project akan menghapus permanen semua data log dan konfigurasi. Tindakan ini tidak dapat dikembalikan.

Langkah selanjutnya

Sekarang Anda telah mengumpulkan, mengkueri, memvisualisasikan, dan memantau log, jelajahi sumber daya berikut untuk mempelajari lebih lanjut:

FAQ

Waktu log tidak konsisten setelah pengumpulan

Secara default, field __time__ menggunakan waktu kedatangan server. Untuk menggunakan timestamp dari log asli, tambahkan plug-in parsing waktu ke konfigurasi pengumpulan.

Biaya untuk membuat project dan logstore

Membuat logstore secara default mencadangkan resource shard, yang dapat menimbulkan biaya sewa shard aktif. Mengapa saya dikenai biaya sewa shard aktif?

Pemecahan masalah kegagalan pengumpulan log

Pengumpulan log dengan Logtail dapat gagal karena heartbeat Logtail abnormal, error pengumpulan, atau konfigurasi Logtail salah. Pemecahan masalah kegagalan pengumpulan log Logtail.

Gagal menganalisis log

Analis log memerlukan indeks bidang dengan fitur statistik diaktifkan. Verifikasi konfigurasi indeks logstore Anda.

Menghentikan penagihan

Simple Log Service tidak dapat dinonaktifkan setelah diaktifkan. Jika Anda tidak ingin lagi menggunakan layanan ini, Anda dapat menghentikan penagihan dengan menghapus semua project di bawah akun Anda.