github.com/linapex/ethereum-go-chinese@v0.0.0-20190316121929-f8b7a73c3fa1/swarm/tracing/tracing.go (about) 1 2 //<developer> 3 // <name>linapex 曹一峰</name> 4 // <email>linapex@163.com</email> 5 // <wx>superexc</wx> 6 // <qqgroup>128148617</qqgroup> 7 // <url>https://jsq.ink</url> 8 // <role>pku engineer</role> 9 // <date>2019-03-16 19:16:45</date> 10 //</624450121802715136> 11 12 package tracing 13 14 import ( 15 "io" 16 "os" 17 "strings" 18 "time" 19 20 "github.com/ethereum/go-ethereum/log" 21 jaeger "github.com/uber/jaeger-client-go" 22 jaegercfg "github.com/uber/jaeger-client-go/config" 23 cli "gopkg.in/urfave/cli.v1" 24 ) 25 26 var Enabled bool = false 27 28 //tracingabledflag是用于启用跟踪集合的CLI标志名。 29 const TracingEnabledFlag = "tracing" 30 31 var ( 32 Closer io.Closer 33 ) 34 35 var ( 36 TracingFlag = cli.BoolFlag{ 37 Name: TracingEnabledFlag, 38 Usage: "Enable tracing", 39 } 40 TracingEndpointFlag = cli.StringFlag{ 41 Name: "tracing.endpoint", 42 Usage: "Tracing endpoint", 43 Value: "0.0.0.0:6831", 44 } 45 TracingSvcFlag = cli.StringFlag{ 46 Name: "tracing.svc", 47 Usage: "Tracing service name", 48 Value: "swarm", 49 } 50 ) 51 52 //标志保存跟踪集合所需的所有命令行标志。 53 var Flags = []cli.Flag{ 54 TracingFlag, 55 TracingEndpointFlag, 56 TracingSvcFlag, 57 } 58 59 //init启用或禁用打开的跟踪系统。 60 func init() { 61 for _, arg := range os.Args { 62 if flag := strings.TrimLeft(arg, "-"); flag == TracingEnabledFlag { 63 Enabled = true 64 } 65 } 66 } 67 68 func Setup(ctx *cli.Context) { 69 if Enabled { 70 log.Info("Enabling opentracing") 71 var ( 72 endpoint = ctx.GlobalString(TracingEndpointFlag.Name) 73 svc = ctx.GlobalString(TracingSvcFlag.Name) 74 ) 75 76 Closer = initTracer(endpoint, svc) 77 } 78 } 79 80 func initTracer(endpoint, svc string) (closer io.Closer) { 81 //测试配置示例。用恒定采样法对每条记录道进行采样 82 //并使log span通过配置的logger记录每个跨度。 83 cfg := jaegercfg.Configuration{ 84 Sampler: &jaegercfg.SamplerConfig{ 85 Type: jaeger.SamplerTypeConst, 86 Param: 1, 87 }, 88 Reporter: &jaegercfg.ReporterConfig{ 89 LogSpans: true, 90 BufferFlushInterval: 1 * time.Second, 91 LocalAgentHostPort: endpoint, 92 }, 93 } 94 95 //示例记录器和度量工厂。使用github.com/uber/jaeger-client-go/log 96 //和github.com/uber/jaeger-lib/metrics分别绑定到实际日志和指标 97 //框架。 98 //jLogger:=jaegerLog.stdLogger 99 //jmetricsFactory:=metrics.nullFactory 100 101 //使用记录器和度量工厂初始化跟踪程序 102 closer, err := cfg.InitGlobalTracer( 103 svc, 104 //jaegercfg.记录器(jlogger) 105 //Jaegercfg.度量(jmetricsFactory) 106 //jaegercfg.observer(rpcmetrics.newobserver(jmetricsfactory,rpcmetrics.defaultnamenormalizer)), 107 ) 108 if err != nil { 109 log.Error("Could not initialize Jaeger tracer", "err", err) 110 } 111 112 return closer 113 } 114