腾讯mini项目-【指标监控服务重构】2023-08-09

今日已办

  • 与组员一同优化 otel-log 初始化的逻辑
// Logger Global otelzap Logger for general scenario and tracing
var Logger *otelzap.Logger

func init() {
	var cfg zap.Config
	logLevel, ok := LevelSetter()[strings.ToUpper(config.Profile.GetString("log.level"))]
	if !ok {
		// If log.level is not set or not matched, use the default value Info
		logLevel = zapcore.InfoLevel
	}
	if logLevel == zap.DebugLevel {
		cfg = zap.NewDevelopmentConfig()
	} else {
		cfg = zap.NewProductionConfig()
	}
	// set time format
	cfg.EncoderConfig.EncodeTime = zapcore.RFC3339TimeEncoder
	// add color for console
	cfg.EncoderConfig.EncodeLevel = zapcore.CapitalColorLevelEncoder
	// enable log to export by OTLP
	if export2OTLP(cfg.EncoderConfig, logLevel) == false {
		Logger = otelzap.New(zap.New(zapcore.NewCore(zapcore.NewConsoleEncoder(cfg.EncoderConfig),
			zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), logLevel)))
	}
}

func export2OTLP(encoderConfig zapcore.EncoderConfig, logLevel zapcore.Level) bool {
	if config.Profile.GetBool("log.enableLogOTLPExport") != true {
		return false
	}
	ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
	defer stop()

	conn, err := grpc.DialContext(ctx, config.Profile.GetString("otelclient.endpoint"),
		grpc.WithBlock(),
		grpc.WithTransportCredentials(insecure.NewCredentials()), // disable transport security
		grpc.WithTimeout(time.Second*30))

	if err != nil {
		log.Println("failed to connect to otlp collector to export profile service logs with error:", err)
		return false
	}
	logExportBatchSizeInt, err := strconv.Atoi(config.Profile.GetString("log.logExportBatchSize"))
	if err != nil {
		logExportBatchSizeInt = 1000
	}
	//set resource_string_key-value
	res := resource.NewWithAttributes(
		semconv.SchemaURL,
		semconv.ServiceNameKey.String(config.Profile.GetString("otelclient.serviceName")),
	)
	ws := zapcore.AddSync(zapotlpsync.NewOtlpSyncer(conn, zapotlpsync.Options{
		BatchSize:      logExportBatchSizeInt,
		ResourceSchema: semconv.SchemaURL,
		Resource:       res,
	}))
	core := zapcore.NewTee(
		zapcore.NewCore(zapotlpencoder.NewOTLPEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(ws), logLevel),
		zapcore.NewCore(zapcore.NewConsoleEncoder(encoderConfig), zapcore.NewMultiWriteSyncer(zapcore.AddSync(os.Stdout)), logLevel),
	)

	zapLogger := zap.New(core, zap.AddCaller(), zap.AddStacktrace(zapcore.ErrorLevel))
	// init Logger by warping zap Logger with otelzap
	Logger = otelzap.New(zapLogger, otelzap.WithTraceIDField(true),
		otelzap.WithStackTrace(true),
		otelzap.WithMinLevel(logLevel)) //The default is >= zap.WarnLevel.
	Logger.Info("Enable export log by OTLP")
	return true
}
  • 创建合并请求 feature/profile-otelclient-log

明日待办

你可能感兴趣的:(重构,go,clickhouse)