All Products
Search
Document Center

:Gunakan Aliyun Log Go Producer untuk menulis log ke Simple Log Service

Last Updated:Jul 02, 2025

Jika Anda ingin memampatkan log dan mengunggah log terkompresi ke Simple Log Service guna mengurangi penggunaan sumber daya transmisi jaringan saat menggunakan mesin komputasi big data seperti Flink, Spark, dan Storm, API Simple Log Service dan SDK Simple Log Service tidak direkomendasikan karena tidak dapat memenuhi persyaratan penulisan data dalam skenario big data. Dalam kasus ini, Anda dapat menggunakan Aliyun Log Go Producer untuk mengunggah log ke Simple Log Service secara efisien.

Prasyarat

Catatan penggunaan

Dalam contoh ini, endpoint publik untuk wilayah Singapura digunakan: ap-southeast-1.log.aliyuncs.com.

Jika Anda ingin mengakses Simple Log Service dengan menggunakan layanan Alibaba Cloud lainnya yang berada di wilayah yang sama dengan proyek Anda, Anda dapat menggunakan endpoint privat: ap-southeast-1-intranet.log.aliyuncs.com.

Untuk informasi lebih lanjut tentang pemetaan antara endpoint dan wilayah yang didukung oleh Simple Log Service, lihat Endpoint.

Pengenalan Aliyun Log Go Producer

Aliyun Log Go Producer adalah pustaka kelas berperforma tinggi yang disediakan untuk aplikasi Go yang berjalan dalam skenario big data dan konkurensi tinggi. Dibandingkan dengan API Simple Log Service dan SDK Simple Log Service, Aliyun Log Go Producer memberikan beberapa manfaat terkait penulisan log, seperti performa tinggi, isolasi logika antara komputasi dan I/O, serta manajemen sumber daya. Aliyun Log Go Producer menggunakan fitur penulisan berurutan yang disediakan oleh Simple Log Service untuk memastikan urutan unggah log.

Gambar berikut menunjukkan alur kerja Aliyun Log Go Producer:

Batasan

  • Mekanisme dasar Aliyun Log Go Producer memanggil operasi PutLogs untuk mengunggah log. Ukuran log mentah yang dapat diunggah setiap kali dibatasi. Untuk informasi lebih lanjut, lihat Baca dan Tulis Data.

  • Sumber daya dasar Simple Log Service, seperti proyek, logstore, shard, dan grup mesin, juga memiliki batasan. Untuk informasi lebih lanjut, lihat Sumber Daya Dasar.

  • Pertama kali Anda menjalankan kode, Anda harus mengaktifkan fitur pengindeksan untuk logstore Anda di konsol Simple Log Service. Kemudian, tunggu sekitar satu menit sebelum melakukan query log.

  • Jika Anda melakukan query log di konsol Simple Log Service dan panjang nilai suatu bidang dalam log yang dikembalikan melebihi batas atas, nilai bidang tersebut akan dipotong, dan bagian yang berlebih tidak akan digunakan untuk analisis. Untuk informasi lebih lanjut, lihat Buat Indeks.

1. Konfigurasikan struktur data ProducerConfig

producerConfig := producer.GetDefaultProducerConfig()
producerConfig.Endpoint = "cn-hangzhou.log.aliyuncs.com"
provider := sls.NewStaticCredentialsProvider(os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"), "")
producerConfig.CredentialsProvider = provider

Anda dapat menggunakan struktur data ProducerConfig untuk mengonfigurasi kebijakan pengiriman. Anda dapat mengonfigurasi parameter untuk kebijakan pengiriman berdasarkan skenario. Tabel berikut menjelaskan parameter-parameter tersebut.

Parameter

Tipe

Deskripsi

TotalSizeLnBytes

Int64

Ukuran maksimum log yang dapat di-cache oleh instance produser. Nilai default: 100 MB.

MaxIoWorkerCount

Int64

Jumlah maksimum goroutine yang dapat berjalan secara bersamaan oleh instance produser. Default: 50. Anda dapat mengonfigurasi parameter ini berdasarkan performa server Anda.

MaxBlockSec

Int

Waktu blokir maksimum saat metode pengiriman dipanggil tetapi ruang yang tersedia pada instance produser tidak mencukupi. Nilai default: 60 detik.

Jika waktu blokir maksimum yang Anda tentukan berakhir dan ruang yang tersedia pada instance produser masih tidak mencukupi, metode pengiriman akan melempar kesalahan TimeoutException. Jika Anda mengatur parameter ini ke 0 dan ruang yang tersedia pada instance produser tidak mencukupi, metode pengiriman segera melempar kesalahan TimeoutException. Jika Anda ingin memblokir metode pengiriman hingga ruang yang tersedia pada instance produser mencukupi, Anda harus mengatur parameter ini ke nilai negatif.

MaxBatchSize

Int64

Ukuran maksimum log yang dapat di-cache dalam koleksi ProducerBatch. Jika ukuran log dalam koleksi ProducerBatch lebih besar atau sama dengan nilai parameter ini, log dikirimkan ke Simple Log Service. Nilai default: 512 KB. Nilai maksimum: 5 MB.

MaxBatchCount

Int

Jumlah maksimum log yang dapat di-cache dalam koleksi ProducerBatch. Jika jumlah log dalam koleksi ProducerBatch lebih besar atau sama dengan nilai parameter ini, log dikirimkan ke Simple Log Service. Nilai default: 4096. Nilai maksimum: 40960.

LingerMs

Int64

Durasi dari waktu pembuatan koleksi ProducerBatch hingga waktu pengiriman log dalam koleksi ProducerBatch ke Simple Log Service. Nilai default: 2 detik. Nilai minimum: 100 milidetik.

Retries

Int

Jumlah percobaan ulang pengiriman log dalam koleksi ProducerBatch setelah kegagalan pengiriman pertama kali. Nilai default: 10.

Jika nilai parameter ini kurang dari atau sama dengan 0, log dalam koleksi ProducerBatch masuk ke antrian gagal setelah kegagalan pengiriman pertama kali.

MaxReservedAttempts

Int

Jumlah maksimum percobaan yang dapat dikembalikan. Jumlah percobaan pengiriman log dalam koleksi ProducerBatch dicatat. Secara default, hanya 11 percobaan terbaru yang dikembalikan.

Nilai yang lebih besar memungkinkan Anda melacak lebih banyak detail. Namun, lebih banyak sumber daya memori digunakan.

BaseRetryBackoffMs

Int64

Waktu backoff untuk percobaan ulang pertama. Nilai default: 100 milidetik. Instance produser menggunakan algoritma backoff eksponensial. Waktu backoff untuk percobaan ulang ke-N dihitung berdasarkan rumus berikut: Nilai parameter BaseRetryBackoffMs × 2^(N - 1).

MaxRetryBackoffMs

Int64

Waktu backoff maksimum untuk percobaan ulang. Nilai default: 50 detik.

AdjustShardHash

Bool

Menentukan apakah akan memodifikasi parameter shardHash jika Anda mengonfigurasi parameter shardHash saat memanggil metode pengiriman. Nilai default: true.

Buckets

Int

Jumlah bucket tempat data dikelompokkan. Parameter ini berlaku hanya jika Anda mengatur parameter AdjustShardHash ke true. Jika parameter ini berlaku, instance produser Anda secara otomatis mengelompokkan data ke dalam bucket berdasarkan nilai parameter shardHash.

Jika dua entri data memiliki nilai berbeda untuk parameter shardHash, entri data tersebut tidak dapat dikelompokkan ke dalam bucket yang sama untuk pengunggahan data. Ini mengurangi throughput instance produser. Setelah instance produser mengelompokkan data, sistem lebih mungkin mengunggah data yang dikelompokkan ke Simple Log Service dalam batch. Nilai valid: [1, 256]. Nilai parameter ini harus merupakan pangkat bilangan bulat dari 2. Nilai default: 64.

CredentialsProvider

Interface

Antarmuka yang dapat Anda panggil untuk mendapatkan ID AccessKey, rahasia AccessKey, dan token Layanan Keamanan (STS) secara dinamis. Anda dapat mengonfigurasi parameter ini berdasarkan kebutuhan bisnis Anda. Antarmuka ini diharapkan menyimpan pasangan AccessKey yang dikembalikan dan memastikan keamanan thread.

NoRetryStatusCodeList

[ ]int

Kode kesalahan yang dikembalikan untuk permintaan yang tidak perlu diulang. Jika log gagal diunggah ke Simple Log Service dan kode kesalahan tertentu dikembalikan untuk permintaan tersebut, permintaan tidak diulang. Nilai default: 400 dan 404.

UpdateStsToken

Func

Fungsi yang memungkinkan Aliyun Log Go Producer memperbarui token STS secara otomatis dan menambahkan token tersebut ke instance produser Anda.

StsTokenShutDown

channel

Saluran komunikasi yang memungkinkan Anda menonaktifkan pembaruan otomatis token STS. Jika Anda menonaktifkan saluran komunikasi, token STS tidak diperbarui secara otomatis. Jika instance produser Anda dimatikan dan nilai parameter ini bukan nil, instance produser memanggil metode close untuk menonaktifkan saluran komunikasi. Dengan cara ini, pembaruan otomatis dinonaktifkan.

Region

String

Wilayah tempat Simple Log Service diterapkan. Parameter ini diperlukan jika Anda mengatur parameter AuthVersion ke AuthV4. Contoh: cn-hangzhou.

AuthVersion

String

Versi penandatanganan. Nilai valid: AuthV1 dan AuthV4. Untuk informasi lebih lanjut tentang contoh penandatanganan AuthV4, lihat producer_test.go.

UseMetricStoreURL

bool

URL Metricstore yang ingin Anda gunakan. Anda dapat menggunakan URL untuk mengirimkan log ke Simple Log Service. Ini meningkatkan kinerja query dalam skenario di mana ada sejumlah besar deret waktu.

2. Mulai instance produser

Saat Anda memanggil fungsi producerInstance.Start(), sebuah goroutine dimulai untuk memantau apakah log ditulis ke instance produser Anda dan apakah ada grup log yang memenuhi kondisi pengiriman. Jika ya, goroutine mengirimkan grup log yang cocok ke Logstore Simple Log Service yang Anda tentukan.

producerInstance, err := producer.NewProducer(producerConfig)
if err != nil {
  panic(err)
}
ch := make(chan os.Signal)
signal.Notify(ch, os.Kill, os.Interrupt)
producerInstance.Start()

3. Panggil metode pengiriman untuk mengirimkan log ke Simple Log Service

Dalam contoh ini, metode HashSendLogListWithCallBack dipanggil untuk mengirimkan log. Tabel berikut menjelaskan parameter terkait.

Parameter

Wajib

Deskripsi

project

Ya

Proyek.

logStore

Ya

Logstore.

shardHash

Tidak

Nilai hash untuk log yang ingin Anda kirimkan. Anda dapat menentukan nilai hash berdasarkan kebutuhan bisnis Anda. Setelah Anda menentukan nilai hash, log ditulis ke shard tertentu dalam Logstore yang ditentukan berdasarkan nilai hash.

Catatan

Jika Anda tidak mengonfigurasi parameter ini, log secara acak ditulis ke shard dalam Logstore yang ditentukan.

topic

Tidak

Topik log.

Catatan

Jika Anda tidak mengonfigurasi parameter ini, tanda kutip ganda ("") secara otomatis digunakan.

source

Tidak

Sumber log.

Catatan

Jika Anda tidak mengonfigurasi parameter ini, alamat IP host tempat instance produser berada secara otomatis digunakan.

logs

Ya

Log yang ingin Anda kirimkan ke Logstore.

callback

Tidak

Fungsi callback. Fungsi ini dipanggil saat log dikirimkan ke Simple Log Service atau saat log gagal dikirimkan setelah beberapa kali percobaan ulang dan dibuang.

Catatan

Anda dapat memanggil metode producer.GenerateLog() untuk membuat log yang dikirimkan ke Logstore dengan cara yang sederhana. Namun, proses pembuatan tersebut tidak efisien. Kami merekomendasikan Anda memanggil operasi sls.Log untuk membuat log. Contoh:

	var m sync.WaitGroup
	callBack := &Callback{}
	logs := []*sls.Log{}
	content := []*sls.LogContent{}
	for colIdx := 0; colIdx < 10; colIdx++ {
		if colIdx/2 == 0 {
			content = append(content, &sls.LogContent{
				Key:   tea.String("request_method"),
				Value: tea.String("GET"),
			}, &sls.LogContent{
				Key:   tea.String("status"),
				Value: tea.String("200"),
			})
		} else if colIdx/3 == 0 {
			content = append(content, &sls.LogContent{
				Key:   tea.String("request_method"),
				Value: tea.String("POST"),
			}, &sls.LogContent{
				Key:   tea.String("status"),
				Value: tea.String("500"),
			})
		} else {
			content = append(content, &sls.LogContent{
				Key:   tea.String("request_method"),
				Value: tea.String("POST"),
			}, &sls.LogContent{
				Key:   tea.String("status"),
				Value: tea.String("200"),
			})
		}
	}
	log := &sls.Log{
		Time:     proto.Uint32(uint32(time.Now().Unix())),
		Contents: content,
	}
	logs = append(logs, log)
	shardHash := ""
	for i := 0; i < 10; i++ {
		m.Add(1)
		go func() {
			defer m.Done()
			for i := 0; i < 1000; i++ {
				// GenerateLog adalah fungsi produser untuk menghasilkan log format SLS
				// GenerateLog memiliki performa rendah, dan antarmuka Log asli adalah pilihan terbaik untuk performa tinggi.
				err := producerInstance.HashSendLogListWithCallBack("gs-log-test", "gstest", shardHash, "topic", "127.0.X.1", logs, callBack)
				if err != nil {
					fmt.Println(err)
				}
			}
		}()
	}
	fmt.Println("Pengiriman selesai")

4. Matikan instance produser

Dua mode shutdown didukung: shutdown terbatas dan shutdown aman.

  • Shutdown aman: Dalam mode ini, instance produser dimatikan setelah semua data yang di-cache dalam instance produser dikirimkan ke Simple Log Service.

  • Shutdown terbatas: Dalam mode ini, instance produser menerima nilai parameter yang diberikan dalam detik. Setelah instance produser menerima nilai parameter, hitungan mundur dimulai. Jika nilai yang ditentukan tercapai dan instance produser belum sepenuhnya dimatikan, instance produser dipaksa keluar. Dalam hal ini, beberapa data mungkin tidak dikirimkan dan kemudian hilang.

producerInstance.Close(60) // Shutdown terbatas. Anda harus menentukan bilangan bulat positif untuk parameter ini. Unit: detik.
producerInstance.SafeClose()// Shutdown aman.

Referensi

  • Jika respons yang dikembalikan oleh Simple Log Service berisi informasi kesalahan setelah Anda memanggil operasi API, pemanggilan gagal. Anda dapat memperbaiki kesalahan berdasarkan deskripsi kode kesalahan operasi API terkait. Untuk informasi lebih lanjut, lihat Kode Kesalahan.

  • Untuk informasi lebih lanjut tentang contoh kode, lihat Aliyun Log Go Producer di Github.