golang 集成sentry

错误堆栈处理-消除冗余堆栈

参考 https://incident.io/blog/golang-errors, 可以去掉冗余的stack trace,在sentry issue页面更容易找到问题

redis 集成

见 https://github.com/Shujie-Tan/go-redis-sentry

zap库集成

https://github.com/TheZeroSlave/zapsentry

logrus 库集成

官方提供了一个简单的hook, https://github.com/getsentry/sentry-go/blob/master/logrus/logrusentry.go
不过我感觉 调用log.info自动添加为breadcrumb会更好用, 在https://github.com/makasim/sentryhook/tree/master的基础上简单修改实现了一下; 我将warning以上日志作为event, info信息作为breadcrumbs帮助排查问题; 代码如下

// Fire xx
func (hook Hook) Fire(entry *logrus.Entry) error {
	if entry.Level == logrus.InfoLevel {
		return hook.addBreadcrumb(entry)
	}
	// 其他日志上传到sentry
	return nil
}

func (hook Hook) addBreadcrumb(entry *logrus.Entry) error {
	data := make(map[string]interface{})
	for k, v := range entry.Data {
		data[k] = v
	}

	sentry.AddBreadcrumb(&sentry.Breadcrumb{
		Message: entry.Message,
		Data:    data,
		Level:   levelMap[entry.Level],
	})
	return nil
}

mux 集成

可以直接使用 http middleware, 这样的问题是performance那里transaction不会根据路径归类, 导致只要路径参数不通就会生成新的transaction条目,可以简单修改handle中的 startTransaction参数解决, 例如

       # import "github.com/gorilla/mux"
		routeTemp, err := mux.CurrentRoute(r).GetPathTemplate()
		if err != nil {
			routeTemp = mux.CurrentRoute(r).GetName()
		}
		// We don't mind getting an existing transaction back so we don't need to
		// check if it is.
		transaction := sentry.StartTransaction(ctx,
			fmt.Sprintf("%s %s", r.Method, routeTemp),
			options...,
		)

todo:

  • mysql集成
  • PostgreSQL集成
  • http.Client集成

你可能感兴趣的:(sentry,sentry,go,后端)