linux

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

小樊
51
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
看了该问题的人还看了