在Golang中,你可以使用第三方库来集成日志和监控系统。以下是一个简单的示例,展示了如何使用logrus
库进行日志记录,并使用prometheus
库进行监控。
go get github.com/sirupsen/logrus go get github.com/prometheus/client_golang/prometheus go get github.com/prometheus/client_golang/prometheus/promhttp
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监控指标。