用Prometheus/StatsD实时监控Hyperledger Fabric运行指标
Hyperledger Fabric是强调运维的区块链,Fabric自1.4版本开始就包含了用于peer和orderer节点运维的特性。本教程将介绍如何配置Fabric网络节点的运维管理服务,以及如何使用Prometheus和statsD/Graphite来可视化监控Hyperledger Fabric网络中各节点的实时运行指标。
相关教程:
Fabric区块链Java开发详解 |
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
的默认值:
现在让我们启动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
结果如下:
这标明我们需要设置运维的监听地址。
为此,修改docker-compose文件,为每个peer指定CORE_OPERATIONS_LISTENADDRESS环境变量。
$ vi ~/fabric-samples/first-network/base/docker-compose-base.yaml
参考下图进行修改:
现在让我们再次尝试访问/logspec这个API,别忘了重新启动BYFN网络。
$ docker exec -it cli bash # curl peer0.org1.example.com:9443/logspec
输出结果如下:
类似的,我们可以检查节点健康状况:
# curl peer1.org1.example.com:9443/healthz
输出结果如下:
最后,让我们在docker-compose-base.yaml中为每个peer设置ORE_METRICS_PROVIDER=prometheus
来启用prometheus指标,并修改core.yaml来声明指标提供器为prometheus:
如果配置正确,在cli容器内执行如下命令后将会输出一组监控指标的当前值:
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容器接入fabric网络:
$ 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容器:
$ 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
结果如下:
访问如下地址来查看可视化的数据:
http://localhost/
结果页面如下:
4、教程小结
在这个教程中,我们学习了如何配置hyperledger Fabric的节点的运维服务API,以及如何使用Prometheus或StatsD来可视化监控Hyperledger Fabric的运行情况。如果你希望继续深入学习Hyperledger Fabric区块链链码及应用的开发,可以参考这两个在线互动教程:
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
企业供应链管理为什么要“上云”?
英国著名的供应链专家马丁·克里斯多弗曾说:“市场上只有供应链而没有企业”,“真正的竞争不是企业与企业之间的竞争,而是供应链和供应链之间的竞争”。这表明了在当今市场竞争中供应链的重要性。所谓供应链,是一个包含供应商、制造商、运输商、零售商以及客户等多个主体的系统。随着经济和科学技术的发展,供应链的管理模式也在悄悄地发生变化。如何更有效地进行供应链管理,达到降本增效、优化运作的目的,是所有企业在发展时思考的问题。 一、当前供应链管理所面临的问题 在今天科技与创新驱动的大时代,很多企业在供应链管理上仍旧面临着这样的问题:采购成本不可控,甚至占到了销售额的60%以上。企业采购成本的有效控制和管理必将使企业的竞争力得到实质性的提升,然而可悲的是大部分管理者一边在唏嘘成本的上升,一边又毫无作为。 另一方面,便是供应链协同问题。一般供应链管理涉及多个主体——供应商、制造商、运输商、零售商以及客户等。传统的企业内部管理系统过于封闭,主体之间无法进行实时共享、信息难以准确汇总,协同性差,供应链流程也不能统一,这导致上游的企业无法及时了解真实用户的需求,只能依据下游的企业来预判产量,最终造成库存大量积压、...
- 下一篇
探索 Android 多线程优化方法
前言 1. 基本介绍 在我学习 Android 多线程优化方法的过程中,发现我对多线程优化的了解太片面。 写这篇文章的目的是完善我对 Android 多线程优化方法的认识,分享这篇文章的目的是希望大家也能从这些知识从得到一些启发。 这篇文章分为下面三部分。 第一部分 第一部分讲的是多线程优化的基础知识,包括线程的介绍和线程调度基本原理的介绍。 第二部分 第二部分讲的是多线程优化需要预防的一些问题,包括线程安全问题的介绍和实现线程安全的办法。 第三部分 第三部分讲的是多线程优化可以使用的一些方法,包括线程之间的协作方式与 Android 执行异步任务的常用方式。 2. 阅读技巧 在阅读本文时,画图和思考可以帮助你更好地记忆和理解文中的内容。 画图画图指的是把每一节的重点画在思维导图的节点上。 思维导图可以让随意信息在视觉上建立起一种视觉上的关联。 随意信息指的是不存在逻辑关系的信息,比如线程的名字和线程的状态就是一种随意信息。 随意信息的特点就是它们之间不存在逻辑关联,导致记忆困难。 通过建立关联,我们大脑能更好地记忆随意信息。 思考 学习不是为了被现有的知识所束缚,而是以现有的知识为基...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Hadoop3单机部署,实现最简伪集群
- CentOS7,CentOS8安装Elasticsearch6.8.6
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS7安装Docker,走上虚拟化容器引擎之路