All Products
Search
Document Center

Simple Log Service:Gunakan GetLogs untuk mengkueri log

Last Updated:Apr 11, 2026

Setelah Anda mengumpulkan log, Anda dapat memanggil operasi GetLogs untuk mengkueri log yang telah dikumpulkan. Topik ini menyediakan contoh cara mengkueri log tersebut dengan memanggil operasi GetLogs.

Prasyarat

  • Buat RAM user dan berikan izin yang diperlukan. Untuk informasi selengkapnya, lihat Buat RAM user dan berikan izin.

  • Konfigurasikan variabel lingkungan ALIBABA_CLOUD_ACCESS_KEY_ID dan ALIBABA_CLOUD_ACCESS_KEY_SECRET. Untuk informasi selengkapnya, lihat Konfigurasikan variabel lingkungan di Linux, macOS, dan Windows.

    Penting
    • Pasangan AccessKey dari Akun Alibaba Cloud memiliki izin untuk mengakses semua operasi API. Kami menyarankan agar Anda menggunakan pasangan AccessKey milik RAM user untuk pemanggilan API dan operasi sehari-hari.

    • Untuk mencegah risiko keamanan, jangan hard-code ID AccessKey dan AccessKey Secret Anda ke dalam kode proyek. Menyimpan kredensial secara langsung dalam kode dapat membocorkannya, sehingga membahayakan keamanan seluruh sumber daya dalam akun Anda.

  • Instal Log Service SDK untuk Python. Untuk informasi selengkapnya, lihat Instal Log Service SDK untuk Python.

  • Log telah dikumpulkan. Untuk informasi selengkapnya, lihat Ikhtisar pengumpulan data.

  • Pelajari parameter operasi GetLogs. Untuk informasi selengkapnya, lihat GetLogs.

Catatan penggunaan

  • Topik ini menggunakan titik akhir publik untuk wilayah China (Hangzhou) sebagai contoh: https://cn-hangzhou.log.aliyuncs.com.

    Jika Anda mengakses Log Service dari layanan Alibaba Cloud lainnya yang berada dalam wilayah yang sama dengan Project Anda, gunakan titik akhir internal: https://cn-hangzhou-intranet.log.aliyuncs.com.

    Untuk daftar wilayah yang didukung beserta titik akhirnya, lihat Endpoints.

  • Anda dapat memanggil metode is_completed() pada objek respons dari kode SDK untuk menentukan apakah kueri tersebut presisi.

    • Jika metode is_completed() mengembalikan nilai true, hal ini menunjukkan bahwa kueri saat ini telah lengkap dan akurat, serta hasil kueri yang dikembalikan bersifat lengkap.

    • Jika metode is_completed() mengembalikan nilai false, hal ini menunjukkan bahwa kueri telah selesai tetapi hasilnya tidak presisi, artinya hasil kueri yang dikembalikan tidak lengkap. Anda perlu mengulangi permintaan untuk mendapatkan hasil kueri yang lengkap. Untuk informasi lebih lanjut tentang kueri tidak presisi, lihat Kemungkinan penyebab kueri tidak presisi.

Contoh log mentah

body_bytes_sent:1750
host:www.example.com
http_referer:www.example.com
http_user_agent:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_6; it-it) AppleWebKit/533.20.25 (KHTML, like Gecko) Version/5.0.4 Safari/533.20.27
http_x_forwarded_for:203.0.XX.XX
remote_addr:203.0.XX.XX
remote_user:p288
request_length:13741
request_method:GET
request_time:71
request_uri:/request/path-1/file-1
http_code:200
time_local:11/Aug/2021:06:52:27
upstream_response_time:0.66

Contoh

Kode Python berikut memberikan contoh cara mengkueri dan menganalisis log.

Penting

Dalam operasi GetLogs, Anda dapat menggunakan parameter query untuk mengatur pernyataan kueri dan analisis, sebagai berikut:

  • Jika parameter query hanya diatur ke pernyataan pencarian, parameter line berlaku dan digunakan untuk mengontrol jumlah log yang dikembalikan.

  • Jika parameter query diatur ke pernyataan kueri dan analisis, parameter line diabaikan. Gunakan sintaksis LIMIT untuk mengontrol jumlah baris yang dikembalikan. Untuk informasi selengkapnya, lihat klausul LIMIT.

Untuk informasi selengkapnya tentang pernyataan kueri, lihat Sintaks dasar.

Contoh 1: Kueri log menggunakan kata kunci

Gunakan pernyataan pencarian path-0/file-5 untuk mengkueri log. Berikut contohnya:

# encoding: utf-8
import time
import os
from aliyun.log import *

def main():
    # Titik akhir untuk Log Service. Untuk informasi selengkapnya, lihat Endpoints.
    # Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou). Ganti dengan titik akhir aktual Anda.
    endpoint = 'cn-hangzhou.log.aliyuncs.com'
    # Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

    # Nama Project dan Logstore.
    project = 'your-project-name'
    logstore = 'your-logstore-name'

    # Buat client Log Service.
    client = LogClient(endpoint, access_key_id, access_key)

    # Kueri log menggunakan kata kunci 'path-0/file-5'.
    query = 'path-0/file-5'

    # Parameter from_time dan to_time menentukan rentang waktu kueri dalam format stempel waktu UNIX.
    from_time = int(time.time()) - 3600
    to_time = time.time() + 3600

    print("ready to query logs from logstore %s" % logstore)

    # Pada contoh ini, parameter query menentukan pernyataan pencarian, dan parameter line membatasi hasil menjadi 3 entri log.
    request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
    response = client.get_logs(request)
    # Cetak hasil kueri.
    print('-------------Query is started.-------------')
    for log in response.get_logs():
        print(log.contents.items())
    print('-------------Query is finished.-------------')

if __name__ == '__main__':
    main()
            

Respons:

ready to query logs from logstore your-logstore-name
-------------Query is started.-------------
dict_items([ ('remote_user', 'nhf3g'), ('time_local', '14/Feb/2022:06:49:28'),  ('request_uri', '/request/path-0/file-5')...])
dict_items([ ('remote_user', 'ysu'), ('time_local', '14/Feb/2022:06:49:38'),  ('request_uri', '/request/path-0/file-5')...])
dict_items([ ('remote_user', 'l_k'), ('time_local', '14/Feb/2022:06:49:38'),  ('request_uri', '/request/path-0/file-5')...])
-------------Query is finished.-------------

Process finished with exit code 0

Contoh 2: Kueri log dengan menentukan bidang

Gunakan pernyataan pencarian request_method:POST untuk mengkueri log yang metode permintaannya adalah POST. Untuk membatasi jumlah entri log yang dikembalikan, atur line menjadi 3. Berikut contohnya:

# encoding: utf-8
import time
import os
from aliyun.log import *

def main():
    # Titik akhir untuk Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou).
    # Ganti nilainya dengan titik akhir aktual.
    endpoint = 'cn-hangzhou.log.aliyuncs.com'
    # Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

    # Nama Project dan Logstore.
    project = 'your-project-name'
    logstore = 'your-logstore-name'

    # Buat client Log Service.
    client = LogClient(endpoint, access_key_id, access_key)

    # Kueri log berdasarkan bidang tertentu.
    # Kueri log yang metode permintaannya adalah POST.
    query = 'request_method:POST'

    # Parameter from_time dan to_time menentukan rentang waktu kueri dalam format stempel waktu UNIX.
    from_time = int(time.time()) - 3600
    to_time = time.time() + 3600

    print("ready to query logs from logstore %s" % logstore)

    # Pada contoh ini, parameter query menentukan pernyataan pencarian, dan parameter line membatasi hasil menjadi 3 entri log.
    request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
    response = client.get_logs(request)
    # Cetak hasil kueri.
    print('-------------Query is started.-------------')
    for log in response.get_logs():
        print(log.contents.items())
    print('-------------Query is finished.-------------')

if __name__ == '__main__':
    main()
            

Respons:

ready to query logs from logstore your-logstore-name
-------------Query is started.-------------
dict_items([ ('remote_user', 'tv0m'), ('time_local', '14/Feb/2022:06:59:08'), ('request_method', 'POST')...])
dict_items([ ('remote_user', '6joc'), ('time_local', '14/Feb/2022:06:59:08'), ('request_method', 'POST')...])
dict_items([ ('remote_user', 'da8'), ('time_local', '14/Feb/2022:06:59:08'), ('request_method', 'POST')...])
-------------Query is finished.-------------

Process finished with exit code 0

Contoh 3: Analisis log menggunakan pernyataan SQL

Gunakan pernyataan kueri dan analisis request_method:POST|select COUNT(*) as pv untuk menghitung jumlah permintaan POST, seperti yang ditunjukkan pada contoh berikut:

# encoding: utf-8
import time
import os
from aliyun.log import *

def main():
    # Titik akhir untuk Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou).
    # Ganti nilainya dengan titik akhir aktual.
    endpoint = 'cn-hangzhou.log.aliyuncs.com'
    # Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

    # Nama Project dan Logstore.
    project = 'your-project-name'
    logstore = 'your-logstore-name'

    # Buat client Log Service.
    client = LogClient(endpoint, access_key_id, access_key)

    # Analisis log menggunakan pernyataan analisis.
    # Kueri log yang metode permintaannya adalah POST dan hitung jumlah tampilan halaman (PV).
    query = 'request_method:POST|select COUNT(*) as pv'

    # Parameter from_time dan to_time menentukan rentang waktu kueri dalam format stempel waktu UNIX.
    from_time = int(time.time()) - 3600
    to_time = time.time() + 3600

    print("ready to query logs from logstore %s" % logstore)

    # Pada contoh ini, parameter query menentukan pernyataan pencarian dan analisis. Parameter line diabaikan.
    # Jumlah hasil ditentukan oleh pernyataan analisis, yang mengembalikan satu baris.
    request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
    response = client.get_logs(request)
    # Cetak hasil kueri.
    print('-------------Query is started.-------------')
    for log in response.get_logs():
        print(log.contents.items())
    print('-------------Query is finished.-------------')

if __name__ == '__main__':
    main()
            

Respons:

ready to query logs from logstore nginx-moni
-------------Query is started.-------------
dict_items([('pv', '2918')])
-------------Query is finished.-------------

Process finished with exit code 0

Contoh 4: Analisis log menggunakan klausa GROUP BY

Gunakan pernyataan kueri dan analisis request_method:POST|select host, COUNT(*) as pv group by host order by pv desc limit 5 untuk menghitung jumlah permintaan POST, mengelompokkan hasil berdasarkan host, dan mengurutkan hasil berdasarkan PV secara menurun. Berikut contohnya:

# encoding: utf-8
import time
import os
from aliyun.log import *

def main():
    # Titik akhir untuk Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou).
    # Ganti nilainya dengan titik akhir aktual.
    endpoint = 'cn-hangzhou.log.aliyuncs.com'
    # Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

    # Nama Project dan Logstore.
    project = 'your-project-name'
    logstore = 'your-logstore-name'

    # Buat client Log Service.
    client = LogClient(endpoint, access_key_id, access_key)

    # Hitung permintaan POST, kelompokkan berdasarkan host, dan urutkan berdasarkan jumlah PV.
    # Klausa LIMIT dalam pernyataan analisis membatasi output menjadi 5 hasil.
    query = 'request_method:POST|select host, COUNT(*) as pv group by host order by pv desc limit 5'

    # Parameter from_time dan to_time menentukan rentang waktu kueri dalam format stempel waktu UNIX.
    from_time = int(time.time()) - 3600
    to_time = time.time() + 3600

    print("ready to query logs from logstore %s" % logstore)

    # Parameter query menentukan pernyataan pencarian dan analisis.
    # Parameter line dan reverse diabaikan. Jumlah dan urutan hasil ditentukan oleh pernyataan analisis.
    request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
    response = client.get_logs(request)
    # Cetak hasil kueri.
    print('-------------Query is started.-------------')
    for log in response.get_logs():
        print(log.contents.items())
    print('-------------Query is finished.-------------')

if __name__ == '__main__':
    main()
            

Respons:

ready to query logs from logstore nginx-moni
-------------Query is started.-------------
dict_items([('host', 'www.example.com'), ('pv', '7')])
dict_items([('host', 'www.example.org'), ('pv', '6')])
dict_items([('host', 'www.example.net'), ('pv', '6')])
dict_items([('host', 'www.example.edu'), ('pv', '5')])
dict_items([('host', 'www.aliyundoc.com'), ('pv', '4')])
-------------Query is finished.-------------

Process finished with exit code 0

Contoh 5: Menulis bidang tertentu dari log yang diperoleh ke file lokal

Gunakan pernyataan pencarian path-0/file-5 untuk mengkueri log, lalu tulis nilai bidang tertentu dari hasil ke file lokal bernama log.txt. Kode berikut menunjukkan contohnya:

# encoding: utf-8
import time
import os
from aliyun.log import *

def main():
    # Titik akhir untuk Log Service. Contoh ini menggunakan titik akhir untuk wilayah China (Hangzhou).
    # Ganti nilainya dengan titik akhir aktual.
    endpoint = 'cn-hangzhou.log.aliyuncs.com'
    # Contoh ini mengambil ID AccessKey dan AccessKey Secret dari variabel lingkungan.
    access_key_id = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID', '')
    access_key = os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET', '')

    # Nama Project dan Logstore.
    project = 'your-project-name'
    logstore = 'your-logstore-name'

    # Buat client Log Service.
    client = LogClient(endpoint, access_key_id, access_key)

    # Kueri log menggunakan kata kunci 'path-0/file-5'.
    query = 'path-0/file-5'

    # Parameter from_time dan to_time menentukan rentang waktu kueri dalam format stempel waktu UNIX.
    from_time = int(time.time()) - 3600
    to_time = time.time() + 3600

    print("ready to query logs from logstore %s" % logstore)

    # Pada contoh ini, parameter query menentukan pernyataan pencarian, dan parameter line membatasi hasil menjadi 3 entri log.
    request = GetLogsRequest(project, logstore, from_time, to_time, '', query=query, line=3, offset=0, reverse=False)
    response = client.get_logs(request)
    # Cetak hasil kueri.
    print('-------------Query is started.-------------')
    for log in response.get_logs():
        print(log.contents.items())
    print('-------------Query is finished.-------------')
    
    # Ekstrak nilai kunci 'remote_user' dari setiap log dan simpan ke file lokal.
    print('-------------Start writing logs to a local file.-------------')
    for loglocal in response.get_logs():
        filename = 'log.txt'
        with open(filename, mode='a') as fileobject:
            fileobject.write(loglocal.contents.get('remote_user')+'\n')
    print('-------------Finished writing logs to the local file.-------------')

if __name__ == '__main__':
    main()            

Respons:

ready to query logs from logstore your-logstore-name
-------------Query is started.-------------
dict_items([ ('remote_user', 'nhf3g'), ('time_local', '14/Feb/2022:06:49:28'),  ('request_uri', '/request/path-0/file-5')...])
dict_items([ ('remote_user', 'ysu'), ('time_local', '14/Feb/2022:06:49:38'),  ('request_uri', '/request/path-0/file-5')...])
dict_items([ ('remote_user', 'l_k'), ('time_local', '14/Feb/2022:06:49:38'),  ('request_uri', '/request/path-0/file-5')...])
-------------Query is finished.-------------
-------------Start writing logs to a local file.-------------
-------------Finished writing logs to the local file.-------------

Process finished with exit code 0

Contoh berikut menunjukkan isi file log.txt yang dihasilkan di direktori file GetLogsTest.py:

nhf3g
ysu
l_k

Referensi