fabric区块链运行状态监控数据来源总结

最近我们在使用hyperledger fabric搭建区块链的示例程序。监控fabric运行状态,需要获取相关的监控数据。问题在于数据从哪里来,使用何种工具获取,有何意义。下面针对以上问题,本人进行了一系列探索,并询问了IBM的工作人员获得了一些经验。现将内容总结如下:

1. LINUX系统性能监控数据

fabric网络一般安装在Linux系统中,监控Linux系统的CPU占用率、内容占用情况等信息,与区块链交易状态信息两相对照,有助于分析区块链上交易运行对系统造成的负载等有价值内容。那么如何获取Linux系统性能监控数据呢?

一个无脑的方法是,打开一个专用终端,定时地使用一些linux命令查询LINUX系统运行状态,并将console结果写入txt文档。但是这种方法显然有很多弊病,不如使用专门的第三方工具好用。比如这篇博客介绍了25种linux性能监控软件,包括Nmon, Collectl等好用的工具。这些第三方工具大多数是创建了一个守护进程,不断地记录监控数据,并将数据写入磁盘或可以导出csv文件,少数还配有web图形化界面可用。

2. docker运行状态监控数据

众所周知fabric网络的各种节点是安装在docker容器中的,这些容器的运行状态对于了解fabric网络的运行状态很有意义。问题在于如何获取docker容器的运行状态数据呢?

有一个专门的软件,可以监控docker运行状态。开源软件cAdvisor(Container Advisor)是用于监控容器运行状态的利器之一,它被用于多个与docker相关的开源项目中。cAdvisor提供了web界面可供浏览器访问,功能包括展示 Host 和容器两个层次的监控数据,、包括 CPU、内存、网络、文件系统等占用情况等数据。由于 cAdvisor 提供的web界面略显简陋,而且需要在不同页面之间跳转,并且只能监控一个 host,这不免会让人质疑它的实用性。但 cAdvisor 的一个亮点是它可以将监控到的数据导出给第三方工具,由这些工具进一步加工处理。我们可以把 cAdvisor 定位为一个监控数据收集器,收集和导出数据是它的强项,而非展示数据。下面这个博客简单介绍了cAdvisor软件,当然如何部署和使用还的去github查看该项目https://github.com/google/cadvisor

3. 日志数据

日志数据包括docker运行的日志数据,fabric运行日志、错误日志等数据。日志数据能反映很多问题,但是对初学者,收集、分析日志数据有泥牛入海之感。

好在已经有一套成熟的实时日志分析平台可以来做这个事。这就是ELK(ElasticSearch, Logstash, Kibana)平台。详细请见:https://my.oschina.net/itblog/blog/547250/

4. fabric本身的业务数据

回到fabric本身,各种通道数据, 交易数据,还有区块链本身存储的数据,是最直接反映fabric运行状态的数据。

首先,这些数据都是以文件的方式保存在各个节点内的。

如上图所示,在一个peer节点内,这些数据存储在 /var/hyperledger/production/ledgersdata 目录下,包括chains、configHistory、 historyLeveldb、 pvtdataStore、 stateLeveldb等内容,都是我们需要的内容。比如状态数据保存在stateLeveldb里,历史数据保存在historyLeveldb里(leveldb可以按需求改成couchdb,但是功能一样)。这些文件夹里面的文件,都可以直接用cat命令读取。

除了直接读取这些数据以外,使用第二方工具也很必要。

例如Hyperledger Explorer,是一个面向fabric运维的图形化web工具,类似于phpmyadmin或者navicat之于mysql。关于此软件,请参考https://www.jianshu.com/p/1709d6f50f5a

最后提一点:在fabric的命令行/终端中也会反映出很多运行状态,姑且称之为console数据。但是console数据,格式较为混乱,处理难度较高。虽然有一定价值但是处理难度较高,不建议作为主要数据源。

总结

从以上4个角度数据已经足够全面,并且有些数据互相有涵盖(例如cAdvisor的数据也包含host主机的LINUX系统性能监控数据)。因此,我建议应从Hyperledger Explorer和cAdvisor入手,先获取这两个工具读取的数据。然后补充peer节点内的fabric本身的业务数据。最后如果还有不足,则缺啥补啥,按需获取数据。