Golang日志与性能监控在Ubuntu结合

230
2025/2/15 3:32:11
栏目: 编程语言
开发者测试专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

在Ubuntu上结合Golang日志记录与性能监控,可以采用以下几种工具和策略:

Golang日志记录

  1. 标准库 log

    • 提供基础的日志记录功能,适合简单应用。
    • 示例代码:
      package main
      import (
          "log"
      )
      func main() {
          log.Println("This is a log message")
          log.Printf("Hello, %s!", "Gopher")
          log.Fatal("This is a fatal error")
      }
      
  2. 第三方日志库

    • Zap:Uber开发的超快结构化记录器。
      • 示例代码:
        package main
        import (
            "go.uber.org/zap"
            "go.uber.org/zap/zapcore"
        )
        func main() {
            logger := zap.NewProduction()
            defer logger.Sync()
            logger.Info("logger construction succeeded")
        }
        
    • Zerolog:以零分配JSON日志记录而闻名。
      • 示例代码:
        package main
        import (
            "github.com/rs/zerolog/log"
        )
        func main() {
            log.Info().Msg("logger construction succeeded")
        }
        
    • Logrus:带有钩子的结构化记录器。
      • 示例代码:
        package main
        import (
            "github.com/sirupsen/logrus"
        )
        func main() {
            logrus.SetFormatter(&logrus.JSONFormatter{})
            logrus.Info("logger construction succeeded")
        }
        

Golang性能监控

  1. pprof

    • 用于记录CPU使用率和内存分配快照。
    • 示例代码:
      package main
      import (
          "log"
          "net/http"
          _ "net/http/pprof"
          "runtime/pprof"
      )
      func main() {
          go func() {
              log.Println(http.ListenAndServe("localhost:6060", nil))
          }()
          // 在需要分析的地方调用以下函数
          pprof.StartCPUProfile("/tmp/pprof/cpu.prof")
          // 业务逻辑
          pprof.StopCPUProfile()
      }
      
  2. Prometheus

    • 用于收集自定义指标,并通过Grafana进行可视化。
    • 示例代码:
      package main
      import (
          "github.com/prometheus/client_golang/prometheus"
          "github.com/prometheus/client_golang/prometheus/promhttp"
          "net/http"
      )
      var (
          requestCounter = prometheus.NewCounter(prometheus.CounterOpts{
              Name: "web_requests_total",
              Help: "Total number of HTTP requests",
          })
          requestLatency = prometheus.NewHistogram(prometheus.HistogramOpts{
              Name:    "web_request_latency_seconds",
              Help:    "Latency of HTTP requests in seconds",
              Buckets: prometheus.DefBuckets,
          })
      )
      func init() {
          prometheus.MustRegister(requestCounter)
          prometheus.MustRegister(requestLatency)
      }
      func handler(w http.ResponseWriter, r *http.Request) {
          requestCounter.Inc()
          start := time.Now()
          // 模拟处理请求
          time.Sleep(500 * time.Millisecond)
          requestLatency.Observe(time.Since(start).Seconds())
          w.Write([]byte("Hello, World!"))
      }
      func main() {
          http.Handle("/metrics", promhttp.Handler().ServeHTTP)
          http.HandleFunc("/", handler)
          log.Fatal(http.ListenAndServe(":8080", nil))
      }
      

日志管理与分析工具

  1. Logrotate

    • 用于自动轮换、压缩、删除和发送日志文件。
    • 安装与配置:
      sudo apt-get install logrotate
      sudo nano /etc/logrotate.conf
      
  2. Rsyslog

    • 高性能的日志处理工具,支持多种输出格式和过滤选项。
    • 安装与配置:
      sudo apt-get install rsyslog
      sudo nano /etc/rsyslog.conf
      
  3. Grafana

    • 用于可视化监控数据,支持多种数据源(如Prometheus)。
    • 安装与配置:
      sudo apt-get install grafana
      sudo nano /etc/grafana/grafana.ini
      

通过以上工具和策略,可以在Ubuntu上实现高效的Golang日志记录与性能监控,确保系统的稳定性和可维护性。

辰迅云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

推荐阅读: Ubuntu中vsftpd性能优化技巧