天天看點

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

Hyperledger Fabric是強調運維的區塊鍊,Fabric自1.4版本開始就包含了用于peer和orderer節點運維的特性。本教程将介紹如何配置Fabric網絡節點的運維管理服務,以及如何使用Prometheus和statsD/Graphite來可視化監控Hyperledger Fabric網絡中各節點的實時運作名額。

相關教程: Fabric區塊鍊Java開發詳解 |
Fabric區塊鍊Node.JS開發詳解

1、配置Hyperledger Fabric節點的運維服務

Hyperledger Fabric 1.4提供了如下的特性用于peer和orderer節點的運維服務API:

  • 日志等級管理:/logspec
  • 節點健康檢查:/healthz
  • 運作監控名額:/metrics

配置Fabric區塊鍊節點的運維服務雖然不是尖端的火箭科技,但是如果你漏掉了某些細節也會覺得不那麼容易。

首先修改core.yaml來配置peer節點的運維服務,主要包括監聽位址的配置和TLS的配置(我們先暫時禁用這部分)。

用編輯器打開core.yaml:

$ vi ~/fabric-samples/config/core.yaml           

下圖顯示了peer節點的運維服務監聽位址

listenAddress

的預設值:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

現在讓我們啟動BYFN網絡,并試着通路日志等級api。

$ cd ~/fabric-samples/first-network
$ ./byfn.sh -m up
$ docker exec -it cli bash

# curl peer0.org1.example.com:9443/logspec           

不幸的是,curl指令傳回如下錯誤:

curl: (7) Failed to connect to peer0.org1.example.com port 9443: Connection refused           

讓我們看看到底是什麼原因。

首先檢查我們的運維服務配置,打開core.yaml檔案:

# vi /etc/hyperledger/fabric/core.yaml           

可能你還記得,我們使用127.0.0.1作為listenAddress的值,這意味着

從外部無法通路運維api。

讓我們在peer容器内進行必要的操作以再次檢查。這次我們将使用wget代替

curl,因為在容器内沒有安裝curl。

$ docker exec -it peer0.org1.example.com bash

# wget peer0.org1.example.com:9443/logspec           

和預期的一樣,錯誤資訊再次出現:

Connecting to peer0.org1.example.com (peer0.org1.example.com)… failed: Connection refused           

但是如果用127.0.0.1來連接配接就會成功:

# wget 127.0.0.1:9443/logspec           

結果如下:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

這标明我們需要設定運維的監聽位址。

為此,修改docker-compose檔案,為每個peer指定CORE_OPERATIONS_LISTENADDRESS環境變量。

$ vi ~/fabric-samples/first-network/base/docker-compose-base.yaml           

參考下圖進行修改:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

現在讓我們再次嘗試通路/logspec這個API,别忘了重新啟動BYFN網絡。

$ docker exec -it cli bash

# curl peer0.org1.example.com:9443/logspec           

輸出結果如下:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

類似的,我們可以檢查節點健康狀況:

# curl peer1.org1.example.com:9443/healthz           
用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

最後,讓我們在docker-compose-base.yaml中為每個peer設定

ORE_METRICS_PROVIDER=prometheus

來啟用prometheus名額,并修改core.yaml來聲明名額提供器為prometheus:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

如果配置正确,在cli容器内執行如下指令後将會輸出一組監控名額的目前值:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

2、用Prometheus監控Hyperledger Fabric網絡的運作名額

首先下載下傳最新版本的Prometheus并解壓:

$ curl -LO https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz \
$ tar -xvzf prometheus-2.7.1.linux-amd64.tar.gz           

在prometheus檔案夾中可以找到prometheus.yml檔案。我們需要修改這個檔案以便抓取Hyperledger Fabric的運作名額資料:在scrape_configs部分添加job_name和targets。

現在我們可以用docker來運作prometheus:

$ sudo docker run -d --name prometheus-server -p 9090:9090 \
  --restart always \
  -v /home/mccdev/prometheus/prometheus/prometheus.yml:/prometheus.yml \
  prom/prometheus \
  --config.file=/prometheus.yml           

注意由于docker總是在專用網絡啟動容器,我們需要将prometheus容器加入fabric網絡。用如下指令檢視fabric網絡:

$ docker inspect peer1.org1.example.com           
用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

将prometheus容器接入fabric網絡:

$ sudo docker network connect net_byfn 5b8cbf9d8fa6           
用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

可以在如下位址通路統計資訊:

http://localhost:9090/

要檢查是否成功抓取了peer的運作名額,輸入scrape_samples_scraped檢視結果表,内容應該非空。

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

3、用StatsD/Graphite監控Hyperledger Fabric網絡的運作名額

現在我們換StatsD來可視化監控Fabric網絡的運作名額,Prometheus是pull方式,而StatsD則采用push方式。

首先,我們需要先從

這裡

擷取Graphite和StatsD的docker鏡像。

然後,啟動graphite容器:

$ docker run -d\
 --name graphite\
 --restart=always\
 -p 80:80\
 -p 2003-2004:2003-2004\
 -p 2023-2024:2023-2024\
 -p 8125:8125/udp\
 -p 8126:8126\
 graphiteapp/graphite-statsd           

現在該修改docker-copose-base.yaml了。每個peer都應該設定如下的環境變量:

CORE_OPERATIONS_LISTENADDRESS
CORE_METRICS_PROVIDER
CORE_METRICS_STATSD_ADDRESS
CORE_METRICS_STATSD_NETWORK
CORE_METRICS_STATSD_PREFIX           

我們也應當確定指定端口8125。peer的配置示例如下:

peer0.org1.example.com:
  container_name: peer0.org1.example.com
  extends:
   file: peer-base.yaml
   service: peer-base
  environment:
   - CORE_PEER_ID=peer0.org1.example.com
   - CORE_PEER_ADDRESS=peer0.org1.example.com:7051
   - CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:7051
   - CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
   - CORE_PEER_LOCALMSPID=Org1MSP
   # metrics
   - CORE_OPERATIONS_LISTENADDRESS=peer0.org1.example.com:8125
   - CORE_METRICS_PROVIDER=statsd
   - CORE_METRICS_STATSD_ADDRESS=graphite:8125
   - CORE_METRICS_STATSD_NETWORK=udp
   - CORE_METRICS_STATSD_PREFIX=PEER_01
  volumes:
     - /var/run/:/host/var/run/
     - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
     - ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
     - peer0.org1.example.com:/var/hyperledger/production
  ports:
   - 7051:7051
   - 7053:7053
   - 8125:8125           

需要留意使用的端口:對于peer0,端口應當是8125:8125,peer1則應當使用9125:8125,依此類推。

Orderer應當按如下配置:

- ORDERER_OPERATIONS_LISTENADDRESS=orderer.example.com:8125
- ORDERER_METRICS_PROVIDER=statsd
- ORDERER_METRICS_STATSD_ADDRESS=graphite:8125
- ORDERER_METRICS_STATSD_NETWORK=udp
- ORDERER_METRICS_STATSD_PREFIX=ORDERER

ports:
   - 7125:8125           

現在讓我們啟動BYFN網絡。

記得将graphite容器接入BYFN網絡,否則你會看到如下錯誤:

Error: error getting endorser client for channel: endorser client failed to 
connect to peer0.org1.example.com:7051: failed to create new connection: 
context deadline exceeded           

peer容器的日志将顯示在網絡中沒有找到graphite:

Error: failed to initialize operations subystems: dial udp: lookup graphite 
on 127.0.0.11:53: no such host           

使用如下指令将graphite容器接入fabric網絡:

$ sudo docker network connect net_byfn graphite           

一切正常的話,你應該可以在如下位址看到運作名額:

http://localhost/metrics/index.json           
用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

通路如下位址來檢視可視化的資料:

http://localhost/           

結果頁面如下:

用Prometheus/StatsD實時監控Hyperledger Fabric運作名額

4、教程小結

在這個教程中,我們學習了如何配置hyperledger Fabric的節點的運維服務API,以及如何使用Prometheus或StatsD來可視化監控Hyperledger Fabric的運作情況。如果你希望繼續深入學習Hyperledger Fabric區塊鍊鍊碼及應用的開發,可以參考這兩個線上互動教程:

原文連結:

Hyperledger Fabric的運維服務與可視化監控 - 彙智網