Monitors and Observers

HH·2022년 1월 9일
0

Hyperledger Caliper

목록 보기
8/12

Monitors and Observers

개요


캘리퍼 모니터링 모듈은 테스트가 실행 중 리소스 사용 및 트랜잭션 통계를 수집하기 위해 사용한다. 출력은 생성된 리포트에 대조된다. 캘리퍼는 다음을 사용해 리소스와 트랜잭션을 모니터한다:

  • 리소스 모니터들. 벤치마킹 중 리소스 사용 통계를 수집한다. 테스트 라운드 사이에 모니터링이 재설정(리셋)된다.
  • 트랜잭션 모니터들. 워커 트랜잭션 통계를 수집하고 조건부 디스패치 작업을 제공한다.

리소스


캘리퍼 벤치마트에서 사용될 리소스 모니터 타입은 벤치마크 구성 파일에서 선언된다. 이것은 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를 기본적으로 사용하게 된다.

프로세스 모니터


프로세스 모니터링 모듈 옵션은 다음으로 구성되어 있다:

  • interval: 모니터 업데이트 간격
  • processes: [command, arguments, multiOutput] 키-값 쌍 배열
    • command: 모니터링할 부모 프로세스 이름
    • arguments: 모니터링되는 부모 프로세스의 필터
    • multiOutput: 다중 프로세스 탐색 처리를 활성화한다. 다음 중 하나일 수 있다.
      • avg: command/name 아래에서 탐색된 프로세스 값들의 평균값을 가진다.
      • sum: command/name 아래에서 탐색된 모든 프로세스 값의 합

다음은 caliper.js와 일치하는 모든 로컬 node 프로세스를 모니터링한다고 선언한다. 업데이트 빈도는 3초이고, 모든 탐색된 프로세스의 평균 값이 얻어진다.

monitors:
  resource:
  - module: process
    options:
      interval: 3
      processes: [{ command: 'node', arguments: 'caliper.js', multiOutput: 'avg' }]

도커 모니터


도커 모니터링 모듈 옵션은 다음을 포함한다:

  • interval: 모니터 업데이트 간격
  • containers: 모니터될 로컬 또는 리모트 도커 컨테이너와 관련된 컨테이너 이름의 배열. 모든 로컬 도커 컨테이너가 모니터링될 경우 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를 사용하여 필수 쿼리를 생성하는 것이 좋다. 더 많은 정보는 PrometheusGrafana 문서를 보자.

프로메테우스 모니터 구성


프로메테우스 모니터링 모듈 옵션은 다음으로 구성된다:

  • interval: 모니터 업데이트 간격
  • url: 직접 쿼리에 사용되는 프로메테우스 URL.
  • metrics: 캘리퍼 리포트에 포함하기 위해 사용하는 쿼리. includequeries로 구성된다.
    • include: 자바스크립트 정규식을 통해 매트릭 포함을 결정하기 위해 사용하는 문자열 배열. 쿼리 블록에 지정된 관심 label이 정규식을 통한 포함 목록에 있는 아이템과 일치하는 쿼리 결과는 모두 생성되는 리포트에 포함된다.
    • queries: 각 캘리퍼 테스트 마지막에 실행될 쿼리를 기술하는 일련의 블록.

queries는 다음에 의해 정의된다:

  • name: 쿼리와 관련된 매트릭 이름. 리포트 생성에 사용된다
  • query: 각 테스트가 끝날 때 프로메테우스 서버로 발행되는 쿼리. 캘리퍼가 해당 쿼리에 시간 경계를 추가하므로 테스트 라운드와 관련된 결과만 포함된다.
  • step: 범위 쿼리에서 사용하기 위한 타이밍 스텝 사이즈
  • label: 리포트를 작성할 때 컴포넌트 식별자로 쓰이는, 반환된 쿼리와 일치하는 문자열
  • statistic: 복수의 값이 반환될 경우, 예를 들어 시간 범위에 걸쳐 특정한 리소스를 살펴보는 경우, 보고를 위해 통계값을 단일 값으로 압축한다. 허용된 옵션은 아래와 같다:
    • avg: 모든 값의 평균을 반환
    • max: 모든 값의 최대값을 반환
    • min: 모든 값의 최소값을 반환
    • sum: 모든 값의 합을 반환
  • multiplier: 내보낸 매트릭을 더 편리한 값 (예: byte를 GB로) 변환하기 위해 사용되는 추가적인 승수

다음은 벤치마크에서 각 테스트 사이에 두 가지 맞춤형 쿼리를 실행하는 프로메테우스 모니터를 선언한다:

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)"로 나열된다.

  • Endorse Time (s): 나열된 쿼리를 step size 1로 구동한다. instance 레이블을 사용해 프로메테우스 쿼리 결과 내에서 반환된 태그를 필터링한다. 인스턴스 값이 include 배열에서 제공되는 문자열 값 중 하나와 정규식으로 일치하지 않으면 결과가 포함되지 않는다. 인스턴스가 포함 옵션과 일치하면 모든 반환된 결과의 평균이 결정되고 이 값이 "Endorse Time (s)"으로 보고된다.
  • Max Memory (MB): 나열된 쿼리를 step size 10로 구동한다. name 레이블을 사용해 프로메테우스 쿼리 결과 내에서 반환된 태그를 필터링한다. 인스턴스 값이 include 배열에서 제공되는 문자열 값 중 하나와 정규식으로 일치하지 않으면 결과가 포함되지 않는다. 인스턴스가 포함 옵션과 일치하면 모든 반환된 결과에서 최대값이 결정된다. 제공된 승수를 곱하고 “Max Memory (MB)”로 반환한다.

include 배열 아이템에 대한 정규식 테스트를 통과한 라벨을 가진 반환된 구성요소들은 리포트에 포함된다. 나머지는 생략된다.

기본 인증


다음 플래그를 사용해 런타임 파라미터로 사용자명과 비밀번호를 제공함으로써, 기본 인증을 통해 보호되는 프로메테우스 서버를 이용할 수 있다:

  • caliper-auth-prometheus-username
  • caliper-auth-prometheus-password

이것들은 커넥션 생성 이전에 구성 파일 기반 URL을 보강하기 위해 사용된다.

프로메테우스가 활성화된 네트워크


caliper-benchmarks repository에서 프로메테우스 서버, 프로메테우스 푸쉬게이트웨이, 링크된 그라파나 해석 컨테이너를 만들기 위한 docker-compose file을 포함한 샘플 네트워크를 얻을 수 있다.

트랜잭션


트랜잭션 모니터는 트랜잭션 완료 시 동작하기 위해 캘리퍼 워커에 의해 사용된다. 그것들은 내부적으로 트랜잭션 통계를 집계하고 매니저 프로세스로 발송해서 기본 옵저버를 통한 진행 보고 및 리포트 생성을 위한 트린잭션 통계 집계를 활성화하기 위해 사용된다.

내부 트랜잭션 모니터의 정보를 사용해 진행을 보고하는 기본 옵저버는 구성 파일 설정을 통해 업데이트 될 수 있다.

  • caliper-progress-reporting-enabled : 진행 보고를 활성화시키는 불리언 플래그. 기본값은 true.
  • caliper-progress-reporting-interval : 빈도를 업데이트하기 위한 숫자 값. 밀리세컨드 단위(기본값은 5000).

추가 트랜잭션 모니터링 모듈은 다음을 포함한다:

  • logging
  • prometheus-push

하나 이상의 트랜잭션 모듈은 추가 블록이 동반되는 모듈로서 이름을 지정해 특정지을 수 있다. 옵션 블록은 monitors.transaction 아래 배열 형태를 가진다.

로깅


logging 트랜잭션 모듈은 테스트 라운드 종료 시 집계된 트랜잭션 통계를 기록하는데에 사용된다. 다음은 logging 트랜잭션 옵저버 사용을 지정한다. 모듈에 필수적인 옵션은 없다.

monitors:
    transaction:
    - module: logging

프로메테우스


prometheus 트랜잭션 모듈은 스크랩 메커니즘을 통해 모든 워커의 현재 트랜잭션 통계를 프로메테우스 서버로 노출시키기 위해 사용된다. 모듈은 다음 측정지표(메트릭스)를 노출한다:

  • caliper_tx_submitted (counter)
  • caliper_tx_finished (counter)
  • caliper_tx_e2e_latency (histogram)

다음은 기본 포트(3000)과 기본 스크랩 URL(/metrics)에 수집을 위한 측정지표(메트릭스)를 노출하는 프로메테우스 트랜잭션 모듈 사용을 지정한다.

monitors:
    transaction:
    - module: prometheus

프로세스 기반 워커로 작동하는 경우, 각 워커는 0 기반 인덱스를 사용해 기본(또는 오버라이딩한) 포트를 증가시켜 각 워커가 다른 포르에 메트릭스를 노출하게 된다.

올바르게 지정된 구성 파일을 통해 노출된 url들을 정확하게 타게팅하는 프로메테우스 서버 구성은 사용자의 책임이다.

추가 구성:

  • metricPath : 스크랩되는 메트릭스 경로를 오버라이딩한다(기본값은 /metrics).
  • scrapePort : 스크랩 서버 구성 시 포트 오버라이딩에 사용된다(기본값은 3000).
  • processMetricCollectInterval : 기본 메트릭스 수집을 위한 시간 간격으로, 있는 경우 활성화된다.
  • defaultLabels : 수집하는 동안, 노출된 메트릭스에 적옹된 기본 레이블을 보강하기 위한 키:값 쌍
  • histogramBuckets : caliper_tx_e2e_latency 수집에 사용되는 히스토그램을 오버라이딩한다.
    • explicit : 사용자 정의 버킷을 통한 직접 전달.
    • linear : 사용자 정의 start, width, count 파라미터를 가진 선형 버킷을 사용한다.
      • start: 시작 버킷 크기
      • width: 버킷 너비
      • count: 생성될 버킷 수
    • exponential
      • start: 시작 버킷 크기
      • factor: 버킷 팩터
      • count: 생성될 버킷 수

프로메테우스 푸시 게이트웨이


prometheus-push 트랜잭션 모듈은 push gateway를 통해 모든 워커의 현재 트랜잭션 통계를 프로메테우스 서버에 노출시키기 위해 사용된다. 모듈은 아래 메트릭스들을 노출시킨다:

  • caliper_tx_submitted (counter)
  • caliper_tx_finished (counter)
  • caliper_tx_e2e_latency (histogram)

다음은 현재 트랜잭션 통계를 http://localhost:9091에 있는 push gateway로 5초 간격으로 보내는 prometheus-push 트랜잭션 모듈 사용을 지정한다.

monitors:
    transaction:
    - module: prometheus-push
      options:
        pushInterval: 5
        pushUrl: "http://localhost:9091"

추가 구성:

  • pushInterval: 스크랩될 메트릭스 경로를 오버라이딩한다 (기본값은 /metrics).
  • pushUrl: Prometheus Push Gateway를 위한 URL
  • processMetricCollectInterval: 기본 메트릭스 수집 시간 간격. 존재할 경우 활성화된다.
  • histogramBuckets: caliper_tx_e2e_latency 수집을 위해 사용될 히스토그램을 오버라이딩한다.
    • explicit: 사용자 정의 버킷을 통한 직접 전달.
    • linear: 사용자 정의 start, width, count 파라미터를 가진 선형 버킷을 사용한다.
      • start: 시작 버킷 크기
      • width: 버킷 너비
      • count: 생성할 버킷 수
    • exponential
      • start: 시작 버킷 크기
      • factor: 버킷 팩터
      • count: 생성할 버킷 수

prometheus-push 트랜잭션 모듈 사용은 프로메테우스에 대한 스크랩 대상이 될 수 있는 Prometheus Push Gateway의 가용성 및 사용을 전제로 한다.

기본 인증


런타임 파라미터로 사용자 이름과 비밀번호를 제공해 기본 인증으로 보호되는 Prometheus Push Gateway를 사용할 수 있다. 아래 플래그를 사용한다:

  • caliper-auth-prometheuspush-username
  • caliper-auth-prometheuspush-password
    이것들은 커넥션 생성 이전에 구성 파일 기반 URL 보강을 위해 사용될 것이다.

Grafana 시각화


그라파나는 프로메테우스로 수집된 메트릭스를 쿼리하고 시각화하기 위해 사용할 수 있는 분석 플랫폼이다. 캘리퍼 클라이언트는 아래 메트릭스를 사용할 수 있다. 직접 스크랩 또는 프로메테우스 푸쉬 게이트웨이를 통해 사용할 수 있다.

  • caliper_tx_submitted (counter)
  • caliper_tx_finished (counter)
  • caliper_tx_e2e_latency (histogram)

위 각각은 아래 기본 레이블로 태그된다.

  • roundLabel: 현재 테스트 라운드 레이블
  • roundIndex: 현재 테스트 라운드 인덱스
  • workerIndex: 정보를 보내는 영 기반 워커 인덱스

위 메트릭스들에 즉시 엑세스할 수 있도록 그라파나 대시보드를 작업중이다. 하지만 연결되는 기간 중에는 실시간으로 접근가능한 위 메트릭스들을 보기 위해 커스텀 쿼리를 만들어야 한다.

리소스 차팅


각 모니터의 데이터는 생성된 캘리퍼 리포트에서 차트 형식 산출물이 될 수 있다. 이것은 각 모니터에 대한 벤치마크 구성 파일 옵션을 통해 가능하다. 리소스 모니터에 대한 표로 만든 데이터에 더해, 캘리퍼는 현재 charting.js를 사용한 다음 차트 렌더링을 지원하고 있다 :

  • horizontal bar
  • polar area

차팅은 각 리소스 모니터에 대해 가능한 옵션이고, 생성될 차트에 대한 옵션 설정은 벤치마크 구성 파일의 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/.

0개의 댓글

관련 채용 정보