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
Simple Log Service telah diaktifkan.
Simple Log Service SDK untuk Go telah diinisialisasi. Untuk informasi lebih lanjut, lihat Inisialisasi Simple Log Service SDK untuk Go.
Prosedur
1. Buat sebuah proyek
2. Buat sebuah Logstore
3. Buat indeks
4. Tulis log ke Logstore
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
======
......