温馨提示×

如何在Golang日志中集成监控系统

小樊
50
2025-07-24 12:40:23
栏目: 编程语言

在Golang中,你可以使用第三方库来集成日志和监控系统。以下是一个简单的示例,展示了如何使用logrus库进行日志记录,并使用prometheus库进行监控。

  1. 首先,安装所需的库:
go get github.com/sirupsen/logrus go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp 
  1. 创建一个名为main.go的文件,并添加以下代码:
package main import ( "fmt" "net/http" "time" "github.com/prometheus/client_golang/prometheus" "github.com/prometheus/client_golang/prometheus/promhttp" "github.com/sirupsen/logrus" ) var (	requestCounter = prometheus.NewCounterVec(	prometheus.CounterOpts{	Name: "http_requests_total",	Help: "Total number of HTTP requests",	},	[]string{"method", "endpoint"},	) ) func init() {	logrus.SetFormatter(&logrus.JSONFormatter{})	prometheus.MustRegister(requestCounter) } func main() {	logrus.Info("Starting server on :8080")	http.HandleFunc("/", handleRequest)	http.Handle("/metrics", promhttp.Handler()) go func() { for {	time.Sleep(1 * time.Minute)	logrus.Infof("Metrics: %+v", prometheus.DefaultRegisterer.Gather())	}	}()	logrus.Fatal(http.ListenAndServe(":8080", nil)) } func handleRequest(w http.ResponseWriter, r *http.Request) {	method := r.Method	endpoint := r.URL.Path	requestCounter.With(prometheus.Labels{"method": method, "endpoint": endpoint}).Inc()	logrus.Infof("Handling %s request to %s", method, endpoint)	fmt.Fprintf(w, "Hello, World!") } 

在这个示例中,我们创建了一个简单的HTTP服务器,它有两个路由://metrics/路由用于处理请求,/metrics路由用于暴露Prometheus监控指标。

我们使用logrus库记录日志,并使用prometheus库创建一个名为http_requests_total的计数器,用于跟踪HTTP请求的总数。我们还定义了一个handleRequest函数,该函数在每次收到请求时递增计数器并记录日志。

最后,我们启动了一个goroutine,每隔一分钟将收集到的指标记录到日志中。

要运行此示例,请在终端中执行以下命令:

go run main.go 

现在,你可以通过访问http://localhost:8080来查看应用程序,并通过访问http://localhost:8080/metrics来查看Prometheus监控指标。

0