课题四所需度量指标
CPU负载、并行CPU负载
内存占用
网络IO
节点负载
系统响应时间
延迟
交易成功率
交易总数 发送交易所用的总时间 所有交易大小 每秒提交的交易数 每秒提交的数据大小
共识节点投票权(判断现有节点是否满足共识要求 不满足需进行调整)
内存池交易数量(某一节点内存池交易数量过多过少 做出调整)
Tendermint现有的度量指标
Tendermint的Metrics主要分为两类:Tendermint本身的Metrics和应用程序的Metrics。Tendermint本身的Metrics包括p2p的Metrics,consensus的Metrics,mempool和state相关的Metrics;应用程序的Metrics主要包括从客户端收到的请求数、每秒钟处理的请求数、处理请求的平均时间等。
共识:共识高度 共识验证节点数 所有验证者的总投票权 验证集中节点的投票权 验证节点签署的最新区块高度 验证节点丢失的区块 共识是否快速同步 共识状态同步 共识区块大小
Name Type Tags Description
consensus_height //区块链高度 Gauge Height of the chain
consensus_validators
//参与共识验证节点数
Gauge Number of validators
consensus_validators_power
//所有验证者的总投票权
Gauge Total voting power of all validators
consensus_validator_power
//验证集中节点的投票权
Gauge Voting power of the node if in the validator set
consensus_validator_last_signed_height
//验证节点签署的最新区块高度
Gauge Last height the node signed a block, if the node is a validator
consensus_validator_missed_blocks
//验证节点丢失的区块
Gauge Total amount of blocks missed for the node, if the node is a validator
consensus_missing_validators
//未参与签名的验证节点数
Gauge Number of validators who did not sign
consensus_missing_validators_power
//丢失的验证节点投票权
Gauge Total voting power of the missing validators
consensus_byzantine_validators
//拜占庭验证节点数量
Gauge Number of validators who tried to double sign
consensus_byzantine_validators_power
//拜占庭验证节点投票权
Gauge Total voting power of the byzantine validators
consensus_block_interval_seconds
//相邻两个区块共识的时间间隔
Histogram Time between this and last block (Block.Header.Time) in seconds
consensus_rounds
//共识轮数
Gauge Number of rounds
consensus_num_txs
//共识的交易数量
Gauge Number of transactions
consensus_total_txs
//共识的已提交的交易数量
Gauge Total number of transactions committed
consensus_block_parts
//对等体传输的区块
Counter peer_id Number of blockparts transmitted by peer
consensus_latest_block_height
//共识的最新区块高度
Gauge /status sync_info number
consensus_fast_syncing
//是否快速同步
Gauge Either 0 (not fast syncing) or 1 (syncing)
consensus_state_syncing
//状态同步
Gauge Either 0 (not state syncing) or 1 (syncing)
consensus_block_size_bytes
//共识区块字节大小
Gauge Block size in bytes
consensus_step_duration
//共识协议中每一步的时间
Histogram step Histogram of durations for each step in the consensus protocol
consensus_block_gossip_parts_received
//节点接受的区块部分
Counter matches_current Number of block parts received by the node
p2p_message_send_bytes_total
//每一种发送到所有peer的消息类型的字节数
Counter message_type Number of bytes sent to all peers per message type
p2p_message_receive_bytes_total
//每一种由所有peer接受的消息类型的字节数
Counter message_type Number of bytes received from all peers per message type
p2p_peers
//对等体的数量
Gauge Number of peers node’s connected to
p2p_peer_receive_bytes_total
//给定peer接受到的字节数
Counter peer_id, chID Number of bytes per channel received from a given peer
p2p_peer_send_bytes_total
//给定peer发送的字节数
Counter peer_id, chID Number of bytes per channel sent to a given peer
p2p_peer_pending_send_bytes
//给定peer挂起的比特数
Gauge peer_id Number of pending bytes to be sent to a given peer
p2p_num_txs
//每个peer提交的交易数量
Gauge peer_id Number of transactions submitted by each peer_id
p2p_pending_send_bytes
//所有peer挂起的字节数
Gauge peer_id Amount of data pending to be sent to peer
mempool_size
//未提交事务的数量
Gauge Number of uncommitted transactions
mempool_tx_size_bytes
//交易大小
Histogram Transaction sizes in bytes
mempool_failed_txs
//失败的交易数量
Counter Number of failed transactions
mempool_recheck_times
//重新检测内存池中的交易所花费的时间
Counter Number of times transactions rechecked in the mempool
state_block_processing_time
//开始区块到最终区块的处理时间
Histogram Time between BeginBlock and EndBlock in ms
Q:peer和node的区别和联系?
Peer是一个node加入P2P网络并与其他node进行通信的角色,通过Peer-to-Peer协议进行交流,并互相广播交易和块。
Node区块链网络的节点。Tendermint node既扮演了Peer角色,也扮演了Validator角色(在共识算法中负责验证交易和生产块),并在网络中与其他node进行交互。
Tendermint中的node既包含Peer,也包含Validator。Tendermint node可以同时作为Peer和Validator,参与到共识过程中。
tm-load-test测试kvstore流程:
1.在workspace目录下载源码
git clone https://github.com/informalsystems/tm-load-test.git
note:tm-load-test v1.3.0要求GO v1.20
2.编译
make
在tm-load-test/build目录下生成tm-load-test二进制文件
3.将tm-load-test移动到gobin目录下
mv ~/workspace/tm-load-test/build/tm-load-test ~/env/gobin
4.修改tendermint配置文件 .tendermint/config/config.toml 不允许生成空块
5.tendermint启动kvstore应用实例
tendermint node --proxy_app=kvstore
6.Standalone模式测试kvstore
tm-load-test -c 1 -T 10 -r 1000 -s 250
–broadcast-tx-method async
–endpoints ws://127.0.0.1:26657/websocket
生成测试数据输出文件:
tm-load-test -c 1 -T 10 -r 1000 -s 250
–broadcast-tx-method async
–endpoints ws://tm-endpoint1.somewhere.com:26657/websocket
–stats-output ~/workspace/tm-load-test/test/stats.csv
stats文件
Parameter Value Units
total_time 10.018 seconds
total_txs 9000 count
total_bytes 2250000 bytes
avg_tx_rate 898.352105 transactions per second
avg_data_rate 224588.0262 bytes per second
Tendermint Load Testing Framework
1.创建项目 (如tm-load-test)
2.创建装载测试客户端(如kvstore tm-load-test/pkg/loadtest/client_kvstore.go )
3.创建命令行界面cli (如tm-load-test/cmd/tm-load-test/main.go)
4.build cli
go build -o [build flags] [packages]
5.运行负载测试(如./tm-load-test)
tm-load-test/pkg/loadtest(装载测试工具)文件包详解:
cli.go 由tm-load-test/main.go调用run函数执行 buildCli()建立命令行:Standalone Mode;Coordinator/Worker Mode;
Run() 执行命令
func Run(cli *CLIConfig) {
logger := logging.NewLogrusLogger(“main”)
if err := buildCLI(cli, logger).Execute(); err != nil {
logger.Error(“Error”, “err”, err)
}
}
文件 描述
cli.go
由tm-load-test/main.go调用run函数执行 buildCli()建立命令行:
Standalone Mode;Coordinator/Worker Mode;
client.go
产生负载测试客户端的接口文件
具体测试文件(如client_kvstore) 产生负载测试客户端与
Tendermint应用程序交互
config.go
将Standalone Mode;Coordinator/Worker Mode下的配置解析为JSON格式;
验证配置是否满足执行条件
loadtest.go Standalone Mode下的负载测试
stats.go
计算聚合统计指标(AvgTxRate 、AvgDataRate)
将度量指标写入指定格式文件中(如csv)
websocket.go websocket通信配置
Tendermint自带metrics度量运:
1.开启prometheus服务 .tendermint/config/config.toml
2.查看metrics
curl http://127.0.0.1:26660/metrics
在Tendermint中,Metrics是通过Prometheus的客户端库实现的。Prometheus的客户端库会在Tendermint启动时启动一个HTTP服务器来提供metrics信息,它会监听一个端口,当有请求时返回metrics信息。这个端口默认为26660,可以在Tendermint的配置文件中进行配置。
具体来说,Tendermint的Metrics运行逻辑如下:
Prometheus监听Tendermint
1.下载、解压Prometheus
tar xvfz prometheus-2.44.0.linux-amd64.tar.gz
cd prometheus-2.44.0.linux-amd64
2.配置Prometheus监听Tendermint 修改prometheus.yml配置文件
3.开启Prometheus
./prometheus --config.file=prometheus.yml
4.使用web UI查看metrics
Q:Prometheus为什么没有p2p的metrics?
4.使用聚合表达式计算指标
可以配置新的度量指标
新建指标rule文件prometheus.rules.yml
prometheus.yml文件引用rule
总结:Prometheus服务:
Prometheus Pushgateway
(Prometheus pushgateway是一个独立的中间代理工具,Pushgateway的主要作用是允许短暂的任务(如批处理作业和单次任务)将metricsPushgateway,然后Pushgateway将这些指标发送给Prometheus,以便Prometheus可以收集这些瞬时数据和长时间运行的任务的数据并绘制正确的时间序列图。
/如果应用程序存在一些短暂的作业,例如批处理或测试任务,可以使用Pushgateway来存储这些指标,并让Prometheus从Pushgateway中拉取这些指标。这样,可以提高可扩展性,并且无需开启过多的端口。/
详细文档。。。
Q:Tendermint应用程序负载测试是否可以集成到Prometheus?
论文:
链接: