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