Hyperledger Fabric是强调运维的区块链,Fabric自1.4版本开始就包含 了用于peer和orderer节点运维的特性。本教程将介绍如何配置Fabric网络节点 的运维管理服务,以及如何使用Prometheus和statsD/Graphite来可视化监控 Hyperledger Fabric网络中各节点的实时运行指标。
1、配置Hyperledger Fabric节点的运维服务
Hyperledger Fabric 1.4提供了如下的特性用于peer和orderer节点 的运维服务API:
- 日志等级管理:/logspec
- 节点健康检查:/healthz
- 运行监控指标:/metrics
配置Fabric区块链节点的运维服务虽然不是尖端的火箭科技,但是如果你漏掉 了某些细节也会觉得不那么容易。
首先修改core.yaml来配置peer节点的运维服务,主要包括监听地址的 配置和TLS的配置(我们先暂时禁用这部分)。
用编辑器打开core.yaml:
1 | $ vi ~/fabric-samples/config/core.yaml |
下图显示了peer节点的运维服务监听地址listenAddress
的默认值:
现在让我们启动BYFN网络,并试着访问日志等级api。
1 | $ cd ~/fabric-samples/first-network |
不幸的是,curl命令返回如下错误:
1 | curl: (7) Failed to connect to peer0.org1.example.com port 9443: Connection refused |
让我们看看到底是什么原因。
首先检查我们的运维服务配置,打开core.yaml文件:
1 | # vi /etc/hyperledger/fabric/core.yaml |
可能你还记得,我们使用127.0.0.1作为listenAddress的值,这意味着 从外部无法访问运维api。
让我们在peer容器内进行必要的操作以再次检查。这次我们将使用wget代替 curl,因为在容器内没有安装curl。
1 | $ docker exec -it peer0.org1.example.com bash |
和预期的一样,错误信息再次出现:
1 | Connecting to peer0.org1.example.com (peer0.org1.example.com)… failed: Connection refused |
但是如果用127.0.0.1来连接就会成功:
1 | # wget 127.0.0.1:9443/logspec |
结果如下:
这标明我们需要设置运维的监听地址。
为此,修改docker-compose文件,为每个peer指定CORE_OPERATIONS_LISTENADDRESS环境变量。
1 | $ vi ~/fabric-samples/first-network/base/docker-compose-base.yaml |
参考下图进行修改:
现在让我们再次尝试访问/logspec这个API,别忘了重新启动BYFN网络。
1 | $ docker exec -it cli bash |
输出结果如下:
类似的,我们可以检查节点健康状况:
1 | # curl peer1.org1.example.com:9443/healthz |
输出结果如下:
最后,让我们在docker-compose-base.yaml中为每个peer设置
ORE_METRICS_PROVIDER=prometheus
来启用prometheus指标,
并修改core.yaml来声明指标提供器为prometheus:
如果配置正确,在cli容器内执行如下命令后将会输出一组监控指标的当前值:
1 | # curl peer1.org1.example.com:9443/metrics |
结果如下:
2、用Prometheus监控Hyperledger Fabric网络的运行指标
首先下载最新版本的Prometheus并解压:
1 | $ curl -LO https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz \ |
在prometheus文件夹中可以找到prometheus.yml文件。我们需要修改 这个文件以便抓取Hyperledger Fabric的运行指标数据:在scrape_configs 部分添加job_name和targets:
1 | global: |
现在我们可以用docker来运行prometheus:
1 | $ sudo docker run -d --name prometheus-server -p 9090:9090 \ |
注意由于docker总是在专用网络启动容器,我们需要将prometheus容器加入 fabric网络。用如下命令查看fabric网络:
1 | $ docker inspect peer1.org1.example.com |
将prometheus容器接入fabric网络:
1 | $ sudo docker network connect net_byfn 5b8cbf9d8fa6 |
可以在如下地址访问统计信息:http://localhost:9090/
要检查是否成功抓取了peer的运行指标,输入scrape_samples_scraped 查看结果表,内容应该非空。
3、用StatsD/Graphite监控Hyperledger Fabric网络的运行指标
现在我们换StatsD来可视化监控Fabric网络的运行指标,Prometheus是pull方式, 而StatsD则采用push方式。
首先,我们需要先从这里 获取Graphite和StatsD的docker镜像。
然后,启动graphite容器:
1 | $ docker run -d\ |
现在该修改docker-copose-base.yaml了。每个peer都应该设置如下 的环境变量:
1 | CORE_OPERATIONS_LISTENADDRESS |
我们也应当确保指定端口8125。peer的配置示例如下:
1 | peer0.org1.example.com: |
需要留意使用的端口:对于peer0,端口应当是8125:8125,peer1则应当使用9125:8125, 依此类推。
Orderer应当按如下配置:
1 | - ORDERER_OPERATIONS_LISTENADDRESS=orderer.example.com:8125 |
现在让我们启动BYFN网络。
记得将graphite容器接入BYFN网络,否则你会看到如下错误:
1 | Error: error getting endorser client for channel: endorser client failed to |
peer容器的日志将显示在网络中没有找到graphite:
1 | Error: failed to initialize operations subystems: dial udp: lookup graphite |
使用如下命令将graphite容器接入fabric网络:
1 | $ sudo docker network connect net_byfn graphite |
一切正常的话,你应该可以在如下地址看到运行指标:
1 | http://localhost/metrics/index.json |
结果如下:
访问如下地址来查看可视化的数据:
1 | http://localhost/ |
结果页面如下:
4、教程小结
在这个教程中,我们学习了如何配置hyperledger Fabric的节点的运维服务API, 以及如何使用Prometheus或StatsD来可视化监控Hyperledger Fabric的运行情况。 如果你希望继续深入学习Hyperledger Fabric区块链链码及应用的开发,可以参考这两个 在线互动教程:
原文链接:Hyperledger Fabric Operations Service Tutorial
汇智网翻译整理,转载请标明出处