Caliper监控模块用于在测试执行期间收集资源利用率和交易统计信息,并将输出整理到生成的报告中。Caliper通过以下方式监控资源和交易:
资源监视器。在基准测试期间收集资源利用率的统计数据,测试轮之间的监控重置。交易监视器。收集工作进程交易统计信息并提供有条件的分派操作。在测径仪基准中使用的资源监视器的类型在benchmark configuration file中通过规范在标签下的数组中声明一个或多个监视模块monitors.resource。
允许的监测器包括:
进程:进程监视器支持监视主机上的命名进程,通常用于监视正在运行的客户端所消耗的资源。此监视器将检索以下- 各项的统计信息:[内存(max)、内存(avg)、CPU(max)、CPU(avg)、网络I/O、磁盘I/O]Docker:Docker监视器通过使用Docker remote API检索容器统计信息,实现对主机或远程机器上指定的Docker容器的监控。此监视器将检索以下各项的统计信息:[内存(max)、内存(avg)、CPU(max)、CPU(avg)、网络I/O、磁盘I/O]Prometheus:Prometheus监视器可以检索Prometheus的数据。此监视器将仅根据用户提供的显式查询报告,这些查询是发给Prometheus的。如果被定义,提供一个Prometheus服务器将导致Caliper默认使用PrometheusPushGateway。每个声明的资源监视模块都附带配置每个命名监控器所需的选项。所有模块的一个常见选项是interval,它用于配置刷新间隔,在该时间点上,监视器测量资源利用率。
过程监控模块选项包括:
间隔:监视器更新间隔 进程:[command, arguments, multiOutput]数组的键:值对。
命令:命名要监视的父进程参数:正在监视的父进程上的筛选器multiOutput:允许处理多个进程的发现,并且可以是:avg:取在command/name下发现的进程值的平均值sum:对在command/name下发现的所有进程值求和下面声明监视匹配的所有本地节点进程caliper.js,更新频率为3秒,并且所执行的所有已发现进程的平均值。
monitors: resource: - module: process options: interval: 3 processes: [{ command: 'node', arguments: 'caliper.js', multiOutput: 'avg' }]docker监控模块选项包括:
间隔:监视器更新间隔 容器:容器名称的数组,可能与要监视的本地或远程docker容器有关。如果要监视所有本地docker容器,可以通过提供all作为名称来实现
以下声明监视两个命名docker容器;一个本地容器,另一个远程容器,更新频率为5秒:
monitors: resource: - module: docker options: interval: 5 containers: - peer0.org1.example.com - http://192.168.1.100:2375/orderer.example.com以下声明监视所有本地docker容器,更新频率为5秒:
monitors: resource: - module: docker options: interval: 5 containers: - allPrometheus是一个开源系统监控和警报工具包,它可以直接或通过中介推送网关(push gateway)从检测的作业中获取指标。它将所有刮取的样本存储在本地,并对这些数据运行规则,从现有数据中聚合和记录新的时间序列,或者生成警报。Grafana或其他API使用者可以用来可视化收集的数据。
所有存储在Prometheus上的数据都可以通过Caliper使用Prometheus查询HTTP API进行查询。这至少可以用于执行聚合查询,以便报告交易统计信息,但也可以执行自定义查询,以便报告从其他连接源获取的信息。发出的查询旨在生成报告,因此预期会生成单个值,或通过应用统计例程将其压缩为单个值的向量。建议使用Grafana创建所需的查询,以确保在将查询传输到监视器之前操作正确。有关更多信息,请参阅Prometheus和Grafana的文档。
配置Prometheus监视器
Prometheus监控模块选项包括:
间隔:监视器更新间隔url:Prometheus的url,用于直接查询度量:要运行以包含在Caliper报告中的查询,由to键组成:include和queries。 include一个字符串数组,该数组用于通过javascript正则表达式确定度量包含。在queries块中指定的感兴趣标签通过regex与include列表中的项目匹配的任何查询结果都将包含在生成的报告中。 queries一系列块,用于描述在每个测径仪测试结束时要运行的查询。查询块的定义如下:
名称:查询相关的度量名称,在生成报表时使用查询:在每个测试结束时发送给Prometheus服务器的查询。请注意,Caliper将为查询添加时间边界,以便只包含与测试轮相关的结果。步长:要在范围查询中使用的计时步长标签:要与返回的查询匹配的字符串,并在填充报表时用作组件标识符统计:如果返回多个值,例如,如果查看某个时间范围内的特定资源,则统计信息会将这些值压缩为单个结果,以支持报告。允许的选项包括: avg:返回所有值的平均值 max:返回所有值的最大值 min:返回所有值的最小值 sum:返回所有值的总和multiplier:可选的乘数,可用于将导出的度量转换为更方便的值(例如将字节转换为GB)下面声明一个Prometheus监视器,它将在基准测试中的每个测试之间运行两个定制查询
monitors: resource: - module: prometheus options: interval: 5 url: "http://localhost:9090" metrics: include: [dev-.*, couch, peer, orderer] queries: - name: Endorse Time (s) query: rate(endorser_propsal_duration_sum{chaincode="marbles:v0"}[1m])/rate(endorser_propsal_duration_count{chaincode="marbles:v0"}[1m]) step: 1 label: instance statistic: avg - name: Max Memory (MB) query: sum(container_memory_rss{name=~".+"}) by (name) step: 10 label: name statistic: max multiplier: 0.000001上述两个查询将在生成的报告中分别列为“背书时间”和“最大内存(MB)”:
背书时间:以1为步长运行列出的查询;使用instance标签筛选Prometheus查询响应中的返回标记;如果实例值与include数组中提供的任何字符串值不匹配,则排除结果;如果实例与include选项匹配,然后确定所有返回结果的平均值,并返回要在“背书时间”下报告的值。最大内存(MB):以10为步长运行列出的查询;使用名称标签过滤Prometheus查询响应中的返回标记;如果实例值与include数组中提供的任何字符串值不匹配,则排除结果;如果实例与include选项匹配,然后确定所有返回结果的最大值;乘以提供的乘数,并返回要在“最大内存(MB)”下报告的值。返回的组件(带有通过针对include数组项的regex测试的标签)将包含在报表中;所有其他组件都将被忽略。
基本身份验证
可以使用通过提供用户名和密码作为运行时参数的基本身份验证来保护的Prometheus服务器,其标志如下:
caliper-auth-prometheus-usernamecaliper-auth-prometheus-password它们将用于在建立连接之前扩充基于配置文件的URL。
获得一个支持Prometheus的网络
一个示例网络包括一个docker-compose文件,用于建立一个Prometheus服务器、一个Prometheus PushGateway和一个链接的Grafana分析容器,可以在附带的caliper基准库中找到。
Caliper工作人员使用交易监视器来完成交易。它们在内部用于聚合交易统计信息并将其分配给管理器进程,以启用交易统计信息聚合,以便通过默认观察者进行进度报告,并生成报告。
通过使用内部交易监视器的信息进行进度报告的默认观察者可以通过配置文件设置进行更新:
caliper-progress-reporting-enabled:启用进度报告的布尔标志,默认为truecaliper-progress-reporting-interval:设置更新频率的数值,以毫秒为单位(默认值为5000)其他交易监视模块包括:
loggingprometheus-push可以指定一个或多个交易模块,方法是将它们命名为带有一个数组格式的随附选项块的模块monitors.transaction。
日志交易模块用于在测试轮完成时,在worker中记录聚合的交易统计信息。下面指定了日志交易观察器的使用。模块不需要任何选项。
monitors: transaction: - module: loggingprometheus交易模块用于通过一个scrape机制将所有worker的当前交易统计信息公开给prometheus服务器。该模块公开了以下指标:
caliper_tx_submitted (counter)caliper_tx_finished (counter)caliper_tx_e2e_latency (histogram)下面指定了一个prometheus交易模块的使用,该模块公开默认端口(3000)和默认的scrape URL(/metrics)上的收集指标。
monitors: transaction: - module: prometheus如果使用基于进程的worker操作,则每个worker将使用其基于0的索引递增默认(或重写)端口,从而在不同端口上公开每个worker的度量。
用户有责任配置一个Prometheus服务器,通过正确指定的配置文件正确地针对暴露的url。
选项包括:
metricPath:覆盖要刮取的度量路径(默认值/度量值)。scrapport:覆盖配置scrape服务器时要使用的端口(默认3000)。processMetricCollectInterval:默认度量收集的时间间隔,如果存在,则启用defaultLabels:对象键值对在收集期间扩充应用于公开度量的默认标签。histogramBuckets:覆盖柱状图,用于收集Caliper延迟explicit:自定义bucket的直接传递 线性:使用具有用户定义的开始、宽度和计数参数的线性铲斗
起始:起始铲斗大小宽度:铲斗宽度count:要创建的存储桶数指数
起始:起始铲斗大小因子:bucket因子count:要创建的存储桶数prometheus push transaction模块用于通过push网关将所有worker的当前交易统计信息公开给prometheus服务器。该模块公开了以下指标:
caliper_tx_submitted(计数器)caliper_tx_finished(计数器)caliper_tx_e2e_latency(柱状图)下面指定使用一个prometheus push交易模块,该模块将当前交易统计信息发送到位于http://localhost:9091,间隔5秒。
monitors: transaction: - module: prometheus-push options: pushInterval: 5 pushUrl: "http://localhost:9091"选项包括:
pushInterval:覆盖要刮取的度量路径(默认值/度量值)。pushUrl:Prometheus推送网关的URLprocessMetricCollectInterval:默认度量收集的时间间隔,如果存在,则启用defaultLabels:对象键:值对在收集期间扩充应用于公开度量的默认标签。histogramBuckets:覆盖柱状图,用于收集Caliper延迟explicit:自定义bucket的直接传递 线性:使用具有用户定义的开始、宽度和计数参数的线性铲斗
起始:起始铲斗大小宽度:铲斗宽度count:要创建的存储桶数指数
起始:起始铲斗大小因子:bucket因子count:要创建的存储桶数prometheus-push交易模块的使用取决于Prometheus Push Gateway的可用性和使用情况,该网关可作为Prometheus的刮取目标。
基本身份验证
可以使用Prometheus Push Gateway,该网关通过提供用户名和密码作为运行时参数,通过基本身份验证进行保护,其标志如下:
caliper-auth-prometheuspush-usernamecaliper-auth-prometheuspush-password它们将用于在建立连接之前扩充基于配置文件的URL。
Grafana可视化
Grafana是一个分析平台,可以用来查询和可视化Prometheus收集的指标。Caliper客户端通过直接刮取或间接通过Prometheus Push Gateway提供以下指标:
caliper_tx_submitted (counter)caliper_tx_finished (counter)caliper_tx_e2e_latency (histogram)以上每一项都使用以下默认标签进行标记:
roundLabel:当前测试的圆形标签roundIndex:当前测试轮数索引workerIndex:从零开始发送信息的worker索引我们目前正在开发一个Grafana仪表板,让您可以立即访问上面发布的指标,但在此期间,请随意创建自定义查询,以查看可实时访问的上述指标。
每个监控器的数据都可以通过每个监控器的基准配置文件中的选项以图表形式输出到生成的Caliper报告中。除了资源监视器的表格数据之外,Caliper当前支持使用charting.js:
水平条极区图表是可用于每个资源监视器的选项,要生成的图表规范在基准配置文件中的每个监控器类型下的charting块下指定。可以为单个资源监视器指定多个图表选项。
图表将包含监视器正在跟踪的所有项目的数据;只能筛选要绘制图表的度量。下面声明对所列监控器有效的图表块:
charting: bar: - metrics: [all | <sting list>] polar: - metrics: [all | <sting list>]如果指定了all选项,则将为每个度量输出一个图表,并包含每个图表中的所有监控项。通过提供逗号分隔的列表,可以过滤度量。所提供的列表与使用字符串比较的度量相匹配,因此只需要提供所需匹配的初始部分。以下声明了一个图表块,该图表块指定所有可用度量的条形图,以及仅用于metric0和metric1的极坐标图:
charting: bar: - metrics: [all] polar: - metrics: [metric0, metric1]进程资源监视器公开以下指标:内存(max)、内存(avg)、CPU%(max)、CPU%(avg)。
下面声明了对名为caliper.js,并指定图表选项为all可用指标生成条形图。将生成包含所有监控过程的数据的图表:
monitors: resource: - module: process options: interval: 3 processes: [{ command: 'node', arguments: 'caliper.js', multiOutput: 'avg' }] charting: bar: metrics: [all]docker资源监视器公开以下指标:内存(max)、内存(avg)、CPU%(max)、CPU%(avg)、Traffic In、Traffic Out、Disc Read、Disc Write。
下面声明了对所有本地docker容器的监视,并指定了图表选项来生成Memory(avg)和CPU%(avg)的条形图,以及所有度量的极坐标图。将生成包含来自所有受监控容器的数据的图表:
monitors: resource: - module: docker options: interval: 5 containers: - all charting: bar: metrics: [Memory(avg), CPU%(avg)] polar: metrics: [all]Prometheus监视器允许用户定义配置文件中的所有度量。
下面声明了对两个用户定义的度量的监视:Endorse Time(s)和Max Memory(MB)。图表选项被指定为生成在度量Max Memory (MB)上过滤的极坐标图,以及所有用户定义度量的条形图。
monitors: resource: - module: prometheus options: interval: 5 url: "http://localhost:9090" metrics: include: [dev.*, couch, peer, orderer] queries: - name: Endorse Time (s) query: rate(endorser_propsal_duration_sum{chaincode="marbles:v0"}[1m])/rate(endorser_propsal_duration_count{chaincode="marbles:v0"}[1m]) step: 1 label: instance statistic: avg - name: Max Memory (MB) query: sum(container_memory_rss{name=~".+"}) by (name) step: 10 label: name statistic: max multiplier: 0.000001 charting: polar: metrics: [Max Memory (MB)] bar: metrics: [all]参考自官方文档 如有侵权,请联系作者删除,谢谢! If there is infringement, please contact the author to delete, thank you!