golang为Echo框架提供日志记录和指标监控的中间件插件库echo-middleware的使用
Golang为Echo框架提供日志记录和指标监控的中间件插件库echo-middleware的使用
概述
echo-middleware是一个为Echo框架提供多个中间件的Go包。
动机
在多次编写这些中间件后,决定创建一个包含有用中间件的echo包。
安装
要求
echo-middleware需要Go 1.21或更高版本以及Echo Framework v4。
使用方法
使用go get安装:
$ go get github.com/faabiosr/echo-middleware
然后在你的代码中导入这个包:
import "github.com/faabiosr/echo-middleware"
完整示例Demo
下面是一个使用echo-middleware的完整示例,展示了如何添加日志记录和指标监控中间件:
package main
import (
"github.com/faabiosr/echo-middleware"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
// 创建Echo实例
e := echo.New()
// 添加基础中间件
e.Use(middleware.Recover()) // 恢复panic
e.Use(middleware.Secure()) // 安全相关HTTP头
// 使用echo-middleware提供的日志中间件
e.Use(echomiddleware.Logger())
// 使用echo-middleware提供的指标监控中间件
e.Use(echomiddleware.Prometheus())
// 示例路由
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, Echo with Middleware!")
})
// 启动服务器
e.Logger.Fatal(e.Start(":8080"))
}
代码注释
echomiddleware.Logger()
- 提供请求日志记录功能,会记录每个请求的详细信息echomiddleware.Prometheus()
- 提供Prometheus格式的指标监控,可以通过/metrics
端点访问
开发要求
- 安装Go
- 安装GolangCI-Lint
许可证
该项目使用MIT许可证发布。
更多关于golang为Echo框架提供日志记录和指标监控的中间件插件库echo-middleware的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang为Echo框架提供日志记录和指标监控的中间件插件库echo-middleware的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Echo框架日志记录与指标监控中间件:echo-middleware详解
Echo是一个高性能、极简的Go Web框架,而echo-middleware是一个为Echo框架提供常用中间件的集合,包括日志记录和指标监控等功能。
安装
首先安装Echo和echo-middleware:
go get github.com/labstack/echo/v4
go get github.com/labstack/echo/v4/middleware
日志记录中间件
Echo提供了强大的日志中间件,可以记录HTTP请求的详细信息。
基本使用
package main
import (
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
e := echo.New()
// 默认日志中间件
e.Use(middleware.Logger())
// 自定义日志格式
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: "method=${method}, uri=${uri}, status=${status}\n",
}))
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, World!")
})
e.Logger.Fatal(e.Start(":8080"))
}
自定义日志配置
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: `${time_rfc3339} ${remote_ip} ${host} ${method} ${uri} ${user_agent} ` +
`${status} ${error} ${latency_human}` + "\n",
CustomTimeFormat: "2006-01-02 15:04:05",
Output: os.Stdout, // 可以指定输出到文件
}))
指标监控中间件
Echo提供了Prometheus指标监控中间件,可以收集HTTP请求的各种指标。
Prometheus监控集成
package main
import (
"github.com/labstack/echo-contrib/prometheus"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
e := echo.New()
// 启用Prometheus指标
p := prometheus.NewPrometheus("echo", nil)
p.Use(e)
// 其他中间件
e.Use(middleware.Logger())
e.Use(middleware.Recover())
// 路由
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, Metrics!")
})
// 专门暴露指标的端口
go func() {
metrics := echo.New()
metrics.GET("/metrics", prometheus.HandlerFunc())
metrics.Logger.Fatal(metrics.Start(":9090"))
}()
e.Logger.Fatal(e.Start(":8080"))
}
自定义指标
import (
"github.com/prometheus/client_golang/prometheus"
"github.com/prometheus/client_golang/prometheus/promhttp"
)
func init() {
// 自定义计数器
customCounter := prometheus.NewCounter(
prometheus.CounterOpts{
Name: "custom_requests_total",
Help: "Total number of custom requests",
},
)
prometheus.MustRegister(customCounter)
}
// 在handler中使用
e.GET("/custom", func(c echo.Context) error {
customCounter.Inc()
return c.String(200, "Custom metric incremented")
})
其他有用的中间件
请求ID
e.Use(middleware.RequestID())
恢复中间件
e.Use(middleware.Recover())
限流中间件
e.Use(middleware.RateLimiter(middleware.NewRateLimiterMemoryStore(20)))
CORS中间件
e.Use(middleware.CORS())
Gzip压缩
e.Use(middleware.Gzip())
完整示例
package main
import (
"os"
"github.com/labstack/echo-contrib/prometheus"
"github.com/labstack/echo/v4"
"github.com/labstack/echo/v4/middleware"
)
func main() {
e := echo.New()
// 日志中间件
e.Use(middleware.LoggerWithConfig(middleware.LoggerConfig{
Format: `${time_rfc3339} ${remote_ip} ${method} ${uri} ${status} ${latency_human}` + "\n",
Output: os.Stdout,
}))
// Prometheus指标
p := prometheus.NewPrometheus("echo", nil)
p.Use(e)
// 其他中间件
e.Use(middleware.RequestID())
e.Use(middleware.Recover())
e.Use(middleware.CORS())
e.Use(middleware.Gzip())
// 路由
e.GET("/", func(c echo.Context) error {
return c.String(200, "Hello, Echo!")
})
// 指标服务
go func() {
metrics := echo.New()
metrics.GET("/metrics", prometheus.HandlerFunc())
metrics.Logger.Fatal(metrics.Start(":9090"))
}()
e.Logger.Fatal(e.Start(":8080"))
}
总结
echo-middleware为Echo框架提供了丰富的中间件支持,特别是日志记录和指标监控功能:
- 日志记录:可以自定义格式、输出位置和时间格式
- 指标监控:原生支持Prometheus,方便集成到监控系统
- 其他功能:请求ID、恢复、限流、CORS等常用功能
通过这些中间件,可以快速为Echo应用添加生产环境所需的关键功能,而无需重复造轮子。