캘리퍼 모니터링 모듈은 테스트가 실행 중 리소스 사용 및 트랜잭션 통계를 수집하기 위해 사용한다. 출력은 생성된 리포트에 대조된다. 캘리퍼는 다음을 사용해 리소스와 트랜잭션을 모니터한다:
캘리퍼 벤치마트에서 사용될 리소스 모니터 타입은 벤치마크 구성 파일에서 선언된다. 이것은 monitors.resource
라벨 아래 배열에서 하나 이상의 모니터링 모듈을 지정함으로써 선언된다.
허용된 모니터는 다음과 같다:
프로세스: process
모니터는 호스트 머신에서 명명된 프로세스의 모니터링을 활성화한다. 이것은 일반적으로 러닝 클라이언트에 의해 소비되는 리소스를 모니터링하기위해 사용된다. 이 모니터는 다음 통계들을 수신할 것이다: [memory(max), memory(avg), CPU(max), CPU(avg), Network I/O, Disc I/O]
도커: docker
모니터는 호스트 또는 리모트 머신의 지정된 도커 컨테이너 모니터링을 활성화한다. 컨테이너 통계를 수신하기 위해 Docker Remote API를 사용한다. 이 모니터는 다음 통계들을 수신할 것이다: [memory(max), memory(avg), CPU(max), CPU(avg), Network I/O, Disc I/O]
프로메테우스: prometheus
모니터는 프로메테우스로부터 검색된(retrieval) 데이터 모니터링을 활성화한다. 이 모니터는 프로메테우스에 발생된, 명시적 사용자 제공 쿼리를 기반으로만 보고한다. 정의될 경우 프로메테우스 서버를 제공하면 캘리퍼가 Prometheus PushGateway를 기본적으로 사용하게 된다.
프로세스 모니터링 모듈 옵션은 다음으로 구성되어 있다:
command/name
아래에서 탐색된 프로세스 값들의 평균값을 가진다.command/name
아래에서 탐색된 모든 프로세스 값의 합다음은 caliper.js
와 일치하는 모든 로컬 node
프로세스를 모니터링한다고 선언한다. 업데이트 빈도는 3초이고, 모든 탐색된 프로세스의 평균 값이 얻어진다.
monitors:
resource:
- module: process
options:
interval: 3
processes: [{ command: 'node', arguments: 'caliper.js', multiOutput: 'avg' }]
도커 모니터링 모듈 옵션은 다음을 포함한다:
all
을 사용할 수 있다.다음은 명명된 두 도커 컨테이너를 선언한다; 하나는 로컬이고 다른 하나는 원격으로, 업데이트 간격 5초를 가진다:
monitors:
resource:
- module: docker
options:
interval: 5
containers:
- peer0.org1.example.com
- http://192.168.1.100:2375/orderer.example.com
모든 로컬 컨테이너를 5초 업데이트 간격을 가지고 모니터링 할 것은 다음과 같이 선언한다:
monitors:
resource:
- module: docker
options:
interval: 5
containers:
- all
프로메테우스는 오픈 소스 시스템 모니터링 및 알림 툴킷이다. 이것은 작업들에 대한 측정지표(메트릭스)를 직접 또는 단기 작업을 위한 중개 푸쉬 게이트웨이를 통해 가져온다. 이는 모든 가져온 샘틀들을 로컬에 저장하고, 기존 데이터에서 새 시계열을 집계 및 기록하거나 경고를 생성하기 위해 이 데이터에 규칙을 실행한다.
프로메테우스에 저장된 모든 데이터는 프로메테우스 쿼리 HTTP API를 사용해 캘리퍼에서 쿼리한다. 이것은 최소한도로는 트랜잭션 통계를 다시 보고하기 위한 쿼리 집계 수행에 사용될 수 있지만, 다른 연결된 소스들로부터 가져온 정보를 다시 보고하기 위한 커스텀 쿼리 수행에도 사용할 수 있다. 발행된 쿼리는 리포트를 생성하기 위한 것이므로 단일 값 또는 통계 루틴을 통해 단일 값으로 압축될 수 있는 벡터가 생성될 것으로 예상된다. 올바른 동작을 보장하기 위해 쿼리를 모니터로 전송하기 전에 Grafana를 사용하여 필수 쿼리를 생성하는 것이 좋다. 더 많은 정보는 Prometheus와 Grafana 문서를 보자.
프로메테우스 모니터링 모듈 옵션은 다음으로 구성된다:
include
및 queries
로 구성된다.label
이 정규식을 통한 포함 목록에 있는 아이템과 일치하는 쿼리 결과는 모두 생성되는 리포트에 포함된다.queries
는 다음에 의해 정의된다:
다음은 벤치마크에서 각 테스트 사이에 두 가지 맞춤형 쿼리를 실행하는 프로메테우스 모니터를 선언한다:
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
위 두 쿼리는 생성되는 리포트에 각각 "Endorse Time (s)"와 "Max Memory (MB)"로 나열된다.
instance
레이블을 사용해 프로메테우스 쿼리 결과 내에서 반환된 태그를 필터링한다. 인스턴스 값이 include
배열에서 제공되는 문자열 값 중 하나와 정규식으로 일치하지 않으면 결과가 포함되지 않는다. 인스턴스가 포함 옵션과 일치하면 모든 반환된 결과의 평균이 결정되고 이 값이 "Endorse Time (s)"으로 보고된다.name
레이블을 사용해 프로메테우스 쿼리 결과 내에서 반환된 태그를 필터링한다. 인스턴스 값이 include
배열에서 제공되는 문자열 값 중 하나와 정규식으로 일치하지 않으면 결과가 포함되지 않는다. 인스턴스가 포함 옵션과 일치하면 모든 반환된 결과에서 최대값이 결정된다. 제공된 승수를 곱하고 “Max Memory (MB)”로 반환한다.include
배열 아이템에 대한 정규식 테스트를 통과한 라벨을 가진 반환된 구성요소들은 리포트에 포함된다. 나머지는 생략된다.
다음 플래그를 사용해 런타임 파라미터로 사용자명과 비밀번호를 제공함으로써, 기본 인증을 통해 보호되는 프로메테우스 서버를 이용할 수 있다:
이것들은 커넥션 생성 이전에 구성 파일 기반 URL을 보강하기 위해 사용된다.
caliper-benchmarks repository에서 프로메테우스 서버, 프로메테우스 푸쉬게이트웨이, 링크된 그라파나 해석 컨테이너를 만들기 위한 docker-compose file을 포함한 샘플 네트워크를 얻을 수 있다.
트랜잭션 모니터는 트랜잭션 완료 시 동작하기 위해 캘리퍼 워커에 의해 사용된다. 그것들은 내부적으로 트랜잭션 통계를 집계하고 매니저 프로세스로 발송해서 기본 옵저버를 통한 진행 보고 및 리포트 생성을 위한 트린잭션 통계 집계를 활성화하기 위해 사용된다.
내부 트랜잭션 모니터의 정보를 사용해 진행을 보고하는 기본 옵저버는 구성 파일 설정을 통해 업데이트 될 수 있다.
caliper-progress-reporting-enabled
: 진행 보고를 활성화시키는 불리언 플래그. 기본값은 true.caliper-progress-reporting-interval
: 빈도를 업데이트하기 위한 숫자 값. 밀리세컨드 단위(기본값은 5000).추가 트랜잭션 모니터링 모듈은 다음을 포함한다:
하나 이상의 트랜잭션 모듈은 추가 블록이 동반되는 모듈로서 이름을 지정해 특정지을 수 있다. 옵션 블록은 monitors.transaction
아래 배열 형태를 가진다.
logging
트랜잭션 모듈은 테스트 라운드 종료 시 집계된 트랜잭션 통계를 기록하는데에 사용된다. 다음은 logging
트랜잭션 옵저버 사용을 지정한다. 모듈에 필수적인 옵션은 없다.
monitors:
transaction:
- module: logging
prometheus
트랜잭션 모듈은 스크랩 메커니즘을 통해 모든 워커의 현재 트랜잭션 통계를 프로메테우스 서버로 노출시키기 위해 사용된다. 모듈은 다음 측정지표(메트릭스)를 노출한다:
다음은 기본 포트(3000)과 기본 스크랩 URL(/metrics)에 수집을 위한 측정지표(메트릭스)를 노출하는 프로메테우스 트랜잭션 모듈 사용을 지정한다.
monitors:
transaction:
- module: prometheus
프로세스 기반 워커로 작동하는 경우, 각 워커는 0 기반 인덱스를 사용해 기본(또는 오버라이딩한) 포트를 증가시켜 각 워커가 다른 포르에 메트릭스를 노출하게 된다.
올바르게 지정된 구성 파일을 통해 노출된 url들을 정확하게 타게팅하는 프로메테우스 서버 구성은 사용자의 책임이다.
추가 구성:
/metrics
).caliper_tx_e2e_latency
수집에 사용되는 히스토그램을 오버라이딩한다.prometheus-push
트랜잭션 모듈은 push gateway를 통해 모든 워커의 현재 트랜잭션 통계를 프로메테우스 서버에 노출시키기 위해 사용된다. 모듈은 아래 메트릭스들을 노출시킨다:
다음은 현재 트랜잭션 통계를 http://localhost:9091
에 있는 push gateway로 5초 간격으로 보내는 prometheus-push
트랜잭션 모듈 사용을 지정한다.
monitors:
transaction:
- module: prometheus-push
options:
pushInterval: 5
pushUrl: "http://localhost:9091"
추가 구성:
/metrics
).prometheus-push
트랜잭션 모듈 사용은 프로메테우스에 대한 스크랩 대상이 될 수 있는 Prometheus Push Gateway의 가용성 및 사용을 전제로 한다.
런타임 파라미터로 사용자 이름과 비밀번호를 제공해 기본 인증으로 보호되는 Prometheus Push Gateway를 사용할 수 있다. 아래 플래그를 사용한다:
그라파나는 프로메테우스로 수집된 메트릭스를 쿼리하고 시각화하기 위해 사용할 수 있는 분석 플랫폼이다. 캘리퍼 클라이언트는 아래 메트릭스를 사용할 수 있다. 직접 스크랩 또는 프로메테우스 푸쉬 게이트웨이를 통해 사용할 수 있다.
위 각각은 아래 기본 레이블로 태그된다.
위 메트릭스들에 즉시 엑세스할 수 있도록 그라파나 대시보드를 작업중이다. 하지만 연결되는 기간 중에는 실시간으로 접근가능한 위 메트릭스들을 보기 위해 커스텀 쿼리를 만들어야 한다.
각 모니터의 데이터는 생성된 캘리퍼 리포트에서 차트 형식 산출물이 될 수 있다. 이것은 각 모니터에 대한 벤치마크 구성 파일 옵션을 통해 가능하다. 리소스 모니터에 대한 표로 만든 데이터에 더해, 캘리퍼는 현재 charting.js
를 사용한 다음 차트 렌더링을 지원하고 있다 :
차팅은 각 리소스 모니터에 대해 가능한 옵션이고, 생성될 차트에 대한 옵션 설정은 벤치마크 구성 파일의 charting
블록 아래에서, 각 모니터 타입에 대해 지정된다. 단일 리소스 모니터에 대해 복수의 차트 옵션 지정이 가능하다.
차트는 모니터에 의해 추적되는 모든 아이템에 대한 데이터를 포함하게 될 것이다. 차트에 나타날 매트릭을 필터링 하는 것만이 가능하다. 아래는 나열된 모니터들에서 유효한 차팅 블록을 선언한다:
charting:
bar:
- metrics: [all | <sting list>]
polar:
- metrics: [all | <sting list>]
all
옵션이 지정되면 각 매트릭에 대한 산출물로서 차트가 생성되고, 모든 모니터된 아이템이 각 차트에 포함될 것이다. 콤마로 구분된 목록을 제시해 매트릭을 필터링할 수 있다. 제시된 목록은 문자열 비교를 통해 매트릭과 매치되므로, 요구되는 매치의 초기(화) 부분(initial part)만 제시하면 된다. 아래는 모든 사용가능한 매트릭에 대해 바 차트를 지정하고 매트릭0과 매트릭1에 대해서만 폴라 차트를 지정한다:
charting:
bar:
- metrics: [all]
polar:
- metrics: [metric0, metric1]
프로세스 리소스 모니터는 다음 매트릭을 노출시킨다: 메모리(최대), 메모리(평균), CPU%(최대), CPU%(평균).
다음은 caliper.js
로 이름붙여진 모든 러닝 프로세스를 모니터링한다. 모든 사용가능한 매트릭에 바 차크를 생성하는 것이 지정되었다. 차트는 모든 모니터된 프로세스에서 온 데이터를 가지게 된다:
monitors:
resource:
- module: process
options:
interval: 3
processes: [{ command: 'node', arguments: 'caliper.js', multiOutput: 'avg' }]
charting:
bar:
metrics: [all]
도커 리소스 모니터는 아래 매트릭을 노출시킨다: 메모리(최대), 메모리(평균), CPU%(최대), CPU%(평균), 트래픽 인, 트래픽 아웃, 디스크 읽기, 디스크 쓰기.
다음은 모든 로컬 도커 컨테이너를 모니터링하고, Memory(avg)
와 CPU%(avg)
에 바 차트를 생성하고 모든 매트릭에 대해 폴라 차트를 생성한다. 차트는 모든 모니터된 컨테이너의 데이터를 가지게 된다:
monitors:
resource:
- module: docker
options:
interval: 5
containers:
- all
charting:
bar:
metrics: [Memory(avg), CPU%(avg)]
polar:
metrics: [all]
프로메테우스 모니터는 구성 파일 내 모든 매트릭에 대한 사용자 정의를 활성화시킨다.
다음은 사용자 정의된 두 매트릭 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]
The Caliper codebase is released under the Apache 2.0 license. Any documentation developed by the Caliper Project is licensed under the Creative Commons Attribution 4.0 International License. You may obtain a copy of the license, titled CC-BY-4.0, at http://creativecommons.org/licenses/by/4.0/.