베라체인: 밸리데이터 모니터링 인프라 구축하기

본 아티클은 디스프레드의 인프라 서비스에 대한 전문성을 베라체인 네트워크 강화에 기여하기 위해 작성되었습니다.
베라체인: 밸리데이터 모니터링 인프라 구축하기
베라체인: 밸리데이터 모니터링 인프라 구축하기

최근 테스트넷을 성공적으로 론칭한 베라체인(Berachain)은 유동성 증명 합의(Proof Of Liquidity)를 기반으로 구축된 이더리움 가상머신(EVM)과 호환되는 블록체인 네트워크입니다.

베라체인의 퍼블릭(Public) 테스트넷은 1월 8일부터 시작했으며, 디파이(Defi)를 중심으로 한 생태계에서 가장 견고하고 빠르며, 유동성이 풍부한 네트워크 중 하나로 설계되어 주목받고 있는 체인입니다.

베라체인에 대해 자세한 내용과 심층적인 분석을 원하시는 독자분들께는 최근 디스프레드에서 발행한 베라체인 리서치 리포트 “베라체인 (Berachain) — 강력한 커뮤니티와 실험적 시도의 만남”를 참조하시길 바랍니다.
베라체인 밸리데이터 현황

디스프레드(DeSpread)는 베라체인의 프라이빗 테스트넷의 제네시스(Genesis)부터 참여하여 현재 퍼블릭 테스트넷에도 적극적으로 참여하고 있습니다. 현재 베라체인 테스트넷 밸리데이터 그룹에는 총 102개의 노드가 참여하고 있습니다.

베라체인의 주요 특징

- 유동성 증명 합의

베라체인의 눈에 띄는 특징으로 유동성 증명 합의 메커니즘을 꼽을 수 있습니다. 이 합의 방식은 네트워크상의 트랜잭션이 유동적이고, 안전하며 신뢰할 수 있도록 보장합니다. 네트워크의 무결성을 유지하고, 안정적이고 효율적인 환경을 제공하며 이러한 특징은 트랜잭션 속도와 신뢰성이 가장 중요한 디파이 생태계에서 특히 중요합니다.

- 체인 간 상호 운용성

베라체인은 코스모스 SDK와 텐더민트(Tendermint)를 통합함으로써 그 인프라를 한층 강화하였습니다. 이 통합으로 크로스 체인 상호 운용성(Cross Chain Interoperability)을 가진 강력한 인프라를 구축할 수 있게 되었으며, 이러한 특징은 개발자들에게 중요한 의미를 가집니다.

이를 통해 개발자들은 다양한 블록체인 생태계와 상호 작용할 수 있는 탈중앙화 애플리케이션(DApp)을 개발할 수 있습니다. 이를 통해 더 연결되고, 다양한 기능을 갖춘 블록체인 환경이 조성될 수 있으며 이는 베라체인의 생태계를 확장하는 데 중요한 역할을 할 것으로 예상됩니다.

- 코스모스에서 EVM 호환성 향상

2023년 3월, 베라체인은 폴라리스(Polaris) VM 개발을 발표했습니다. 이 프로젝트는 코스모스(Cosmos)에서 EVM 호환성(Compatibility)을 크게 향상시키기 위해 설계되었습니다. 폴라리스를 사용하면 이더리움 기반 애플리케이션을 베라체인으로 포팅하는 과정이 간소화 되어 개발자들이 사용하기 편한 효율적인 개발 환경을 유지할 수 있습니다. 이러한 개발을 통해 파악할 수 있듯이 개발자 커뮤니티의 니즈와 선호도에 부합하는 유저 친화적인 플랫폼을 만드는데 노력하고 있습니다.

베라체인 생태계 기여

디스프레드는 베라체인 제네시스 밸리데이터 노드로써, 인프라 서비스에 대한 전문성을 베라체인 네트워크를 강화하는데 기여하고자 합니다. 또한, 블록체인 인프라 운영자로서 베라체인의 생태계에 적극적으로 참여하여 생태계 내 가능성을 탐색하고 확장하기 위해 고민하고 있습니다.

베라체인 인프라 대시보드 오픈소스

밸리데이터 노드를 안정적으로 운영하기 위해서는 엔지니어는 Observability를 통해 노드 동작의 전체 그림을 볼 수 있어야 합니다. 엔지니어는 정적인 측정 값에 대해 노드의 성능에 대한 가정을 세우기 보다, 성능을 정확히 인식함으로써 더 안정적으로 운영할 수 있습니다.

Observability를 높일 수 있는 시스템을 만들면 노드의 중단 시간(Downtime)을 줄이고 MTTR(Mean Time To Repair)을 단축시킬 수 있으므로 실제 블록체인 네트워크의 유저 경험을 개선할 수 있어 중요한 개념입니다.

저희는 베라체인 생태계에서 밸리데이터가 블록체인 기술과 탈중앙화 금융의 미래를 형성하는 데 중추적인 역할을 할 것이라고 믿습니다. 따라서, 초기 베라체인 팀의 잦은 업데이트와 네트워크 최적화 기간동안 밸리데이터 노드를 운영하는 엔지니어들이 쉽고 빠르게 이슈를 파악할 수 있어야 한다고 생각합니다. 

Observability에서는 3가지 기본 요소인 로그(Logs), 메트릭(Metrics), 트레이싱(Tracing)이 있습니다. 많은 밸리데이터 노드를 운영하면서 메트릭 지표를 면밀하게 모니터링 하는 것이 가장 중요하다고 생각하여 밸리데이터 커뮤니티에 오픈소스로 공개하면 좋겠다고 생각했습니다.

베라체인 밸리데이터 노드 모니터링

디스프레드의 베라체인 Grafana 대시보드

위 대시보드는 디스프레드에서 사용하고 있는 베라체인의 밸리데이터 노드를 모니터링 할 수 있는 Grafana의 대시보드입니다. 해당 대시보드는 현재 오픈소스로 공개하였으며 아래의 디스프레드 GitHub 레포지토리(Repository) 혹은 공식 Grafana 커뮤니티를 통해 직접 임포트(Import) 하여 사용해보실 수 있습니다.

위 대시보드를 통해 모니터링을 시작하기에 앞서 사전에 준비해야할 사항이 있습니다. 사전 준비해야할 사항은 다음과 같습니다.

사전 준비 사항

  • 프로메테우스(Prometheus)
  • 베라체인 밸리데이터 노드
  • 베라체인 메트릭 Exporter
  • 노드 Exporter
모든 과정은 Ubuntu 22.04 LTS 를 기준으로 설명하겠습니다.
가급적이면 업데이트를 지원받을 수 있는 LTS 버전을 사용하시는 것을 권장드리며, 현재 기준으로는 Ubuntu의 LTS 버전은 v2.45.2 입니다. 

Prometheus 설치

최신 패키지를 사용하고 있는지 확인하려면 먼저 시스템의 패키지 목록을 업데이트해야 합니다.

sudo apt update

Prometheus에 대한 그룹과 시스템 사용자를 만듭니다. 아래의 명령어를 통해 그룹을 생성한 후 그룹에 사용자를 추가합니다.

sudo groupadd --system prometheus
sudo useradd -s /sbin/nologin --system -g prometheus prometheus

Prometheus용 구성 파일과 라이브러리를 저장하려면 몇 가지 디렉터리를 생성해야 합니다. 디렉토리는 각각 /etc/var/lib 디렉토리에 위치합니다. 아래 명령을 사용하여 디렉토리를 생성합니다.

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

최신 업데이트를 다운로드하려면 Prometheus 공식 사이트로 이동하여 Linux 용 다운로드 링크를 복사해서 wget을 사용하여 다운로드 합니다.

wget https://github.com/prometheus/prometheus/releases/download/v2.45.2/prometheus-2.45.2.darwin-amd64.tar.gz

다운로드가 완료된 후 다음 명령을 실행하여 다운로드한 파일의 내용을 추출합니다.

tar vxf prometheus*.tar.gz

파일을 추출한 후 다음 명령을 사용하여 새로 추출된 Prometheus 디렉터리로 이동합니다.

cd prometheus*/

Prometheus 디렉토리로 변경하면 설치를 더 쉽게 관리하고 구성할 수 있습니다. 후속 단계는 Prometheus 디렉터리의 컨텍스트 내에서 수행됩니다.

바이너리 파일 (prometheus 및 promtool)로 이동하여 아래의 명령어를 통해 파일 소유권을 prometheus 사용자 및 그룹으로 변경해야 합니다.

sudo mv prometheus /usr/local/bin
sudo mv promtool /usr/local/bin
sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

다음으로 구성 파일을 이동하고 Prometheus가 액세스할 수 있도록 소유권을 설정합니다.

sudo mv consoles /etc/prometheus
sudo mv console_libraries /etc/prometheus
sudo mv prometheus.yml /etc/prometheus
sudo chown prometheus:prometheus /etc/prometheus
sudo chown -R prometheus:prometheus /etc/prometheus/consoles
sudo chown -R prometheus:prometheus /etc/prometheus/console_libraries
sudo chown -R prometheus:prometheus /var/lib/prometheus

prometheus.yml파일은 기본 Prometheus 구성 파일입니다. 해당 파일에는 모니터링 할 대상, 데이터 스크래핑 빈도, 데이터 처리 및 저장에 대한 설정이 포함됩니다. 파일에서 경고 규칙 및 알림 조건을 설정할 수 있습니다.

sudo vim /etc/prometheus/prometheus.yml

Prometheus 파일의 기본 내용은 다음과 같습니다.

global:
  scrape_interval: 15s # By default, scrape targets every 15 seconds.

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
    monitor: 'berachain-monitor'

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'

    # Override the global default and scrape targets from this job every 5 seconds.
    scrape_interval: 5s

    static_configs:
      - targets: ['localhost:9090']

Prometheus에서 베라체인 밸리데이터 노드의 메트릭을 스크래핑 할 수 있도록 아래처럼 설정할 수 있습니다. Prometheus 메트릭을 캡처하기 위한 체인(Chain) 태그가 있다고 가정합니다. 

태그는 테스트넷과 메인넷 모니터링 사이를 전환하는 데 사용되며 체인 레이블이 없으면 Grafana 대시보드에 데이터가 표시되지 않습니다.

## Prometheus.yaml example for node monitoring
# Ensure these are available from the prometheus server.
# 9100 port is prometheus-node-exporter
# 26660 port is the default Bera metrics port
  - job_name: "berachain"
    static_configs:
      - targets: ["vn.testnet.bera.xxxx.com:9100", "vn.testnet.bera.xxxx.com:26660"]
        labels:
          group: "validator"
          chain: "testnet"
  - job_name: "berachain"
    static_configs:
      - targets: ["vn.mainnet.bera.xxxx.com:9100", "vn.mainnet.bera.xxxx.com:26660"]
        labels:
          group: "validator"
          chain: "mainnet"

이제 Prometheus용 시스템 서비스 파일을 생성해야 합니다. prometheus.service 다음을 사용하여 Vim 텍스트 편집기로 파일을 생성하고 편집합니다.

sudo vim /etc/systemd/system/prometheus.service

다음 설정을 파일에 저장하고 종료합니다.

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus \
    --config.file /etc/prometheus/prometheus.yml \
    --storage.tsdb.path /var/lib/prometheus/ \
    --web.console.templates=/etc/prometheus/consoles \
    --web.console.libraries=/etc/prometheus/console_libraries
[Install]
WantedBy=multi-user.target

prometheus.service변경 사항이 시스템에서 인식되도록 하려면 파일을 저장한 후 시스템 구성 파일을 다시 로드해야 합니다 . 다음을 사용하여 시스템 구성 파일을 다시 로드합니다.

sudo systemctl daemon-reload

다음으로 Prometheus 서비스를 활성화하고 시작하려고 합니다. 다음 명령을 사용하여 이 작업을 수행합니다.

sudo systemctl enable prometheus
sudo systemctl start prometheus

Prometheus 서비스를 시작한 후 다음을 사용하여 해당 서비스가 실행 중인지 또는 오류가 발생했는지 확인할 수 있습니다.

sudo systemctl status prometheus

Prometheus는 기본적으로 포트 9090에서 실행되므로 방화벽에서 포트 9090을 허용해야 합니다.

sudo ufw allow 9090/tcp

Prometheus가 성공적으로 실행되면 localhost:9090 또는 <ip_address>:9090을 사용하여 웹 브라우저를 통해 액세스할 수 있습니다.

베라체인 밸리데이터 노드 설치

베라체인 밸리데이터 노드를 설치하는데에는 아래 3가지 방법이 있습니다.

  1. 사전 빌드된 바이너리(Binary)
  2. 도커(Docker)
  3. 바이너리 직접 컴파일(Compile)

베라체인 팀에서는 현재 1번 사전 빌드된 바이너리를 사용하는 것을 권장하고 있기 때문에, 1번 방식으로 진행하겠습니다.

베라체인 독스(Docs)에 접속하여 바이너리 섹션을 참조합니다. 아래의 명령어를 통해 berad 바이너리를 사용하도록 해줍니다.

mv <path_to_berad_download> /usr/local/bin/berad

이제 berad 명령어를 통해 베라체인 CLI를 사용하실 수 있습니다.

이후 베라체인의 공식 밸리데이터 노드 설정 문서를 따라서 설정 후, 밸리데이터 노드를 실행할 수 있습니다.

밸리데이터 노드를 운영하는 것에 대한 자세한 정보는 일반인에게 공개되지 않습니다.

베라체인 메트릭 Exporter 설치

위 베라체인 바이너리를 설치 후 실행하게 되면 기본적으로 API 노출 기능이 꺼져 있으므로 메트릭 지표를 볼 수 없게 됩니다.

Prometheus에서 밸리데이터 노드로부터 메트릭 지표를 스크래핑(Scraping) 하기 위해서는 아래의 app.toml 설정에서 API를 허용해주어야 합니다.

[api]
# Enable defines if the API server should be enabled.
enable = true

주의해야할 점은 베라체인 팀에서 RPC 포트를 비활성화하거나 공개 트래픽에 노출하지 않는 것을 권장하고 있습니다. 유효성 검사기 노드가 디도스 공격을 받아 다운될 수 있는 여지를 줄 수 있기 때문입니다.

따라서, API 설정을 허용해주고 iptable와 같은 방화벽 혹은 cloud provider 내 보안 설정을 통해 Prometheus 서버에만 API 통신을 허용하는 것을 적극 권장합니다.

노드 Exporter 설치

Node Exporter를 통해 메모리, 디스크, CPU 사용률 등 노드의 시스템 리소스를 측정할 수 있습니다.

아래 명령어를 통해 노드 Exporter를 설치합니다.

sudo apt-get update
sudo apt-get install prometheus-node-exporter -y
sudo systemctl status prometheus-node-exporter

node-exporter 패키지를 설치한 후, http://localhost:9100 또는 http://<ip address>:9100에서 시스템 메트릭을 가져와야 합니다. 

9100 포트는 node-exporter의 기본 포트입니다.

베라체인 밸리데이터 모니터링 대시보드 사용하기

베라체인 밸리데이터 모니터링 대시보드를 사용하기 앞서 사전에 필요한 툴을 모두 설치 및 설정 하였으므로 이제 대시보드를 Import 하여 사용하실 수 있습니다.

대시보드 페이지에서 위와 같이 Import 페이지로 접속합니다.

Grafana에서 대시보드를 Import 할 수 있는 3가지 방법이 있습니다.

  1.  JSON 파일 Import
  2. Grafana 커뮤니티에 업로드된 대시보드 ID 입력
  3. JSON 모델을 직접 입력

이 중에서, 가장 간단하게 Import 할 수 있는 2번째 방법을 통해 Import 합니다. 저희가 오픈소스로 공개한 대시보드의 ID는 20305 입니다. 20305를 입력한 후 Import 합니다.

Import 페이지에서는 추가적으로 이름과 폴더, 그리고 대시보드의 UID(Unique IDentifier)를 지정할 수 있습니다.

Import가 완료되면 위와 같이 밸리데이터 노드를 모니터링 할 수 있는 대시보드를 확인할 수 있습니다.

베라체인에 대해 더 알아보기

베라체인의 기술과 잠재력에 대해 자세히 알아보고 싶으신 분들은 베라체인의 공식 웹사이트와 GitHub 리포지토리를 통해 살펴보실 수 있습니다.

마치며

디스프레드는 베라체인 제네시스부터 밸리데이터로 참여하면서, 베라체인 생태계에 추가적으로 어떤 기여를 할 수 있는지 지속적으로 고민하고 있습니다.

베라체인의 밸리데이터 커뮤니티에서 많은 팀들과 적극적으로 소통하면서, 많은 수의 밸리데이터 팀이 베라체인의 밸리데이터 노드를 모니터링 하지 못하는 문제를 발견했습니다. 이러한 커뮤니티의 니즈를 파악하고, 빠르게 준비하여 밸리데이터 노드를 모니터링 할수 있는 대시보드를 오픈소스로 공개하였습니다. 해당 GitHub 리포지토리에 대한 의견과 PR은 항상 열려 있습니다.

이 글을 통해 밸리데이터 커뮤니티와 베라체인의 안전하고 강한 네트워크를 만들어 나아가는 것에 도움이 되기를 바라며, 추후에도 베라체인 생태계에 기여할 수 있기를 희망해 보며 글을 마치겠습니다.

About the author
Leo Yu

Leo Yu

Head of Development at DeSpread

DeSpread Research

Meet our people's insight, our capabilities, our research, and the ever-changing face of our firm.

DeSpread Research

Great! You’ve successfully signed up.

Welcome back! You've successfully signed in.

You've successfully subscribed to DeSpread Research.

Success! Check your email for magic link to sign-in.

Success! Your billing info has been updated.

Your billing was not updated.