Метрики ткани Hyperledger - PullRequest
0 голосов
/ 04 июня 2018

Просто хотел подтвердить, работает ли метрика ткани для кого-либо?Я использую 1.1.0 релиз.

metrics:
    # enable or disable metrics server
    enabled: true

    # when enable metrics server, must specific metrics reporter type
    # currently supported type: "statsd","prom"
    reporter: statsd

    # determines frequency of report metrics(unit: second)
    interval: 1s

    statsdReporter:

          # statsd server address to connect
          address: 172.18.19.29:8125

          # determines frequency of push metrics to statsd server(unit: second)
          flushInterval: 2s

          # max size bytes for each push metrics request
          # intranet recommend 1432 and internet recommend 512
          flushBytes: 1432

    promReporter:

          # prometheus http server listen address for pull metrics
          listenAddress: 0.0.0.0:8080

Это моя core.yaml конфигурация, я пробовал и с Prometheus, и с Statsd, но не вижу никаких метрик ни с одним из методов.Я могу видеть код, присутствующий в одноранговом узле для экспорта метрик.

Может кто-нибудь помочь с настройкой?

1 Ответ

0 голосов
/ 20 октября 2018

Он работает в моей среде с экспортером, добавленным мной недавно.Вам нужно не только изменить конфигурацию в core.yaml, но и реализовать свой собственный экспортер с помощью пакета метрик.

Создание вашего экспортера

  1. Инициализация viper& загрузите core.yaml, чтобы включить функцию метрик на одноранговом узле.
  2. Настройте пакет метрик с помощью core.yaml через viper.
  3. Настройте метку метрики.(В приведенном ниже примере кода создается метка hyperledger_fabric_peer_blocknum)
  4. Вызов функции Start ().Функция блокируется до окончания экспорта.Поэтому нам нужно выполнить его как подпрограмму go.
  5. А также вам необходимо периодически обновлять экспортированные метрики для другой подпрограммы go.(В приведенном ниже примере кода в качестве метрики используется количество блоков)
  6. В основном потоке начинайте прослушивать канал, ожидая прерывания.

package main

import (
	"encoding/json"
	"fmt"
	"os"
	"os/exec"
	"time"

	"github.com/hyperledger/fabric/common/flogging"
	"github.com/hyperledger/fabric/common/metrics"
	"github.com/hyperledger/fabric/peer/common"
)

var logger = flogging.MustGetLogger("fabexporter")

var block_num metrics.Gauge

func main() {

	err := common.InitConfig("core")
	if err != nil {
		logger.Error(err)
	}

	opts := metrics.NewOpts()
	if err := metrics.Init(opts); err != nil {
		logger.Error(err)
		return
	}

	s := metrics.RootScope.SubScope("peer")
	block_num = s.Gauge("blocknum")

	go startMonitor()
	go func() {
		metrics.RootScope.Start()
	}()

	server := make(chan int)
	<-server
}

type Retdata struct {
	Height            int    `json:"height"`
	CurrentBlockHash  string `json:"currentBlockHash"`
	PreviousBlockHash string `json:"previousBlockHash"`
}

func startMonitor() {
	var ret Retdata

	for {
		time.Sleep(5 * time.Second)

		cmd := exec.Command("peer", "channel", "getinfo", "-c", "mychannel")
		cmd.Env = os.Environ()
		cmd.Env = append(cmd.Env, "CORE_LOGGING_LEVEL=CRITICAL")
		out, err := cmd.Output()
		if err != nil {
			logger.Error(err)
			continue
		} else if len(out) == 0 {
			continue
		}

		jsond := ([]byte)(out[17:]) // To trim "Blockchain info: " 
		if err := json.Unmarshal(jsond, &ret); err != nil {
			logger.Error(err)
			break
		}

		logger.Info(fmt.Sprintf("num of block : %d\n", ret.Height))
		block_num.Update(float64(ret.Height))
	}
}

Я также написал статью об этом.Я надеюсь, что это будет ваша помощь.

https://medium.com/@nekiaiken/hyperledger-fabric-meets-prometheus-649c452ba26a

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...