Trong hướng dẫn này, bạn sẽ học cách kết nối với cơ sở dữ liệu Redis Upstash bằng client go-redis và giám sát hiệu suất ứng dụng bằng theo dõi phân tán.
Go-redis là gì?
Go-redis là một client Redis phổ biến cho Golang. Mặc định, nó hỗ trợ Redis Server, Sentinel và Cluster.
Để kết nối với cơ sở dữ liệu Redis Upstash, hãy sử dụng mã sau:
package main
import (
"context"
"fmt"
"github.com/go-redis/redis/v8"
)
func main() {
ctx := context.Background()
opt, _ := redis.ParseURL("<connection-string-from-Upstash>")
client := redis.NewClient(opt)
if err := client.Set(ctx, "foo", "bar", 0); err != nil {
panic(err)
}
fmt.Println(client.Get(ctx, "foo").Result())
}Để thực thi các lệnh tùy ý, bạn cũng có thể sử dụng API thay thế:
val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {
if err == redis.Nil {
fmt.Println("key does not exists")
return
}
panic(err)
}Bạn có thể dùng go-redis để lưu cache dữ liệu hoặc giới hạn tỷ lệ yêu cầu API. Để tìm hiểu thêm về client, xem tài liệu Redis Golang.
Theo dõi phân tán là gì?
Theo dõi phân tán cho phép quan sát các yêu cầu khi chúng lan truyền qua các hệ thống phân tán, đặc biệt là những hệ thống được xây dựng bằng kiến trúc microservice.
Tracing cho phép theo dõi các yêu cầu khi chúng di chuyển qua các hệ thống phân tán. Bạn nhận được ngữ cảnh đầy đủ về cái gì khác biệt, cái gì bị hỏng, và nhật ký & lỗi nào liên quan.

OpenTelemetry là gì?
OpenTelemetry là một tiêu chuẩn trung lập nhà cung cấp cho phép bạn thu thập và xuất traces, logs và metrics.
Otel cho phép các nhà phát triển thu thập và xuất dữ liệu telemetry theo cách độc lập với nhà cung cấp. Với OpenTelemetry, bạn có thể instrument ứng dụng một lần sau đó thêm hoặc thay đổi nhà cung cấp mà không thay đổi instrumentation, ví dụ đây là danh sách các lựa chọn thay thế DataDog phổ biến hỗ trợ OpenTelemetry.
OpenTelemetry có sẵn cho hầu hết ngôn ngữ lập trình và cung cấp khả năng tương tác giữa các ngôn ngữ và môi trường khác nhau.
Tracing và go-redis
Go-redis đi kèm với một instrumentation OpenTelemetry tên là redisotel được phân phối như một module riêng:
go get github.com/go-redis/redis/extra/redisotel/v8Để instrument client Redis, bạn cần thêm hook do redisotel cung cấp:
import (
"github.com/go-redis/redis/v8"
"github.com/go-redis/redis/extra/redisotel/v8"
)
rdb := redis.NewClient(&redis.Options{...})
rdb.AddHook(redisotel.NewTracingHook())Để tracing hoạt động, bạn phải truyền trace context đang hoạt động cho các lệnh go-redis, ví dụ:
ctx := req.Context()
val, err := rdb.Get(ctx, "key").Result()Để tìm hiểu thêm về redisotel, xem Giám sát hiệu suất và lỗi Go Redis.
Uptrace
Uptrace là một cạnh tranh mã nguồn mở với DataDog với trình xây dựng truy vấn trực quan, dashboard phong phú, cảnh báo tự động và tích hợp cho hầu hết ngôn ngữ và framework.
Bạn có thể cài đặt Uptrace bằng cách tải gói DEB/RPM hoặc binary tiền biên dịch.
Như mong đợi, redisotel tạo spans cho các lệnh Redis được xử lý và ghi lại bất kỳ lỗi nào khi chúng xảy ra. Đây là cách thông tin thu thập được hiển thị tại Uptrace:

Bạn có thể tìm ví dụ có thể chạy tại GitHub.
Tiếp theo?
Tiếp theo, bạn có thể cài đặt thêm các instrumentation OpenTelemetry để giám sát các khía cạnh khác của ứng dụng, ví dụ Gin hoặc Go gRPC.
Bạn cũng có thể tìm hiểu về OpenTelemetry Tracing API và Metrics API để tạo instrumentation riêng của mình.