在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监控指标。