Zipkin : Golang 微服务全链路监控(一)
Golang 微服务全链路监控实现
- broker-service -> auth-service -> postgres db
- zipkin 监控:需代码入侵
一、broker-service
- 通过 context 传递 span
main.go
package main
import (
"broker-service/auth-service"
"broker-service/svc1"
"context"
"fmt"
"log"
"net/http"
"time"
"github.com/opentracing/opentracing-go"
zipkinot "github.com/openzipkin-contrib/zipkin-go-opentracing"
"github.com/openzipkin/zipkin-go"
zipkinhttp "github.com/openzipkin/zipkin-go/reporter/http"
)
var webPort = "8080"
const (
// Our service name.
serviceName = "client"
// Host + port of our service.
hostPort = "0.0.0.0:0"
// Endpoint to send Zipkin spans to.
zipkinHTTPEndpoint = "http://localhost:9411/api/v2/spans"
// Base endpoint of our Auth service.
authEndpoint = "http://localhost:8090"
)
type Config struct {
Client Services
Ctx context.Context
}
type Services struct {
Auth auth.Service
}
func main() {
fmt.Println("Starting broker service: ", webPort)
// set up a span reporter
reporter := zipkinhttp.NewReporter(zipkinHTTPEndpoint)
defer reporter.Close()
// create our local service endpoint
endpoint, err := zipkin.NewEndpoint(serviceName, hostPort)
if err != nil {
log.Fatalf("unable to create local endpoint: %+v\n", err)
}
// initialize our tracer
nativeTracer, err := zipkin.NewTracer(reporter, zipkin.WithLocalEndpoint(endpoint))
if err != nil {
log.Fatalf("unable to create tracer: %+v\n", err)
}
// use zipkin-go-open