go micro metrics 接入Prometheus、Grafana

本文介紹go micro中加入metric, 並接入Prometheus、Grafananode

1.go micro中間件加載prometheus plugins

go micro中提供了prometheus pluginsgit

github.com/micro/go-plugins/wrapper/monitoring/prometheus/github

package main

import (
    "net/http"
    "github.com/micro/go-plugins/wrapper/monitoring/prometheus/v2"
    "github.com/prometheus/client_golang/prometheus/promhttp"
    //...
)

func main() {
    // New Service
    service := micro.NewService(
        micro.Name("go.micro.api.myauth"),
        micro.Version("latest"),
        micro.WrapHandler(prometheus.NewHandlerWrapper()),
    )

    // Initialise service
    service.Init(
        // create wrap for the Myauth service client
        micro.WrapHandler(client.MyauthWrapper(service)),
    )
    go PrometheusBoot()
    
    // Register Handler
    myauth.RegisterMyauthHandler(service.Server(), new(handler.Myauth))

    // Run service
    if err := service.Run(); err != nil {
        log.Fatal(err)
    }
}

func PrometheusBoot() {
    http.Handle("/metrics", promhttp.Handler())
    // 啓動web服務,監聽8085端口
    go func() {
        err := http.ListenAndServe("localhost:8085", nil)
        if err != nil {
            log.Fatal("ListenAndServe: ", err)
        }
    }()
}

代碼很簡單,在micro.NewService中傳入micro.WrapHandler(prometheus.NewHandlerWrapper()),golang

再啓動web服務,監聽8085端口,暴露metric數據web

訪問http://localhost:8085/metrics便可看到數據docker

image

2.啓動prometheus

本文演示prometheus、grafana在docker中運行segmentfault

啓動prometheusapi

  1. 建立prometheus.yml,粘貼如下內容
global:
  scrape_interval:     15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'codelab-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s
    static_configs:
      - targets: ['host.docker.internal:8085']

這裏示例 micro 微服務直接運行在宿主機上,Prometheus抓取數據須要訪問主機端口,因此targets的ip寫的是host.docker.internalapp

  1. 啓動prometheus

docker run -d -p 9090:9090 -v /Users/wulin/gowork/myauth/prometheus.yml:/etc/prometheus/prometheus.yml --name prometheus prom/prometheuside

訪問地址http://localhost:9090/

image
能夠看到抓取狀態是正常的

2.啓動grafana

docker run -d -p 3000:3000 grafana/grafana
訪問地址http://localhost:3000/

首先設置數據源,選擇prometheus,url填http://宿主ip:9090/ ,點擊保存,提示成功便可

image

dashboard中點擊`add panel`, 選擇數據源,填寫metrics(點擊有提示),完成後點`apply`便可
image
測試用的node-exporter,能夠用於測試

docker run -d  -p 9100:9100 \
  -v "/proc:/host/proc:ro" \
  -v "/sys:/host/sys:ro" \
  -v "/:/rootfs:ro" \
  prom/node-exporter

以上內容討論的是 go micro 的metrics,

如下內容討論的是micro網關中的metrics,官方plugins請見https://github.com/micro/go-p...

自定義 micro 網關 代碼以下,僅列出metrics相關代碼

import (

    "github.com/micro/go-plugins/micro/metrics/v2"
    "github.com/micro/micro/v2/cmd"
    "github.com/micro/micro/v2/plugin"
)

func main() {
    plugin.Register(metrics.NewPlugin())
    cmd.Init()
}

插件中代碼以下

// NewPlugin returns a new metrics plugin
func NewPlugin() plugin.Plugin {
    metrics := new(Metrics)

    return plugin.NewPlugin(
        plugin.WithName("metrics"),
        plugin.WithFlag(
            &cli.StringFlag{
                Name:  "metrics",
                Usage: "Specify the type of metrics provider e.g prometheus",
            },
        ),
        plugin.WithHandler(metrics.Handler),
        plugin.WithInit(func(ctx *cli.Context) error {
            provider := ctx.String("metrics")

            switch provider {
            case "prometheus":
                metrics.Provider = prometheus.New()
                log.Info("Loaded prometheus metrics at /metrics")
            }

            return nil
        }),
    )
}

看起來不是很完善,目前只支持prometheus,且參數不能在代碼指定metrics ,啓動以下

go run ./gateway/main.go -metrics prometheus api --handler=api

plugins參數指定須要放到api以前哦

啓動後能夠看見控制檯

file=v2@v2.9.1/metrics.go:49 level=info Loaded prometheus metrics at /metrics

訪問http://localhost:8080/metrics ,便可看到metrics信息

數據收集展示和上文同樣,這裏就不重複介紹了。
image
image
image

go micro 分析系列文章
go micro server 啓動分析
go micro client
go micro broker
go micro cmd
go micro config
go micro store
go micro registry
go micro router
go micro runtime
go micro transport
go micro web
go micro registry 插件consul
go micro plugin
go micro jwt 網關鑑權
go micro 鏈路追蹤
go micro 熔斷與限流
go micro wrapper 中間件
go micro metrics 接入Prometheus、Grafana

相關文章
相關標籤/搜索