Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Redis

การติดตามแบบกระจายด้วย go-redis, Upstash และ OpenTelemetry

ในบทช่วยสอนนี้ คุณจะได้เรียนรู้วิธีเชื่อมต่อกับฐานข้อมูล Upstash Redis โดยใช้ไคลเอ็นต์ go-redis และตรวจสอบประสิทธิภาพของแอปโดยใช้การติดตามแบบกระจาย

go-redis คืออะไร

go-redis เป็นไคลเอนต์ Redis ยอดนิยมสำหรับ Golang นอกกรอบ รองรับ Redis Server, Sentinel และ Cluster

ในการเชื่อมต่อกับฐานข้อมูล Upstash Redis ให้ใช้รหัสต่อไปนี้:

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())
}

ในการรันคำสั่งโดยพลการ คุณสามารถใช้ API ทางเลือก:

val, err := rdb.Do(ctx, "get", "key").Result()
if err != nil {
	if err == redis.Nil {
		fmt.Println("key does not exists")
		return
	}
	panic(err)
}

คุณสามารถใช้ go-redis เพื่อแคชข้อมูลหรือคำขอจำกัดอัตราไปยัง API ของคุณ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับไคลเอ็นต์ โปรดดูเอกสารประกอบของ Redis Golang

การติดตามแบบกระจายคืออะไร

การติดตามแบบกระจายช่วยให้สามารถสังเกตคำขอขณะที่ส่งผ่านระบบแบบกระจาย โดยเฉพาะอย่างยิ่งคำขอที่สร้างขึ้นโดยใช้สถาปัตยกรรมไมโครเซอร์วิส

การติดตามช่วยให้สามารถติดตามคำขอขณะเดินทางผ่านระบบแบบกระจาย คุณจะได้รับบริบทที่สมบูรณ์ของสิ่งที่แตกต่าง สิ่งที่เสียหาย และบันทึกและข้อผิดพลาดที่เกี่ยวข้อง

การติดตามแบบกระจายด้วย go-redis, Upstash และ OpenTelemetry

OpenTelemetry คืออะไร

OpenTelemetry เป็นมาตรฐานที่เป็นกลางจากผู้ขาย ซึ่งช่วยให้คุณรวบรวมและส่งออกการติดตาม บันทึก และตัววัดได้

Otel ช่วยให้นักพัฒนาสามารถรวบรวมและส่งออกข้อมูลการวัดและส่งข้อมูลทางไกลด้วยวิธีที่ไม่เชื่อเรื่องพระเจ้าของผู้ขาย ด้วย OpenTelemetry คุณสามารถเพิ่มเครื่องมือให้กับแอปพลิเคชันของคุณเพียงครั้งเดียวแล้วเพิ่มหรือเปลี่ยนผู้ให้บริการโดยไม่ต้องเปลี่ยนเครื่องมือ เช่น นี่คือรายการทางเลือก DataDog ยอดนิยมที่รองรับ OpenTelemetry

OpenTelemetry พร้อมใช้งานสำหรับภาษาการเขียนโปรแกรมส่วนใหญ่และให้ความสามารถในการทำงานร่วมกันในภาษาและสภาพแวดล้อมต่างๆ

การติดตามและ go-redis

go-redis มาพร้อมกับเครื่องมือวัด OpenTelemetry ที่เรียกว่า redisotel ซึ่งแจกจ่ายเป็นโมดูลแยกต่างหาก:

go get github.com/go-redis/redis/extra/redisotel/v8

ในเครื่องมือไคลเอ็นต์ Redis คุณต้องเพิ่ม hook ที่ redisotel ให้มา:

import (
    "github.com/go-redis/redis/v8"
    "github.com/go-redis/redis/extra/redisotel/v8"
)

rdb := redis.NewClient(&redis.Options{...})

rdb.AddHook(redisotel.NewTracingHook())

เพื่อให้การติดตามทำงาน คุณต้องส่งบริบทการติดตามที่ใช้งานอยู่ไปยังคำสั่ง go-redis ตัวอย่างเช่น:

ctx := req.Context()
val, err := rdb.Get(ctx, "key").Result()

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับ redisotel โปรดดูที่ Monitoring Go Redis Performance and Errors

อัพเทรซ

Uptrace เป็นคู่แข่งของ DataDog แบบโอเพนซอร์สที่มีเครื่องมือสร้างการสืบค้นที่ใช้งานง่าย แดชบอร์ดที่สมบูรณ์ การแจ้งเตือนอัตโนมัติ และการผสานรวมสำหรับภาษาและเฟรมเวิร์กส่วนใหญ่

คุณสามารถติดตั้ง Uptrace ได้โดยดาวน์โหลดแพ็คเกจ DEB/RPM หรือไบนารีที่คอมไพล์แล้ว

ตามที่คาดไว้ Redisotel จะสร้างช่วงสำหรับคำสั่ง Redis ที่ประมวลผลแล้วและบันทึกข้อผิดพลาดใดๆ ที่เกิดขึ้น นี่คือวิธีการแสดงข้อมูลที่รวบรวมได้ที่ Uptrace:

การติดตามแบบกระจายด้วย go-redis, Upstash และ OpenTelemetry

คุณสามารถหาตัวอย่างที่รันได้ที่ GitHub

ถัดไปคืออะไร

ถัดไป คุณสามารถติดตั้งเครื่องมือวัด OpenTelemetry เพิ่มเติมเพื่อตรวจสอบแง่มุมอื่นๆ ของแอป เช่น Gin หรือ Go gRPC

คุณยังสามารถเรียนรู้เกี่ยวกับ OpenTelemetry Tracing API และ Metrics API เพื่อสร้างเครื่องมือของคุณเองได้