咱们用一个系列来解说从需要到上线、从代码到k8s部署、从日志到监控等各个方面的微服务残缺实际。
整个我的项目应用了go-zero开发的微服务,根本蕴含了go-zero以及相干go-zero作者开发的一些中间件,所用到的技术栈根本是go-zero项目组的自研组件,根本是go-zero全家桶了。
实战我的项目地址:https://github.com/Mikaelemmm...
1、概述
如果依照我前两节错误处理、日志收集配置的话,咱们通过日志中的traceId也能够残缺看到报错时候的整体链路日志,然而不报错的时候或者想不便的查看单个业务整个链路调用的执行工夫是不太不便查看的,所以最好还是加上链路追踪。
go-zero底层曾经帮咱们把代码跟链路追踪对接的代码曾经写好了
func startAgent(c Config) error { opts := []sdktrace.TracerProviderOption{ // Set the sampling rate based on the parent span to 100% sdktrace.WithSampler(sdktrace.ParentBased(sdktrace.TraceIDRatioBased(c.Sampler))), // Record information about this application in an Resource. sdktrace.WithResource(resource.NewSchemaless(semconv.ServiceNameKey.String(c.Name))), } if len(c.Endpoint) > 0 { exp, err := createExporter(c) if err != nil { logx.Error(err) return err } // Always be sure to batch in production. opts = append(opts, sdktrace.WithBatcher(exp)) } tp := sdktrace.NewTracerProvider(opts...) otel.SetTracerProvider(tp) otel.SetTextMapPropagator(propagation.NewCompositeTextMapPropagator( propagation.TraceContext{}, propagation.Baggage{})) otel.SetErrorHandler(otel.ErrorHandlerFunc(func(err error) { logx.Errorf("[otel] error: %v", err) })) return nil}
默认反对jaeger、zinpink
package trace// TraceName represents the tracing name.const TraceName = "go-zero"// A Config is a opentelemetry config.type Config struct { Name string `json:",optional"` Endpoint string `json:",optional"` Sampler float64 `json:",default=1.0"` Batcher string `json:",default=jaeger,options=jaeger|zipkin"`}
咱们只须要在咱们的业务代码配置中,也就是你的业务配置的yaml中配置参数即可。
2、实现
go-zero-looklook是以jaeger来实现的
2.1 jaeger
我的项目的docker-compose-env.yaml中配置了jaeger
services: #jaeger链路追踪 jaeger: image: jaegertracing/all-in-one:latest container_name: jaeger ports: - "5775:5775/udp" - "6831:6831/udp" - "6832:6832/udp" - "5778:5778" - "16686:16686" - "14268:14268" - "9411:9411" environment: - SPAN_STORAGE_TYPE=elasticsearch - ES_SERVER_URLS=http://elasticsearch:9200 - LOG_LEVEL=debug networks: - looklook_net ........
其中jager_collector 依赖elasticsearch做存储,所以要把elasticsearch装置上,前一节收集日志时候咱们曾经演示了。
2.2 业务配置
咱们以用户服务为例
1)api配置
app/usercenter/cmd/api/etc/usercenter.yaml
Name: usercenter-apiHost: 0.0.0.0Port: 8002Mode: dev......#链路追踪Telemetry: Name: usercenter-api Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
2)rpc配置
Name: usercenter-rpcListenOn: 0.0.0.0:9002Mode: dev.....#链路追踪Telemetry: Name: usercenter-rpc Endpoint: http://jaeger:14268/api/traces Sampler: 1.0 Batcher: jaeger
2.3 查看链路
申请用户服务注册、登陆、获取登陆用户信息
浏览器输出 http://127.0.0.1:16686/search即可查看
3、小结
日志、链路追踪咱们都整顿完了,好的零碎肯定能及时监控异样,接下来要看服务监控了。
我的项目地址
https://github.com/zeromicro/go-zero
欢送应用 go-zero
并 star 反对咱们!
微信交换群
关注『微服务实际』公众号并点击 交换群 获取社区群二维码。