全部产品
Search
文档中心

Simple Log Service:Memulai dengan Simple Log Service SDK untuk Go

更新时间:Jul 06, 2025

Topik ini menjelaskan cara memulai menggunakan Simple Log Service SDK untuk Go dan melakukan operasi umum, seperti membuat proyek, membuat penyimpanan log, menulis log, serta menanyakan log.

Prasyarat

Prosedur

1. Buat sebuah proyek

Parameter

Tipe

Diperlukan

Deskripsi

Contoh

deskripsi

string

Ya

Deskripsi dari proyek.

ini adalah tes

projectName

string

Ya

Nama harus unik dalam suatu wilayah. Anda tidak dapat mengubah nama setelah proyek dibuat. Nama harus memenuhi persyaratan berikut:

  • Nama hanya boleh berisi huruf kecil, angka, dan tanda hubung (-).

  • Nama harus dimulai dan diakhiri dengan huruf kecil atau angka.

  • Nama harus memiliki panjang antara 3 hingga 63 karakter.

test-project


	// Membuat sebuah proyek.
	ProjectName := "aliyun-test-project"
	Description := "tes"
	project, err := client.CreateProject(ProjectName, Description)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "ProjectAlreadyExist" {
			log.Printf("Proyek : %s sudah dibuat atau terjadi konflik nama global dalam lingkup Aliyun", ProjectName)
		} else {
			log.Fatalf("Membuat proyek : %s gagal %v", ProjectName, err)
			os.Exit(1)
		}
	} else {
		log.Printf("Proyek : %s berhasil dibuat", project.Name)
		time.Sleep(60 * time.Second)
	}

2. Buat sebuah Logstore

Parameter

Tipe

Diperlukan

Deskripsi

Contoh

proyek

string

Ya

Nama dari proyek.

ali-test-project

logstoreName

string

Ya

Nama dari Logstore. Nama harus memenuhi persyaratan berikut:

  • Nama harus unik dalam sebuah proyek.

  • Nama hanya boleh berisi huruf kecil, angka, tanda hubung (-), dan garis bawah (_).

  • Nama harus dimulai dan diakhiri dengan huruf kecil atau angka.

  • Nama harus memiliki panjang antara 3 hingga 63 karakter.

my-logstore

shardCount

int

Ya

Jumlah shard.

2

ttl

int

Ya

Masa retensi data. Satuan: hari. Nilai valid: 1 hingga 3650. Jika Anda menetapkan parameter ini ke 3650, data akan disimpan secara permanen.

1

autoSplit

bool

Tidak

Menentukan apakah akan mengaktifkan sharding otomatis. Nilai valid:

  • true

  • false

true

maxSplitShard

int

Tidak

Jumlah maksimum shard yang bisa dipecah secara otomatis. Nilai valid: 1 hingga 256.

Catatan

Jika Anda menetapkan parameter autoSplit ke true, Anda harus mengonfigurasi parameter maxSplitShard.

64

// Membuat sebuah Logstore.
	LogStoreName := "aliyun-test-logstore"
	var ttl, shardCnt, maxSplitShard int = 3, 2, 64
	var autoSplit bool = true
	err = client.CreateLogStore(ProjectName, LogStoreName, ttl, shardCnt, autoSplit, maxSplitShard)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "LogStoreAlreadyExist" {
			log.Printf("Logstore : %s sudah dibuat", LogStoreName)
		} else {
			log.Fatalf("Membuat LogStore : %s gagal %v", LogStoreName, err)
			os.Exit(1)
		}
	} else {
		log.Printf("Membuat logstore : %v berhasil", LogStoreName)
		time.Sleep(10 * time.Second)
	}

3. Buat indeks

// Membuat indeks untuk Logstore.
	index := sls.Index{
		// Pengindeksan bidang.
		Keys: map[string]sls.IndexKey{
			"col_0": {
				Token:         []string{" "},
				CaseSensitive: false,
				Type:          "long",
			},
			"col_1": {
				Token:         []string{",", ":", " "},
				CaseSensitive: false,
				Type:          "text",
			},
		},
		// Pengindeksan teks penuh.
		Line: &sls.IndexLine{
			Token:         []string{",", ":", " "},
			CaseSensitive: false,
			IncludeKeys:   []string{},
			ExcludeKeys:   []string{},
		},
	}
	err = client.CreateIndex(ProjectName, LogStoreName, index)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "IndexAlreadyExist" {
			log.Printf("Indeks : sudah dibuat")
		} else {
			log.Fatalf("Membuat Indeks gagal %v", err)
			os.Exit(1)
		}
	} else {
		log.Println("MembuatIndeks berhasil")
		time.Sleep(60 * time.Second)
	}

4. Tulis log ke Logstore

Parameter

Tipe

Diperlukan

Deskripsi

proyek

string

Ya

Proyek.

logstore

string

Ya

Logstore.

topik

string

Tidak

Topik dari log.

Catatan

Jika Anda meninggalkan parameter ini kosong, tanda kutip ganda ("") akan digunakan secara otomatis.

sumber

string

Tidak

Sumber.

Catatan

Jika Anda meninggalkan parameter ini kosong, alamat IP dari host tempat produsen berada akan digunakan secara otomatis.

konten

Slice

Ya

Log yang ingin Anda tulis ke Logstore. Tulis log dalam format LogItem.

// Menulis log ke Logstore.
	for loggroupIdx := 0; loggroupIdx < 10; loggroupIdx++ {
		logs := []*sls.Log{}
		for logIdx := 0; logIdx < 100; logIdx++ {
			content := []*sls.LogContent{}
			for colIdx := 0; colIdx < 10; colIdx++ {
				if colIdx == 0 {
					content = append(content, &sls.LogContent{
						Key:   proto.String(fmt.Sprintf("col_%d", colIdx)),
						Value: proto.String(fmt.Sprintf("%d", rand.Intn(10000000))),
					})
				} else {
					content = append(content, &sls.LogContent{
						Key:   proto.String(fmt.Sprintf("col_%d", colIdx)),
						Value: proto.String(fmt.Sprintf("loggroup idx: %d, log idx: %d, col idx: %d, value: %d", loggroupIdx, logIdx, colIdx, rand.Intn(10000000))),
					})
				}
			}
			log := &sls.Log{
				Time:     proto.Uint32(uint32(time.Now().Unix())),
				Contents: content,
			}
			logs = append(logs, log)
		}
		loggroup := &sls.LogGroup{
			Topic:  proto.String("tes"),
			Source: proto.String("203.0.x.x"),
			Logs:   logs,
		}

		err = client.PutLogs(ProjectName, LogStoreName, loggroup)
		if err != nil {
			log.Fatalf("PutLogs gagal %v", err)
			os.Exit(1)
		}
		log.Println("PutLogs berhasil")
		time.Sleep(time.Second)
	}

Kode Contoh

Pada contoh ini, file bernama SLSQuickStart.go dibuat. Kode dalam file ini memberikan contoh cara memanggil API untuk membuat proyek, membuat Logstore, membuat indeks, menulis log, dan menanyakan log. Contoh:

package main

import (
	"fmt"
	"log"
	"math/rand"
	"os"
	"time"

	sls "github.com/aliyun/aliyun-log-go-sdk"
	"github.com/gogo/protobuf/proto"
)

func main() {
	// Titik akhir Simple Log Service. Pada contoh ini, titik akhir Simple Log Service untuk wilayah China (Hangzhou) digunakan. Ganti nilai parameter dengan titik akhir sebenarnya.
	Endpoint := "cn-hangzhou.log.aliyuncs.com"

	// Pada contoh ini, ID AccessKey dan Rahasia AccessKey diperoleh dari variabel lingkungan.
	AccessKeyId := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_ID")
	AccessKeySecret := os.Getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET")
	// Token STS dari pengguna RAM. Jika Anda meninggalkan parameter ini kosong, token STS tidak digunakan.
	SecurityToken := ""
	// Buat klien Simple Log Service.
	provider := sls.NewStaticCredentialsProvider(AccessKeyId, AccessKeySecret, SecurityToken)
	client := sls.CreateNormalInterfaceV2(Endpoint, provider)

	// Buat proyek.
	ProjectName := "aliyun-test-project"
	Description := "tes"
	project, err := client.CreateProject(ProjectName, Description)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "ProjectAlreadyExist" {
			log.Printf("Proyek : %s sudah dibuat atau terjadi konflik nama global dalam lingkup Aliyun", ProjectName)
		} else {
			log.Fatalf("Membuat proyek : %s gagal %v", ProjectName, err)
			os.Exit(1)
		}
	} else {
		log.Printf("Proyek : %s berhasil dibuat", project.Name)
		time.Sleep(60 * time.Second)
	}

	// Buat Logstore.
	LogStoreName := "aliyun-test-logstore"
	err = client.CreateLogStore(ProjectName, LogStoreName, 3, 2, true, 6)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "LogStoreAlreadyExist" {
			log.Printf("Logstore : %s sudah dibuat", LogStoreName)
		} else {
			log.Fatalf("Membuat LogStore : %s gagal %v", LogStoreName, err)
			os.Exit(1)
		}
	} else {
		log.Printf("Membuat logstore : %v berhasil", LogStoreName)
		time.Sleep(10 * time.Second)
	}

	// Buat indeks untuk Logstore.
	index := sls.Index{
		// Pengindeksan bidang.
		Keys: map[string]sls.IndexKey{
			"col_0": {
				Token:         []string{" "},
				CaseSensitive: false,
				Type:          "long",
			},
			"col_1": {
				Token:         []string{",", ":", " "},
				CaseSensitive: false,
				Type:          "text",
			},
		},
		// Pengindeksan teks penuh.
		Line: &sls.IndexLine{
			Token:         []string{",", ":", " "},
			CaseSensitive: false,
			IncludeKeys:   []string{},
			ExcludeKeys:   []string{},
		},
	}
	err = client.CreateIndex(ProjectName, LogStoreName, index)
	if err != nil {
		if e, ok := err.(*sls.Error); ok && e.Code == "IndexAlreadyExist" {
			log.Printf("Indeks : sudah dibuat")
		} else {
			log.Fatalf("Membuat Indeks gagal %v", err)
			os.Exit(1)
		}
	} else {
		log.Println("MembuatIndeks berhasil")
		time.Sleep(60 * time.Second)
	}

	// Tulis log ke Logstore.
	for loggroupIdx := 0; loggroupIdx < 10; loggroupIdx++ {
		logs := []*sls.Log{}
		for logIdx := 0; logIdx < 100; logIdx++ {
			content := []*sls.LogContent{}
			for colIdx := 0; colIdx < 10; colIdx++ {
				if colIdx == 0 {
					content = append(content, &sls.LogContent{
						Key:   proto.String(fmt.Sprintf("col_%d", colIdx)),
						Value: proto.String(fmt.Sprintf("%d", rand.Intn(10000000))),
					})
				} else {
					content = append(content, &sls.LogContent{
						Key:   proto.String(fmt.Sprintf("col_%d", colIdx)),
						Value: proto.String(fmt.Sprintf("loggroup idx: %d, log idx: %d, col idx: %d, value: %d", loggroupIdx, logIdx, colIdx, rand.Intn(10000000))),
					})
				}
			}
			log := &sls.Log{
				Time:     proto.Uint32(uint32(time.Now().Unix())),
				Contents: content,
			}
			logs = append(logs, log)
		}
		loggroup := &sls.LogGroup{
			Topic:  proto.String("tes"),
			Source: proto.String("203.0.113.10"),
			Logs:   logs,
		}

		err = client.PutLogs(ProjectName, LogStoreName, loggroup)
		if err != nil {
			log.Fatalf("PutLogs gagal %v", err)
			os.Exit(1)
		}
		log.Println("PutLogs berhasil")
		time.Sleep(time.Second)
	}

	// Jalankan pernyataan SQL untuk menanyakan log.
	// Jika pernyataan pencarian hanya mencakup pernyataan pencarian, nilai parameter line, offset, dan reverse berlaku. Parameter line menentukan jumlah maksimum log yang dapat dikembalikan. Nilai maksimum: 100. Parameter offset menentukan posisi awal log yang dikembalikan. Untuk paginasi log, Anda dapat mengonfigurasi parameter line dan offset.
	// Sebagai contoh, Anda dapat menetapkan parameter line ke 100 dan parameter offset ke 0 untuk pernyataan pencarian pertama, dan menetapkan parameter line ke 100 dan parameter offset ke 100 untuk pernyataan pencarian kedua.
	// Jika pernyataan pencarian mencakup pernyataan analitik, nilai parameter line, offset, dan reverse tidak berlaku. Jumlah log yang dikembalikan ditentukan oleh klausa LIMIT, OFFSET, dan ORDER BY. Kami merekomendasikan agar Anda menetapkan nilai parameter line, offset, dan reverse ke 0, 0, dan false, masing-masing. Jika Anda menentukan nilai lain untuk parameter tersebut, kesalahan akan dilaporkan.
	// Untuk informasi lebih lanjut, lihat Pencarian Paginasi.
	response, err := client.GetLogs(ProjectName, LogStoreName, "tes", time.Now().Unix()-1800, time.Now().Unix(), "* and col_0 > 9000000", 100, 1, true)
	if err != nil {
		log.Fatalf("GetLogs gagal %v", err)
		os.Exit(1)
	}
	log.Printf("Dapatkan %d log", response.Count)
	logs := response.Logs
	for i := range logs {
		for k, v := range logs[i] {
			log.Printf("key: %s, value: %s", k, v)
		}
		log.Println("======")
	}
}

Untuk informasi lebih lanjut tentang kode contoh, lihat Alibaba Cloud Simple Log Service SDK untuk Go.

Respon

Berikut adalah respon yang dikembalikan untuk contoh sebelumnya:

Proyek : aliyun-test-project berhasil dibuat.
Membuat logstore : aliyun-test-logstore berhasil.
MembuatIndeks berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
PutLogs berhasil
Dapatkan 61 log
key: source, value: 203.0.113.10
key: time, value: 1627282116
key: col_0, value: 9886757
key: col_1, value: loggroup idx: 6, log idx: 87, col idx: 1, value: 2673724
key: col_2, value: loggroup idx: 6, log idx: 87, col idx: 2, value: 5822012
key: col_8, value: loggroup idx: 6, log idx: 87, col idx: 8, value: 3996746
key: topik, value: tes
key: col_9, value: loggroup idx: 6, log idx: 87, col idx: 9, value: 7646111
key: col_3, value: loggroup idx: 6, log idx: 87, col idx: 3, value: 8872632
key: col_4, value: loggroup idx: 6, log idx: 87, col idx: 4, value: 1839836
key: col_5, value: loggroup idx: 6, log idx: 87, col idx: 5, value: 6967415
key: col_6, value: loggroup idx: 6, log idx: 87, col idx: 6, value: 5872057
key: col_7, value: loggroup idx: 6, log idx: 87, col idx: 7, value: 3227909
======
......