관리 메뉴

멍개의 연구소

[ethereum] 이더리움 네트워크 모니터링 시스템 구축 본문

블록체인

[ethereum] 이더리움 네트워크 모니터링 시스템 구축

멍개. 2022. 8. 28. 06:45

이번시간에는 지난번에 Ethash(POW), Clique(POA) 형태로 구축한 private network를 모니터링하는 시스템을 구축해보겠습니다.

 

2022.08.28 - [블록체인] - [ethereum] Geth를 이용하여 Clique(POA) 기반 private network 구축하기

 

[ethereum] Geth를 이용하여 Clique(POA) 기반 private network 구축하기

Geth를 이용하여 Ethash(POW) 기반 private network 구축하는 방법을 알아보겠습니다. ​ Geth는 POW(Ethash), POA(Clique), POS(Caspre)를 선택적으로 운용가능합니다. ​ 지난번에 정리한 POW(Ethash) 기반으로..

meongae.tistory.com

2022.08.27 - [블록체인] - [ethereum] Geth를 이용하여 Ethash 기반 private network 구축하기

 

[ethereum] Geth를 이용하여 Ethash 기반 private network 구축하기

Geth를 이용하여 Ethash(POW) 기반 private network 구축하는 방법을 알아보겠습니다. ​ Geth는 POW(Ethash), POA(Clique), POS(Caspre)를 선택적으로 운용가능합니다. ​ 여기선 개념적인 내용보다 방법론적인..

meongae.tistory.com

네트워크는 POW, POA 어느것을 이용해도 진행가능합니다.

● 시스템 구성도

● eth-netstats 구동

eth-netstats는 실질적으로 사용자가 접속합니다.

$ git clone https://github.com/cubedro/eth-netstats.git
$ cd eth-netstats
$ npm i
$ grunt
$ export WS_SECRET=123
$ npm run start

WS_SECRET은 Agent 서버에서 함부로 접속하지 못하게 하기 위해 설정합니다.

localhost:3000으로 접속하면 데이터가 비어있는 모습의 사이트가 뜹니다.

이제 우리는 agent 서버를 실행하여 주기적으로 노드의 정보를 해당 페이지에 뿌려줘야 합니다.

● Agent 서버 구동

$ git clone https://github.com/cubedro/eth-net-intelligence-api.git
$ cd eth-net-intelligence-api
$ npm i

이제 우리는 2개의 파일을 만들어줘야 합니다. 2개의 노드와 연결을 하기위해 노드정보를 가지고있는 json파일을 만듭니다.

· process-node1.json

 
[
  {
    "name"              : "eth-node1",
    "script"            : "app.js",
    "log_date_format"   : "YYYY-MM-DD HH:mm Z",
    "merge_logs"        : false,
    "watch"             : false,
    "max_restarts"      : 10,
    "exec_interpreter"  : "node",
    "exec_mode"         : "fork_mode",
    "env":
    {
      "NODE_ENV"        : "production",
      "RPC_HOST"        : "localhost",
      "RPC_PORT"        : "8545",
      "LISTENING_PORT"  : "30303",
      "INSTANCE_NAME"   : "node1",
      "CONTACT_DETAILS" : "",
      "WS_SERVER"       : "http://127.0.0.1:3000/api",
      "WS_SECRET"       : "123",
      "VERBOSITY"       : 2
    }
  }
]

· process-node2.json

 
[
  {
    "name"              : "eth-node2",
    "script"            : "app.js",
    "log_date_format"   : "YYYY-MM-DD HH:mm Z",
    "merge_logs"        : false,
    "watch"             : false,
    "max_restarts"      : 10,
    "exec_interpreter"  : "node",
    "exec_mode"         : "fork_mode",
    "env":
    {
      "NODE_ENV"        : "production",
      "RPC_HOST"        : "localhost",
      "RPC_PORT"        : "8546",
      "LISTENING_PORT"  : "30304",
      "INSTANCE_NAME"   : "node2",
      "CONTACT_DETAILS" : "",
      "WS_SERVER"       : "http://127.0.0.1:3000/api",
      "WS_SECRET"       : "123",
      "VERBOSITY"       : 2
    }
  }
]

WS_SERVER와 WS_SECRET은 앞에서 실행한 eth-netstats서버 입니다. WS_SECRET은 앞에서 eth-netstats를 실행하기 전에 설정한 값을 넣어줍니다. WS_SERVER는 엔드포인트가 /api 입니다.

· Agent 실행

이제 Agent 서버를 실행해줍니다.

 
$ pm2 start process-node1.json

$ pm2 start process-node2.json
$ pm2 list

┌────┬─────────────────────────┬─────────┬─────────┬──────────┬────────┬──────┬──────────┬──────────┬──────────┬──────────┬──────────┐
│ id │ name                    │ version │ mode    │ pid      │ uptime │ ↺    │ status   │ cpu      │ mem      │ user     │ watching │
├────┼─────────────────────────┼─────────┼─────────┼──────────┼────────┼──────┼──────────┼──────────┼──────────┼──────────┼──────────┤
│ 0  │ eth-node1               │ 0.1.1   │ fork    │ 54204    │ 97s    │ 0    │ online   │ 0.6%     │ 44.7mb   │ bag… │ disabled │
│ 1  │ eth-node2               │ 0.1.1   │ fork    │ 54408    │ 49s    │ 0    │ online   │ 0.6%     │ 40.1mb   │ bag… │ disabled │
└────┴─────────────────────────┴─────────┴─────────┴──────────┴────────┴──────┴──────────┴──────────┴──────────┴──────────┴──────────┘

pm2는 백그라운드로 서버를 동작시킵니다. 해당 서버는 실행시 전달한 json파일에 명시된 노드에서 주기적으로 정보를 조회한 후 WS_SERVER로 전달하는 역할을 합니다.

$ pm2 log

pm2 log는 백그라운드로 동작하고 있는 서버의 로그를 출력하는 명령어입니다.

앞에서 실행한 eth-netstats의 로그를 확인해보면 다음과 같습니다.

Comments