全部产品
Search
文档中心

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

更新时间:Jan 30, 2026

Panduan ini menjelaskan cara mengumpulkan log NGINX dari instans Elastic Compute Service (ECS) menggunakan LoongCollector dari Simple Log Service (SLS). Anda akan mempelajari cara mengonfigurasi pengumpulan log, melakukan kueri data dengan SQL, melihat dasbor visualisasi, mengatur notifikasi, serta membersihkan resource untuk menghindari biaya.

image

Prasyarat

Aktifkan layanan dan siapkan akun

  • Aktifkan SLS: Jika ini pertama kalinya Anda menggunakan SLS, login ke Konsol Simple Log Service dan aktifkan layanan sesuai petunjuk.

  • Siapkan akun:

    • Login dengan Akun Alibaba Cloud: Akun ini memiliki semua izin secara default dan dapat digunakan langsung.

    • Login dengan Pengguna RAM: Akun Alibaba Cloud harus memberikan kebijakan akses yang diperlukan kepada Pengguna RAM:

      • AliyunLogFullAccess: Digunakan untuk membuat dan mengelola resource SLS seperti proyek dan logstore.

      • AliyunECSFullAccess: Digunakan untuk menginstal agen pengumpulan pada instans ECS.

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

      Di lingkungan produksi, Anda dapat membuat kebijakan izin kustom untuk pengelolaan izin Pengguna RAM yang lebih detail halus.

Siapkan instans ECS

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

Buat log tiruan

  1. Login ke instans ECS.

  2. Buat file skrip bernama generate_nginx_logs.sh dan tempel konten berikut ke dalam file tersebut. Skrip ini menulis entri log akses NGINX standar ke file /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 Tiruan ---
    
    # 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 NGINX tiruan ke $LOG_FILE ..."
    echo "Satu entri log dihasilkan setiap 5 detik."
    echo "Tekan Ctrl+C untuk berhenti."
    sleep 2
    
    # Loop tak hingga untuk terus-menerus 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 selama 5 detik sebelum loop berikutnya
        sleep 5
    done
  3. Berikan izin eksekusi: chmod +x generate_nginx_logs.sh.

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

Buat proyek dan logstore

Proyek adalah unit manajemen resource di SLS dan digunakan untuk mengisolasi data dari proyek yang berbeda. Logstore adalah unit penyimpanan untuk data log.

  1. Login ke Konsol Simple Log Service.

  2. Klik Create Project:

    • Region: Pilih wilayah yang sama dengan instans ECS Anda. Hal ini memungkinkan Anda mengumpulkan log melalui jaringan internal Alibaba Cloud, yang mempercepat pengumpulan log.

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

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

  4. Pada halaman yang menunjukkan proyek telah dibuat, klik Create Logstore.

  5. Masukkan Logstore Name, misalnya nginx-access-log, jangan ubah konfigurasi lainnya, lalu klik OK.

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

Instal LoongCollector

  1. Pada kotak dialog yang muncul setelah logstore dibuat, klik OK 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. Pada panel yang muncul, pilih instans ECS target.

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

    Catatan

    Jika instalasi gagal atau tetap tertunda, periksa apakah wilayah ECS sama dengan wilayah proyek.

  6. Klik Next untuk memeriksa status heartbeat kelompok mesin.

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

Buat konfigurasi pengumpulan

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

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

    • File Path: Jalur untuk pengumpulan log. Pada kotak input pertama, masukkan jalur direktori, misalnya /var/log/nginx. Pada kotak input kedua, masukkan nama file, misalnya access.log.

    • Processor Configurations:

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

        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: Pilih Data Parsing (NGINX Mode). Pada kolom NGINX Log Configuration, konfigurasikan log_format. Salin dan tempel konten berikut, lalu klik OK.

        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 di sini harus konsisten dengan definisi dalam file konfigurasi NGINX Anda, yang biasanya terletak di /etc/nginx/nginx.conf.

        Contoh penguraian log:

        Log mentah

        Log terurai 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. Konfigurasi pengumpulan memerlukan waktu sekitar satu menit untuk diterapkan. Klik Automatic Refresh. Jika data pratinjau muncul, konfigurasi telah diterapkan.

Kueri dan analisis log

Klik Next untuk menuju halaman terakhir. Klik Query Logs. Anda akan diarahkan ke halaman kueri dan analisis logstore target. Anda dapat menulis pernyataan analitik SQL untuk mengekstrak metrik bisnis dan O&M utama dari log yang telah diurai. Atur rentang waktu ke Last 15 Minutes:

Catatan

Jika muncul pop-up error, itu karena indeks belum dikonfigurasi. Tutup pop-up tersebut dan tunggu selama satu menit. Anda kemudian dapat melihat konten log dari file access.log.

  • Contoh 1: Jumlah tampilan halaman (PVs) situs web

    Hitung jumlah total entri log dalam rentang waktu yang ditentukan.

    * | SELECT count(*) AS pv
  • Contoh 2: Statistik permintaan dan laju error per menit

    Hitung jumlah total permintaan, jumlah permintaan error (kode status HTTP ≥ 400), dan laju 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: Statistik PVs berdasarkan metode permintaan (GET, POST, dll.)

    Grup dan hitung jumlah tampilan halaman per 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 plug-in parsing NGINX, SLS secara otomatis membuat dasbor preset bernama nginx-access-log_NGINX Access Log.

  1. Pada panel navigasi di sebelah kiri, klik image dan pilih Dashboard > Dashboards.

  2. Temukan dan klik nama dasbor untuk melihat grafik metrik inti seperti jumlah tampilan halaman (PVs), pengunjung unik (UVs), laju error, dan distribusi metode permintaan.

  3. Semua grafik dapat disesuaikan dan dimodifikasi sesuai kebutuhan.

Konfigurasi pemantauan dan notifikasi

Konfigurasikan aturan notifikasi untuk secara otomatis mengirimkan Notifikasi ketika layanan mengalami anomali, seperti lonjakan jumlah error.

  1. Pada panel navigasi di sebelah kiri, klik image Alerts.

  2. Buat kebijakan aksi:

    • Pada tab Notification Management > Action Policy, klik Create.

    • Konfigurasikan ID dan Name, misalnya send-notification-to-admin.

    • Pada Primary Action Policy, klik image Action Group.

    • Pilih Notification Method, misalnya SMS Message, konfigurasikan Recipient, dan pilih Alert Template.

    • Klik Confirm.

  3. Buat aturan notifikasi:

    1. Beralih ke tab Alert Rules dan klik Create Alert.

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

    3. Pada kolom Query Statistics, klik Create untuk mengatur kondisi kueri.

      • Logstore: Pilih nginx-access-log yang telah Anda buat.

      • Time Range: 15 minutes (Relative).

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

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

    4. Trigger Condition: Konfigurasikan aturan agar memicu notifikasi kritis ketika hasil kueri berisi lebih dari 100 entri.

      Konfigurasi ini berarti notifikasi dipicu jika terjadi lebih dari 100 error 5xx dalam 15 menit.
    5. Destination: Pilih Simple Log Service Notification dan aktifkan.

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

      • Repeat Interval: Atur ke 15 menit untuk menghindari notifikasi berulang yang berlebihan.

    6. Klik OK untuk menyimpan aturan notifikasi.

  4. Verifikasi: Saat kondisi notifikasi terpenuhi, saluran notifikasi yang dikonfigurasi akan menerima notifikasi. Lihat semua catatan notifikasi yang dipicu pada halaman Alert History.

Bersihkan resource

Untuk menghindari biaya yang tidak perlu, bersihkan semua resource yang telah Anda buat setelah selesai.

  1. Hentikan skrip pembuatan log

    Login ke instans ECS dan jalankan perintah berikut untuk menghentikan skrip pembuatan log yang berjalan di latar belakang.

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

    1. Pada contoh kode, Anda dapat mengganti ${region_id} dengan cn-hangzhou. Untuk mempercepat eksekusi, ganti ${region_id} dengan wilayah 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 uninstall.

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

    1. Pada Konsol Simple Log Service, buka halaman Daftar Proyek dan temukan proyek yang telah Anda buat, misalnya nginx-quickstart-xxx.

    2. Pada kolom Tindakan, klik Delete.

    3. Pada panel hapus, masukkan nama proyek dan pilih alasan penghapusan.

    4. Klik OK. Menghapus proyek juga menghapus semua resource terkaitnya, termasuk logstore, konfigurasi pengumpulan, dasbor, dan aturan notifikasi.

    Peringatan

    Setelah proyek dihapus, semua data log dan informasi konfigurasinya dilepas dan tidak dapat dipulihkan. Sebelum menghapus proyek, pastikan tindakan tersebut untuk mencegah kehilangan data.

Langkah selanjutnya

Anda telah menyelesaikan proses pengumpulan log, kueri dan analisis, visualisasi dasbor, serta konfigurasi notifikasi. Kami menyarankan Anda membaca dokumen berikut untuk lebih memahami konsep inti dan merencanakan sistem resource log berdasarkan kebutuhan bisnis Anda:

FAQ

Apa yang harus saya lakukan jika waktu tampilan tidak konsisten dengan waktu log asli setelah pengumpulan?

Secara default, field waktu (__time__) di SLS menggunakan waktu saat log tiba di server. Untuk menggunakan waktu dari log asli, tambahkan plug-in Time parsing ke konfigurasi pengumpulan.

Apakah saya akan dikenai biaya hanya karena membuat proyek dan logstore?

Saat Anda membuat logstore, SLS secara default mencadangkan resource shard. Hal ini dapat menimbulkan biaya sewa shard aktif. Untuk informasi lebih lanjut, lihat Mengapa saya dikenai biaya sewa shard aktif?

Bagaimana cara mengatasi kegagalan pengumpulan log?

Pengumpulan log menggunakan Logtail dapat gagal karena alasan seperti heartbeat Logtail abnormal, error pengumpulan, atau konfigurasi pengumpulan Logtail yang salah. Untuk informasi troubleshooting, lihat Troubleshoot Logtail log collection failures.

Mengapa saya bisa mengkueri log tetapi tidak bisa menganalisisnya?

Untuk menganalisis log, Anda harus mengonfigurasi indeks bidang untuk bidang yang relevan dan mengaktifkan fitur statistik. Periksa konfigurasi indeks logstore Anda.

Bagaimana cara menghentikan penagihan untuk SLS?

SLS tidak dapat dinonaktifkan setelah diaktifkan. Jika Anda tidak lagi menggunakan SLS, hentikan penagihan dengan menghapus semua proyek di bawah akun Anda.