数据监控

功能概述

Metrics数据监控平台提供一站式的数据可视化监控服务,实现数据的自动化采集及展示,帮助用户轻松了解底层平台运行情况,及时识别并处理异常。

数据监控平台由数据生成层Hyperchain、数据监控层Prometheus以及数据展示层Grafana三部组成。Hyperchain负责生成需要监控的数据并推送到Prometheus服务器中;Prometheus负责存储Hyperchian推送出来的数据,并对外提供读取接口;Grafana:负责从Prometheus服务器中读取数据,并在web上进行展示。

平台现已支持100+业务及系统层面的监控指标,指标开关灵活可配,具体可参考附录中的数据监控指标清单。

安装及初始化

为了能够完整的使用并展示数据监控的数据,除了需要应用层(即趣链区块链平台)适配并暴露一些监控数据之外,还需要下载并使用额外的两个组件:Prometheus(用于记录监控数据)以及Grafana(用于展示监控数据)。

安装Prometheus

Prometheus

Prometheus是一种时序数据库(TSDB, time-series database),用于记录平台推送出去的监控数据。

详细介绍请参考:https://prometheus.io/docs/introduction/overview/

安装下载请参考:https://prometheus.io/download/(建议安装最新版本)

Prometheus安装完成之后,需要配置好需要监听的区块链节点的地址与端口号,其配置文件默认为: prometheus.yml

node_exporter

如果用户希望监控系统资源的使用情况(例如CPU、磁盘、网络等),我们推荐使用Prometheus官方的工具node_exporter进行监控。

安装使用教程请参考:https://prometheus.io/docs/guides/node-exporter/

安装Grafana

Grafana是我们推荐使用的数据监控展示工具。

安装使用教程请参考:https://prometheus.io/docs/visualization/grafana/

相关配置

数据监控功能是可选的,即可以通过节点开关配置来决定节点是否启用数据监控,相关配置位于configuration/debug.toml中。

平台默认不开启数据监控功能, 如果您想启用该功能,请将下述配置复制到debug.toml中,并做好相应配置

  • metrics.enable:是否开启监控服务(true, false);

  • metrics.enable_expensive:是否开启资源消耗较大的监控服务,实际不建议开启,需谨慎选择

  • metrics.port:监控服务端口。

[metrics]
enable           = true
enable_expensive = false
# visit "http://127.0.0.1:'port'" to get metrics data
port             = 9001

参考教程

搭建简单的Linux服务监控:参考教程

数据指标

指标说明

数据指标按用途不同分为外部指标和内部指标;按对平台性能影响程度又分为normal级别与expensive级别。其中,normal级别的指标不影响平台的运行, expensive级别的指标打开后会降低平台整体的性能,因此需要用户谨慎选择开启。

有关于系统资源的使用情况,建议使用Prometheus官方推荐的node_exporter工具进行监控

系统相关指标

所有指标以”flato_namespace”(“flato”为趣链区块链平台新版英文简称)为前缀,例如在global这namespace下所有下述指标都要加上前缀”flato_global”(“flato”为趣链区块链平台新版英文简称)。

名称

类型

级别

描述

备注

execMgr_commit_txs

counter

normal

此次启动后新增的交易数量

可以通过rate/irate命令计算出交易TPS

execMgr_total_blocks

gauge

normal

当前链高度

可以通过rate/irate命令计算出区块BPS

rbft_batch_to_commit_duration

histogram

normal

共识区块处理时间(rbft从打包到提交的时间)

由于主从节点间有时差,因此以主节点的数据为主

execMgr_validate_tx_time

histogram

expensive

单笔交易执行时间

交易级别的平均处理时间

execMgr_commit_time

histogram

normal

写入区块处理时间(写块时间,包括区块组成、写入等等)

区块级别的平均写入时间

共识相关指标

所有指标以”flato_namespace”(“flato”为趣链区块链平台新版英文简称)为前缀,例如在global这个Namespace下所有下述指标都要加上前缀”flato_global”(“flato”为趣链区块链平台新版英文简称)。

RBFT

名称

类型

级别

描述

备注

rbft_ID

gauge

normal

rbft节点ID

rbft_version

gauge

normal

rbft共识协议版本号

rbft_epoch

gauge

normal

rbft当前共识所处的epoch

rbft_view

gauge

normal

rbft当前共识所处的view

rbft_cluster_size

gauge

normal

rbft当前共识节点的个数

rbft_quorum_size

gauge

normal

rbft当前quorum大小

rbft_status_normal

gauge

normal

rbft是否处于normal状态on:1;off:0

rbft_status_conf_change

gauge

normal

rbft是否处于配置区块状态on:2;off:0

rbft_status_viewchange

gauge

normal

rbft是否处于vc状态on:3;off:0

rbft_status_recovery

gauge

normal

rbft是否处于recovery状态on:4;off:0

rbft_status_state_update

gauge

normal

rbft是否处于state update状态on:5;off:0

rbft_status_pool_full

gauge

normal

rbft是否处于pool full状态on:6;off:0

rbft_status_pending

gauge

normal

rbft是否处于pending状态on:7;off:0

rbft_committed_block_number

counter

normal

rbft提交的区块数

rbft_committed_config_block_number

counter

normal

rbft提交的配置区块数

rbft_committed_empty_block_number

counter

normal

rbft提交的空块数(由vc导致的)

rbft_committed_txs

counter

normal

rbft提交的交易个数

rbft_txs_per_block

histogram

normal

rbft提交的每个区块的交易个数

rbft_batch_persist_duration

histogram

normal

rbft从打包到提交的时间

rbft_batche_number

gauge

normal

rbft当前缓存的batch个数

rbft_outstanding_batche_number

gauge

normal

rbft当前正在共识的batch个数,无负载时=0

rbft_state_update_times

counter

normal

rbft触发的StateUpdate的次数

rbft_cache_batch_number

gauge

normal

rbft当前缓存的已打包但是不能共识的batch个数,仅主节点有该值无负载时=0

rbft_fetch_missing_txs_times

counter

normal

rbft向主节点索取缺失交易的次数

rbft_fetch_request_batch_times

counter

normal

rbft向其他节点索取batch的次数

txset_incoming_txs

counter

normal

txset模块接收到的来自API的交易(这里包括了NVP转发过来的)

txset_pending_txs

counter

normal

txset模块等待共识的交易个数

rbft_incoming_local_tx_sets

counter

normal

rbft接收到的本地生成的txSet的个数

rbft_incoming_remote_tx_sets

counter

normal

rbft接收到的其他VP节点转发过来的txSet的个数

rbft_incoming_local_txs

counter

normal

rbft接收到的来自API的交易(这里包括了NVP转发过来的)

rbft_incoming_remote_txs

counter

normal

rbft接收到的其他VP节点转发过来的交易

rbft_rejected_local_txs

counter

normal

rbft拒收的来自API的交易

rbft_rejected_remote_txs

counter

normal

rbft拒收的其他VP节点转发过来的交易

注意:

  • 由于交易进入consensus模块之后需要经由txSet模块打包成一个set才能进入rbft模块,因此有txset_incoming_txs >= rbft_incoming_local_txs

txpool

名称

类型

级别

描述

备注

txpool_incoming_txs

counter

normal

txpool接收到的交易总数

txpool_duplicate_txs

counter

normal

txpool中检测到的重复交易

txpool_nonBatched_txs

gauge

normal

当前交易池中未打包的交易个数,无负载时=0

txpool_batched_txs

gauge

normal

当前交易池中已打包的交易个数

txpool_batches

gauge

normal

当前交易池中的batch个数,无负载时<20(共识缓存最多20个batch)有负载时从节点<50,主节点理论上无上限

注意:

  • txpool接收的交易是经由rbft模块传递下来的,因此有

txpool_incoming_txs = rbft_incoming_local_txs + rbft_incoming_remote_txs - rbft_reject_txs

存储相关指标

名称

类型

级别

描述

备注

db_accountdb_batchCommitTime

histogram

normal

写入accountdb的返回时间

db_statedb_batchCommitTime

histogram

normal

写入statedb的返回时间

db_metadb_batchCommitTime

histogram

normal

写入metadb的返回时间

db_chaindb_batchCommitTime

histogram

normal

写入chaindb的返回时间

db_blockdb_batchCommitTime

histogram

normal

写入blockdb的返回时间

db_journaldb_batchCommitTime

histogram

normal

写入journaldb的返回时间

db_receiptdb_batchCommitTime

histogram

normal

写入receiptdb的返回时间

db_indexdb_batchCommitTime

histogram

normal

写入indexdb的返回时间

db_dbtype_multicache_memSize

gauge

normal

多级缓存内存占用大小

db_dbtype_multicache_persist_time

histogram

normal

多级缓存持久化一个区块数据至底层数据库所需时间

db_dbtype_multicache_walPersist_time

histogram

normal

多级缓存写一个seqNo对应的wal的耗时

db_dbtype_multicache_cache_get

gauge

normal

multicache尝试从自身的读缓存中读取数据的次数

db_dbtype_multicache_cache_set

gauge

normal

multicache向自身的读缓存中插入数据的次数

db_dbtype_multicache_cache_hit

gauge

normal

multicache缓存命中的次数

db_dbtype_leveldb_compaction_occurrence

gauge

normal

底层leveldb compaction的次数

db_dbtype_leveldb_size

gauge

normal

底层leveldb的数据量大小

db_dbtype_filelog_fdNumber

gauge

normal

filelog中处于open状态的句柄数

db_dbtype_filelog_readTime

histogram

expensive

filelog读取一个元素的耗时

db_dbtype_filelog_fsyncTime

histogram

normal

filelog在一个log文件写完后,做一次fsync的耗时

执行相关指标

名称

类型

级别

描述

备注

bloomFilter_memSize

gauge

normal

布隆过滤器占用的内存大小

bloomFilter_lookCounter

counter

normal

布隆过滤器查询次数

有「source」标签说明调用查询的模块,分为“namespace表示共识去重”、“executor表示执行层去重”、“API表示接口层去重”

bloomFilter_lookExistCounter

counter

normal

布隆过滤器中,查询到存在的交易数量,即会穿透布隆过滤器进行db查询的次数

有「source」标签说明调用查询的模块,分为“namespace表示共识去重”、“executor表示执行层去重”、“API表示接口层去重”

execMgr_validate_bloom_readValidDBTime

histogram

normal

布隆过滤器发现交易可能重复后,查询合法交易的时间

execMgr_validate_bloom_readInvalidDBTime

histogram

normal

布隆过滤器发现交易可能重复后,查询非法交易的时间(会先查询合法交易,再查询非法交易,查询次数可能比合法交易少一些)

execMgr_validate_tx_time

histogram

expensive

单笔交易执行时间

execMgr_total_blocks

gauge

normal

当前链高度

execMgr_total_txs

gauge

normal

区块链所有交易总量

execMgr_online_txs

gauge

normal

区块链归档点后所有交易总量

execMgr_commit_txs

counter

normal

此次启动后新增的交易数量

execMgr_commit_time

histogram

normal

写块时间,包括区块组成、写入等等

execMgr_commit_writeDB_time

histogram

normal

区块batch写入数据库的时间

网络相关指标

P2P

名称

类型

级别

描述

备注

grpc_stream_request_send_total

counter

normal

grpc发送的流请求数目

grpc_stream_request_received_total

counter

normal

grpc收到的流请求数目

grpc_stream_request_completed_total

counter

normal

grpc完成的流请求的数目

grpc_stream_message_send_total

counter

normal

grpc发送的流消息的数目

grpc_stream_message_recv_total

counter

normal

grpc收到的流消息的数目

grpc_conn_opened_total

counter

normal

grpc连接打开数目。打开数目减去关闭数目便是目前活跃的连接数。

grpc_conn_closed_total

counter

normal

grpc连接关闭数目。打开数目减去关闭数目便是目前活跃的连接数。

grpc_stream_opened_total

counter

normal

grpc流打开数目。打开数目减去关闭数目便是目前活跃的流数。

grpc_stream_closed_total

counter

normal

grpc流关闭数目。打开数目减去关闭数目便是目前活跃的流数。

msg_dropped_count_total

counter

normal

某个节点在某个message channel弃的消息的数目

grpc_stream_message_send_time_microseconds

histogram

expensive

grpc发送一条消息所需要的时间

logic_conn_opened_count_total

counter

normal

逻辑连接打开数目。打开数目减去关闭数目便是目前活跃的连接数。

logic_conn_closed_count_total

counter

normal

逻辑连接关闭数目。打开数目减去关闭数目便是目前活跃的连接数。

grpc_network_receive_bytes_total

counter

normal

grpc网络接收到的消息大小总量

grpc_network_send_bytes_total

counter

normal

grpc网络发送的消息大小总量

消息分发

名称

类型

级别

描述

备注

dispatcher_%s_writeMsg_ch_size_usage

gauge

normal

消息分发器发送消息通道对应节点的模块消息数量

dispatcher_%s_writeMsg_ch_mem_usage

gauge

normal

消息分发器发送消息通道对应节点的模块消息占用内存的大小

dispatcher_%s_readMsg_ch_size_usage

gauge

normal

消息分发器接收消息通道对应节点的模块消息数量

dispatcher_%s_readMsg_ch_mem_usage

gauge

normal

消息分发器接收消息通道对应节点的模块消息占用内存的大小

API相关指标

名称

类型

级别

描述

jsonrpc_request_received_total

counter

normal

接收的jsonrpc请求个数

jsonrpc_new_tx_request_success_total

counter

normal

成功处理的发送交易相关请求的个数

jsonrpc_new_tx_request_error_total

counter

normal

发送交易相关请求处理失败,不同失败原因的请求个数

jsonrpc_received_request_bytes_total

counter

normal

请求总流量统计单位byte

jsonrpc_sent_response_bytes_total

counter

normal

响应总流量统计单位byte

jsonrpc_new_tx_request_consensus_abnormal_error_total

counter

normal

由于共识状态异常原因导致请求失败的个数

密码相关指标

名称

类型

级别

描述

备注

verify_tube_signature_in_total

counter

normal

输入验签管道的总签名数

verify_tube_signature_out_total

counter

normal

输出验签管道的总签名数

vt_liner_duration_cycle

Histogram

normal

完成批量验证两段子操作的时间

vt_logic_duration_cycle

Histogram

normal

验签中每段操作的时间

vt_hash_duration_cycle

Histogram

normal

完成哈希的时间

verify_tube_batch_size

Gauge

normal

每批次的签名数量

crypto_verify_channel_length

Gauge

normal

每个阶段的缓冲池大小

Go相关指标

名称

类型

级别

描述

备注

go_goroutines

gauge

normal

go_threads

gauge

normal

go_gc_duration_seconds

summary

normal

go_info

gauge

normal

alloc_bytes

gauge

normal

alloc_bytes_total

counter

normal

sys_bytes

gauge

normal

lookups_total

counter

normal

mallocs_total

counter

normal

frees_total

counter

normal

heap_alloc_bytes

gauge

normal

heap_sys_bytes

gauge

normal

heap_idle_bytes

gauge

normal

heap_inuse_bytes

gauge

normal

heap_released_bytes

gauge

normal

heap_objects

gauge

normal

stack_inuse_bytes

gauge

normal

stack_sys_bytes

gauge

normal

mspan_inuse_bytes

gauge

normal

mspan_sys_bytes

gauge

normal

mcache_inuse_bytes

gauge

normal

mcache_sys_bytes

gauge

normal

buck_hash_sys_bytes

gauge

normal

gc_sys_bytes

gauge

normal

other_sys_bytes

gauge

normal

next_gc_bytes

gauge

normal

last_gc_time_seconds

gauge

normal

gc_cpu_fraction

gauge

normal