全部产品
Search
文档中心

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

更新时间:Dec 11, 2025

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, menyiapkan notifikasi, serta membersihkan resource untuk menghindari biaya.

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 dari 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 tempelkan konten berikut ke dalam file. 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 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. Masuk ke Konsol Layanan Log Sederhana.

  2. Klik Create Project:

    • Wilayah: Pilih wilayah yang sama dengan instance ECS Anda. Ini memungkinkan Anda mengumpulkan log melalui jaringan internal Alibaba Cloud, yang mempercepat proses pengumpulan log.

    • Nama Proyek: Masukkan nama unik global dalam Alibaba Cloud, seperti 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, /var/log/nginx/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.

Lakukan 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 mengekstraksi 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 kesalahan (kode status HTTP ≥ 400), dan tingkat kesalahan 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 PV berdasarkan metode permintaan (GET, POST, dll.)

    Kelompokkan 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 tersebut 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 pemberitahuan ketika layanan mengalami anomali, seperti lonjakan jumlah error.

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

  2. Buat kebijakan tindakan:

    • Di 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, seperti SMS Message, konfigurasikan Recipient, dan pilih Alert Template.

    • Klik Confirm.

  3. Buat aturan peringatan:

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

    2. Masukkan nama aturan, seperti Terlalu banyak kesalahan server 5xx.

    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 untuk memicu peringatan kritisketika 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 menjadi 15 menit untuk menghindari notifikasi berulang yang berlebihan.

    6. Klik OK untuk menyimpan aturan peringatan.

  4. Verifikasi: Saat kondisi notifikasi terpenuhi, saluran notifikasi yang dikonfigurasi akan menerima peringatan. 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. Menguninstall LoongCollector (Opsional)

    1. Pada kode contoh, 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. Di kolom Aksi, klik Delete.

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

    4. Klik OK. Menghapus proyek juga akan 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 merekomendasikan Anda membaca dokumen berikut untuk lebih memahami konsep inti dan merencanakan sistem resource log berdasarkan kebutuhan bisnis Anda:

Tanya Jawab Umum

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

Secara default, bidang 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 dikenakan biaya hanya untuk membuat proyek dan penyimpanan log?

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 memecahkan masalah 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 mengeksekusi kueri log tetapi tidak bisa menganalisisnya?

Untuk menganalisis log, Anda harus mengonfigurasi indeks bidang untuk bidang terkait 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.