5. 运维监控工具
5.1. 前言
“链上的交易总量是多少?”,“我的链上现在有多少区块了?”,“节点是否存活无法第一时间感知到?”,你是否还仅仅只会用sdk,查询链上的相关信息?今天我们将会介绍一种全新的方式来获取到长安链上的信息方式。
5.1.1. 简介:
监控链上资源以及链上节点所在的服务器资源时,主要需要安装三个部分:Prometheus + node exporter + Grafana,当然安装这些的前置条件是要有go环境,这里不赘述。 搭建环境的时候需要注意的是,安装Prometheus+Grafana可以直接在一台机器上,被监控的机器都需要安装node exporter。采用分布式部署的方式最佳。
5.1.2. 长安链监控部署原理:
如上图所示,监控部署原理:长安链监控数据中主要分为两个大类
链上资源:这里主要指的是监控链上的交易量、总区块数、tps等,这里采集的方式通过设置chainmaker.yml中的monitor值为true即可获取到相关数据,通过端口号去区分不同的节点数据。
链上节点所在的机器资源:这里则是需要安装node_exporter来监控机器资源信息。
5.1.3. 实操步骤:
5.1.3.1. 部署架构设计
了解上面的原理后,我们来看一下整体的一个部署架构方案,这里我们举一个比较典型的例子,监控链上有四个节点的链,不管多链还是单链,chainmaker都贴心的为大家适配,因此不需要额外的调整配置。在实际生产中通常采用的分布式部署结构,链上的四个共识节点分别部署到不同的服务器上(这里有个很重要前提所有的服务器网络都必须是互通的)。监控安装的服务器最好选择一个磁盘稍微大一点的机器,因为在监控过程中会产生大量的数据,因此对磁盘的选择还是很重要的。具体的操作如下:
5.1.3.2. 1.Prometheus 安装:
去官网:https://prometheus.io/download/ 下载对应的版本,根据自己的服务器系统进行选择:比如这里用的Linux系统
具体操作如下:
#下载后上传到指定的目录(上传的目录可以按照自己的喜好,比如我这里喜欢把安装包放在package中)
cd /data/package
Prometheus下载成功后,上传到此目录中:
# 解压缩包 tar -vxf prometheus-2.32.1.linux-amd64.tar.gz -C /usr/local #解压后,软连接到一个目录,方便操作 ln -sv /usr/local/prometheus-2.32.1.linux-amd64/ /usr/local/Prometheus #软连接以后,进入目录中 cd /usr/local/prometheus-2.32.1.linux-amd64 # 配置prometheus.yml,这一步需要安装node_exporter后配置最佳 vim prometheus.yml # 配置成功后,直接运行即可 nohup ./prometheus & #查看Prometheus启动是否成功 ps -ef | grep Prometheus
上述操作就是安装Prometheus的操作,安装成功后是需要配置的,vim prometheus.yml(修改配置文件这一步可以等node_exporter安装并启动成功后配置),具体配置方法如下图:
这里最关键部分是要映射到对的ip和对的端口号,这里的端口号9100的主要是监控机器资源信息的,而监控链上的资源信息的端口号要看chainmaker.yml中monitor配置下的端口号是多少,比如节点1默认端口号是14321,那么监控链上字段的端口号就要调整为14321,以此类推。
5.1.3.3. 2.node_exporter下载安装
安装node_exporter主要功能是用来采集节点所在的机器资源信息,比如服务器的cpu、内存、磁盘、网络等信息。 下载地址(还是普罗米修斯的那个地址,往下翻):https://prometheus.io/download/
解压安装
tar -vxf node_exporter-1.3.1.linux-amd64.tar.gz -C /usr/local # 解压后直接可以用 nohup ./usr/local/node_exporter-1.3.1.linux-amd64/node_exporter & #查看node_exporter启动是否成功 ps -ef | grep node_exporter
5.1.3.4. 3.Grafana下载安装
这一步的安装直接在服务器上下载安装包即可
Ubuntu系统
sudo apt-get install -y adduser libfontconfig1 wget https://dl.grafana.com/enterprise/release/grafana-enterprise_8.3.3_amd64.deb sudo dpkg -i grafana-enterprise_8.3.3_amd64.deb
centos系统
sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-10.1.1-1.x86_64.rpm
在安装过程中如果出现错误如下:
➜ package sudo dpkg -i grafana-enterprise_8.3.3_amd64.deb Selecting previously unselected package grafana-enterprise. (Reading database ... 125323 files and directories currently installed.) Preparing to unpack grafana-enterprise_8.3.3_amd64.deb ... Unpacking grafana-enterprise (8.3.3) ... Setting up grafana-enterprise (8.3.3) ... Adding system user `grafana' (UID 118) ... Adding new user `grafana' (UID 118) with group `grafana' ... Not creating home directory `/usr/share/grafana'. ### NOT starting on installation, please execute the following statements to configure grafana to start automatically using systemd sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable grafana-server ### You can start grafana-server by executing sudo /bin/systemctl start grafana-server Processing triggers for systemd (245.4-4ubuntu3.13) ...
按照提示命令执行一次
sudo /bin/systemctl daemon-reload sudo /bin/systemctl enable grafana-server sudo /bin/systemctl start grafana-server
Grafana启动与停止
#Grafana状态查询 systemctl status grafana-server #Grafana启动 systemctl start grafana-server #Grafana停止 systemctl stop grafana-server
启动成功的状态:
5.1.3.5. 4.安装成功检查
如果上述安装都操作成功后,可以得到以下几个地址:
Prometheus地址:http://安装Prometheus的服务器ip:9090/targets
Grafana地址:http://安装Grafana的服务器ip:3000
进入登录页面输入账号密码
Grafana登录的账号密码如下(默认账号密码,后续可以自定义修改):
账号:admin
密码:admin
如果所有被监控的服务是正常的,具体如下图:
5.1.3.6. 5.Grafana配置
上述操作都操作成功后,下一步就是将Prometheus和Grafana进行关联,当然Prometheus也有自己的UI,不过分析资源信息监控这一类的使用Grafana看来了更方便。 先来看一下Prometheus UI:
这里长安链为大家提供了很多指标参数,更多指标见本文最后表格部分。比如这里查询链上一共有多少区块,更多参数大家可以自由探索。
特别说明:如果上述安装操作都成功,这一步chainmaker指标搜索不到,要检查当前的链是否开启监控并且链上有交易
注:配置文件
chainmaker/config/config_tpl/chainmaker.yml
的monitor
开关需要开启,默认是开启状态monitor: enabled: true
接下来看一下Grafana的配置
5.1.3.6.1. 1.Grafana关联Prometheus数据
设置→Data sources→Add data source,如下图所示
到了添加页面后,选择Prometheus,如下图所示
这里有一个很重要的地方,url一定要配置,具体如下图:
页面滑到最下面点击Test and save即可,这样Grafana与Prometheus的数据就关联成功了。
5.1.3.6.2. 2.Grafana监控模板导入
5.1.3.6.2.1. ①模板导入
点击左侧菜单的➕ → import →点击Upload Json file,上传模板,模板为json文件,具体见下。
5.1.3.6.2.2. ②模板附件
监控服务器信息指标: 服务器信息监控配置
监控chainmaker指标: 长安链监控配置
5.1.3.6.2.3. ③配置成功效果
到这一步,我们的监控已经是安装成功了。如果链上资源监控页没有数据,可以尝试发一笔交易试试。
5.2. 总结:
在实际生产环境中,我们对于实时监控链上资源的需求变得尤为重要,尤其是对于企业级数据监控。通过引入高度可视化的数据,我们不仅能够实时监测关键数据指标,还能够提前预警并快速响应节点异常等情况。预警支持邮件通知以及企业微信通知。
5.3. 长安链支持监控指标
指标名称 | 触发条件 | 指标关键字 | 标签格式 | 统计方式 |
---|---|---|---|---|
查询(Query)交易统计 | 查询交易/查询系统链执行完成 | chainmaker_rpcserver_metric_query_request_counter | ${ChainID}-${State} | 计数器 |
调用(Invoke)交易统计 | 调用交易执行完成 | chainmaker_rpcserver_metric_invoke_request_counter | ${ChainID}-${State} | 计数器 |
调用(Invoke)交易大小统计 | 调用交易执行完成 | chainmaker_rpcserver_metric_invoke_tx_size_histogram | ${ChainID}-${State} | 直方图 |
查询合约统计 | 查询交易执行完成 | chainmaker_rpcserver_metric_query_contract_request_counter | ${ChainID}-${ContractName}-${Method}-${CurrTimeDate}-${State} | 计数器 |
非法调用计数 | 验证交易失败 | chainmaker_rpcserver_metric_tx_invoke_illegal | ${ChainID}-${CurrTimeDate}-${TxID}-${SingerMemberInfo} | 计数器 |
订阅发起总数统计 | 接收到订阅请求时增加计数 | chainmaker_rpcserver_metric_subscribe_total_counter | ${ChainId}-${Sender}-${SubscribeType}-${ContractName}-${Topic} | 计数器 |
当前活跃订阅统计 | 接收到订阅请求时增加计数,方法退出时减少计数 | chainmaker_rpcserver_metric_subscribe_active_counter | ${ChainId}-${Sender}-${SubscribeType}-${ContractName}-${Topic} | 仪表盘 |
订阅中断总数统计 | 订阅方法异常退出时增加计数(正常退出不增加计数) | chainmaker_rpcserver_metric_subscribe_interrupted_counter | ${ChainId}-${Sender}-${SubscribeType}-${ContractName}-${Topic} | 计数器 |
交易池使用大小统计 | single/batch/normal交易池向交易池中放交易/取交易时 | chainmaker_txpool_metric_tx_pool_size | ${ChainID}-${PoolType} | 仪表盘 |
验证交易重复时间 | single交易池验证交易重复 | chainmaker_txpool_validate_tx_exist_db_time | ${ChainID} | 直方图 |
验证交易签名时间 | single交易池验证交易签名 | chainmaker_txpool_validate_tx_sign_time | ${ChainID} | 直方图 |
区块打包时间统计 | 打包区块时统计打包区块所需时长 | chainmaker_proposer_metric_block_package_time | ${ChainID} | 直方图 |
随机函数攻击统计 | 触发随机函数剔除逻辑时统计【每笔交易均会统计】 | chainmaker_proposer_metric_random_tx_attack | ${ChainID}-${contractName}-${Method}-${CurrTimeHours} | 计数器 |
区块验证时间统计 | 区块验证时统计验证区块所需时长 | chainmaker_verifier_metric_block_verify_time | ${ChainID} | 直方图 |
区块大小统计 | 提交区块时统计 | chainmaker_committer_metric_block_size | ${ChainID} | 直方图 |
区块高度统计【持久化】 | 提交区块时统计 | chainmaker_committer_metric_block_counter | ${ChainID} | 仪表盘 |
交易个数统计【持久化】 | 提交区块时统计 | chainmaker_committer_metric_tx_counter | ${ChainID} | 计数器 |
区块提交时间统计 | 提交区块时统计 | chainmaker_committer_metric_block_commit_time | ${ChainID} | 直方图 |
出块间隔时间统计 | 提交区块时统计 | chainmaker_committer_metric_block_interval_time | ${ChainID} | 直方图 |
长安链tps统计 | 提交区块时统计 | chainmaker_committer_metric_tps_gauge | ${ChainID} | 仪表盘 |
合约方法调用次数统计 | 提交区块时统计 | chainmaker_committer_metric_method_invoke_counter | ${ChainID}-${ContractName}-${Method} | 计数器 |
节点TBFT当前高度信息 | 进入新高度时、广播状态消息前统计 | chainmaker_consensus_node_status_height_${NodeId} | ${ChainID}-${LocalId}-${NodeId} | 仪表盘 |
节点TBFT共识的Round信息 | 进入新Round时、广播状态消息前统计 | chainmaker_consensus_node_status_round_${NodeId} | ${ChainID}-${LocalId}-${NodeId} | 仪表盘 |