본 문서에서 다루는 도구와 절차는 노드 안정성을 유지하고 프로덕션 환경에서 발생하는 문제를 진단하는 데 목적이 있습니다. 검증자 노드 운영에 대한 내용은 검증자 작업을 참고하세요. 네트워크 초기 배포 및 구성에 대한 내용은 네트워크 배포을 참고하세요.
메트릭 수집
StableNet 노드는 성능 및 운영 상태를 관찰할 수 있도록 다양한 내부 메트릭을 노출합니다.메트릭 시스템은
go-metrics 라이브러리를 기반으로 구현되어 있으며, 노드의 합의 처리, 트랜잭션 처리, 네트워크 상태 및 데이터베이스 동작에 대한 실시간 지표를 제공합니다.
운영 환경에서는 메트릭 수집을 통해 다음을 확인할 수 있습니다.
- 블록 생성 및 합의 처리 지연 여부
- 트랜잭션 풀 적체 상태
- 피어 연결 안정성
- 데이터베이스 및 상태 처리 성능
- 리소스 병목(CPU, 메모리, 디스크 I/O)
메트릭 활성화
메트릭 수집은 명령줄 플래그를 통해 제어됩니다.| Flag | Description | Default |
|---|---|---|
--metrics | 메트릭 수집 및 노출 활성화 | 비활성화 |
--metrics.expensive | 비용이 큰 메트릭 활성화(운영 환경 비권장) | 비활성화 |
--metrics.addr | 메트릭 HTTP 서버 바인드 주소 | 없음 |
--metrics.port | 메트릭 HTTP 서버 포트 | 6060 |
http://<addr>:<port>/debug/metrics 경로에서 Prometheus 호환 형식으로 데이터를 노출합니다.
운영 환경에서는 메트릭 서버를 외부에 직접 노출하지 않고, 내부 네트워크 또는 프록시를 통해 접근하는 구성을 권장합니다.
InfluxDB 내보내기
메트릭을 장기 저장하거나 시계열 분석을 수행하기 위해 InfluxDB로 메트릭을 내보낼 수 있습니다.StableNet은 InfluxDB v1과 v2를 모두 지원합니다.
InfluxDB v1 구성
| Flag | Description |
|---|---|
--metrics.influxdb | InfluxDB v1 내보내기 활성화 |
--metrics.influxdb.endpoint | InfluxDB API 엔드포인트 |
--metrics.influxdb.database | 데이터베이스 이름 |
--metrics.influxdb.username | 인증 사용자 이름 |
--metrics.influxdb.password | 인증 비밀번호 |
--metrics.influxdb.tags | 쉼표로 구분된 키/값 태그 |
InfluxDB v2 구성
| Flag | Description |
|---|---|
--metrics.influxdbv2 | InfluxDB v2 내보내기 활성화 |
--metrics.influxdb.token | 인증 토큰 |
--metrics.influxdb.bucket | 버킷 이름 |
--metrics.influxdb.organization | 조직 이름 |
사용 가능한 메트릭
카테고리별 주요 메트릭
| Category | Metric Name | Type | Description | Source |
|---|---|---|---|---|
| WBFT Consensus | consensus/wbft/core/commitwork | Timer | 블록 커밋 처리 시간 | miner/worker.go |
| Worker | miner.newTxs | Counter | 새 트랜잭션 유입 수 | miner/worker.go |
| Worker | miner.running | Bool | 블록 생성 워커 활성 여부 | miner/worker.go |
| Worker | miner.syncing | Bool | 동기화 중 여부 | miner/worker.go |
| Chain | Block insertion rate | Meter | 블록 삽입 처리율 | core/blockchain.go |
| Chain | Reorg depth | Counter | 체인 재구성 깊이 | core/blockchain.go |
| TxPool | Pending transactions | Gauge | 실행 가능한 트랜잭션 수 | core/txpool/legacypool |
| TxPool | Queued transactions | Gauge | 대기 중 트랜잭션 수 | core/txpool/legacypool |
| P2P | Peer count | Gauge | 연결된 피어 수 | p2p/server.go |
| P2P | Ingress / Egress | Meter | 네트워크 트래픽 | p2p/server.go |
| State | Trie cache hits | Counter | 상태 캐시 적중 횟수 | core/state/statedb.go |
| State | Commit time | Timer | 상태 커밋 소요 시간 | core/state/statedb.go |
StableNet / Anzeon 특화 메트릭
Anzeon(WBFT) 기반 네트워크에서는 다음과 같은 합의 특화 메트릭을 추가로 확인할 수 있습니다.- 거버넌스를 통한 가스 팁 변경 이벤트
- 에포크 단위 검증자 세트 변경
- BLS 서명 검증 처리 시간
- 라운드 변경 및 타임아웃 발생 횟수
워커 상태 모니터링
worker 구조체는 블록 생성 및 합의 처리 상태를 나타내는 여러 원자 변수들을 노출합니다.이는 검증자 노드에서 블록 생성 중단 원인을 분석하는 데 중요합니다.
로깅
StableNet은 구조화된 로그 시스템을 사용하며, 로그 레벨을 통해 출력 상세도를 제어할 수 있습니다.로그 레벨
| Level | Value | Description |
|---|---|---|
| Critical | 1 | 즉각적인 조치가 필요한 치명적 오류 |
| Error | 2 | 기능 장애를 유발할 수 있는 오류 |
| Warn | 3 | 주의가 필요한 상태 |
| Info | 4 | 일반 운영 정보(기본값) |
| Debug | 5 | 디버깅용 상세 로그 |
| Trace | 6 | 매우 상세한 추적 로그 |
로그 출력 예시
노드 시작 로그:디스크 공간 관리
StableNet은 디스크 공간 부족으로 인한 데이터베이스 손상을 방지하기 위해 자동 디스크 공간 모니터링 기능을 포함합니다.디스크 공간 임계값
임계값은 다음 중 하나로 결정됩니다.- 기본값:
2 * TrieDirtyCache - 캐시 설정 기반:
2 * --cache * --cache.gc / 100 - 명시적 설정:
--datadir.minfreedisk
동작 방식
- 여유 공간 ≥ 2x 임계값: 정상 동작
- 1x ~ 2x: 주기적 경고 로그 출력
- < 1x: 노드 종료 트리거
플랫폼별 구현
| Platform | Implementation | System Call |
|---|---|---|
| Linux / Unix | cmd/utils/diskusage.go | syscall.Statfs() |
| Windows | cmd/utils/diskusage_windows.go | GetDiskFreeSpaceEx() |
| OpenBSD | cmd/utils/diskusage_openbsd.go | syscall.Statfs() |
데이터베이스 유지보수
데이터베이스 백엔드
StableNet은 다음 데이터베이스 백엔드를 지원합니다.- LevelDB
- Pebble
압축(Compaction)
- 자동 압축은 정상 운영 중 백그라운드에서 수행됩니다.
- 압축 완료 시 로그를 통해 확인할 수 있습니다.
상태 정리(Pruning)
- 해시 상태 스키마에서만 오프라인 정리 지원
- 정리 중 노드 중지 필요
- 중단 시 다음 실행 시 자동 복구 시도
고대 데이터(Freezer)
- 일정 블록 이후 데이터는 고대 저장소로 이동
- 읽기 전용, 높은 압축 효율
- 체인 성장에 따라 지속 증가
노드 상태 모니터링
StableNet은 비정상 종료 여부를 추적합니다.- 정상 종료 시 클린 마커 기록
- 비정상 종료 후 재시작 시 경고 로그 출력
모니터링 체크리스트
일일- 동기화 완료 여부
- 피어 수 ≥ 10
- 디스크 여유 공간 확인
- DB 크기 증가 추세
- 비정상 종료 발생 여부
- 로그 정책 점검
- 고대 데이터 관리
- 버전 업데이트 검토
문제 해결
노드 동기화 실패
- 피어 연결 여부 확인
- 방화벽 설정 점검
- 네트워크 ID 및 bootnode 확인
높은 메모리 사용량
- 캐시 설정 점검
- 아카이브 모드 여부 확인
- 시스템 OOM 로그 확인
느린 블록 처리
- 디스크 I/O 병목 확인
commitwork메트릭 확인- 캐시 설정 및 CPU 코어 수 점검
데이터베이스 손상
- 즉시 노드 중지
- 백업 복원 또는 재동기화
- 장기적으로 Pebble 백엔드 고려

