일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- web3.js
- 제어의역전
- blockchain
- tcp
- ERC165
- Python
- Ethereum
- truffle
- Docker
- solidity
- 스마트 컨트랙트
- github
- git
- erc721
- 솔리디티
- MySQL
- ethers
- 블록체인
- geth
- web
- web3
- 트랜잭션
- ERC20
- server
- JavaScript
- 네트워크
- NFT
- Programming
- erc
- 이더리움
- Today
- Total
멍개의 연구소
[ethereum] 이더리움 네트워크 모니터링 시스템 구축 본문
이번시간에는 지난번에 Ethash(POW), Clique(POA) 형태로 구축한 private network를 모니터링하는 시스템을 구축해보겠습니다.
2022.08.28 - [블록체인] - [ethereum] Geth를 이용하여 Clique(POA) 기반 private network 구축하기
2022.08.27 - [블록체인] - [ethereum] Geth를 이용하여 Ethash 기반 private network 구축하기
네트워크는 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의 로그를 확인해보면 다음과 같습니다.
'블록체인' 카테고리의 다른 글
[Ethereum] EIP1559 GETH, Ganache-cli 사용해보기 (0) | 2022.08.28 |
---|---|
[ethereum] ERC721을 이용한 NFT 만들기 - 1편 (0) | 2022.08.28 |
[ethereum] Geth를 이용하여 Clique(POA) 기반 private network 구축하기 (0) | 2022.08.28 |
[ethereum] Geth를 이용하여 Ethash 기반 private network 구축하기 (0) | 2022.08.27 |
[ethereum] mnemonic 생성, privatekey 복구와 계층적 구조의 원리 (0) | 2022.08.27 |