Он работает в моей среде с экспортером, добавленным мной недавно.Вам нужно не только изменить конфигурацию в core.yaml, но и реализовать свой собственный экспортер с помощью пакета метрик.
Создание вашего экспортера
- Инициализация viper& загрузите core.yaml, чтобы включить функцию метрик на одноранговом узле.
- Настройте пакет метрик с помощью core.yaml через viper.
- Настройте метку метрики.(В приведенном ниже примере кода создается метка hyperledger_fabric_peer_blocknum)
- Вызов функции Start ().Функция блокируется до окончания экспорта.Поэтому нам нужно выполнить его как подпрограмму go.
- А также вам необходимо периодически обновлять экспортированные метрики для другой подпрограммы go.(В приведенном ниже примере кода в качестве метрики используется количество блоков)
- В основном потоке начинайте прослушивать канал, ожидая прерывания.
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