在 Go 应用程序中,日志和监控对健康性和可观察性至关重要。最佳实践包括:根据重要性选择日志级别,只记录必要信息。使用结构化日志和集中式日志记录。设置自定义指标和使用 Prometheus 等监控工具。设置告警规则并集成分布式追踪。
在 Go 框架中,日志和监控对于应用程序的健康性和可观察性至关重要。本文重点关注常见的日志和监控问题,并提供最佳实践,以帮助您在 Go 应用程序中有效利用这些工具。
配置 logrus 进行结构化日志记录
import ( "io" "github.com/sirupsen/logrus" ) func main() { // 创建一个带格式化程序的日志记录器 logger := logrus.New() logger.Formatter = &logrus.JSONFormatter{} // 记录一个结构化日志记录 logger.WithFields(logrus.Fields{ "level": "info", "module": "main", "message": "Application started", }).Info("Application started successfully") // 将日志记录写入文件 f, err := os.OpenFile("mylog.log", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) if err != nil { panic(err) } defer f.Close() logger.SetOutput(io.MultiWriter(f, os.Stdout)) }
使用 Prometheus 收集自定义指标
import ( "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "net/http" ) var requestCount = prometheus.NewCounter( prometheus.CounterOpts{ Name: "http_requests_total", Help: "HTTP 请求总数", }, ) func main() { // 注册指标 prometheus.MustRegister(requestCount) http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { // 增加请求计数 requestCount.Inc() // 发送响应 w.Write([]byte("Hello, world!")) }) // 导出指标 http.Handle("/metrics", promhttp.Handler()) http.ListenAndServe(":8080", nil) }
以上是golang框架日志与监控常见问题及最佳实践的详细内容。更多信息请关注PHP中文网其他相关文章!