Go服務監控

使用Golang能夠開發出高性能的HTTP、GRPC服務。通常項目運行後,咱們也須要監控服務的性能或者進行調試。除了打日誌,還有沒有其餘可視化的方案呢?答案是有的。git

本文將會介紹幾種經常使用的監控方案。github

pprof

這個是go語言自帶的。啓用很簡單:golang

_ "net/http/pprof"

僅需顯式的在 main 包的 import 裏增長上面一行便可。完整使用示例:web

package main

import (
    "net/http"
    _ "net/http/pprof"
)

func main(){
    //提供給負載均衡探活以及pprof調試
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        w.Write([]byte("ok"))
    })

    http.ListenAndServe(":10108", nil)
}

運行以後,在瀏覽器打開 http://127.0.0.1:10108/debug/pprof/就能看到監控的一些信息了:瀏覽器

注:生產環境通常不會按上面那麼寫,通常都是開個協程:bash

go http.ListenAndServe(":10108", nil)

如何啓動 PProf 可視化界面?app

須要graphviz支持,能夠到 http://www.graphviz.org/download/下載,並把bin加入到環境變量。Mac可使用brew安裝負載均衡

下面以heap爲例:工具

方法一:性能

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/heap

方法二:

go tool pprof http://localhost:10108/debug/pprof/heap

而後在交互式命令行輸入web便可跳轉到默認瀏覽器:

查看協程信息:

go tool pprof -http=:8081 http://localhost:10108/debug/pprof/goroutine

debugcharts

一個能夠實時查看golang程序內存、CPU、GC、協程等變化狀況的可視化工具。

跟pprof同樣, import引入, 而後開端口監聽就好了:

_ "github.com/mkevac/debugcharts"
//省略其它代碼...
http.ListenAndServe(":10108", nil)

運行後,瀏覽器打開 http://localhost:10108/debug/charts/ 就能看到了:

prometheus

prometheus是grafana的插件,支持go監控的可視化。

首先須要代碼裏引入包:

"github.com/prometheus/client_golang/prometheus/promhttp"

而後增長路由:

//prometheus
http.Handle("/metrics", promhttp.Handler())
http.ListenAndServe(":10108", nil)

配置grafana後,效果圖:

一個端口開啓 pprof+charts+prometheus

若是每個監控都開一個端口就有點浪費端口了。能夠在一個端口裏開啓 pprof+charts+prometheus 。

一、入口文件增長代碼:

//監控
go func() {
   //提供給負載均衡探活
   http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
      w.Write([]byte("ok"))

   })

   //prometheus
   http.Handle("/metrics", promhttp.Handler())

   //pprof, go tool pprof -http=:8081 http://$host:$port/debug/pprof/heap
   http.ListenAndServe(":10108", nil)
}()

二、import增長

_ "github.com/mkevac/debugcharts"
"github.com/prometheus/client_golang/prometheus/promhttp"
"net/http"
_ "net/http/pprof"

參考

一、Golang pprof詳解
https://studygolang.com/articles/14519
二、mkevac/debugcharts: Very simple charts with some debug data for Go programs
https://github.com/mkevac/debugcharts
三、prometheus/client_golang: Prometheus instrumentation library for Go applications
https://github.com/prometheus/client_golang/

相關文章
相關標籤/搜索