2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

catapult-service-bootstrap その5 catapult.tools.health/network

Last updated at Posted at 2018-09-26

概要

catapult-service-bootstrapを使ってcatapult48gh23s.xyz というオレオレcatapultをやっています。

よくAPIノードやmongoDBがストップしています。

風のうわさで、ヘルスチェックツールがあるということを聞いたので、使ってみます。

作業

catapult.tools.health

新しくpeer-node-2-healthを作ります。環境に合わせて、peer-node-0-healthとかpeer-node-1-healthとかに変えてください。

docker-compose.yml
  peer-node-2-health:
    build: dockerfiles/health
    command: bash -c "/bin-mount/wait /state/configs-generated && /bin/bash /userconfig/health.sh && touch /state/peer-node-2-health"
    stop_signal: SIGINT
    volumes:
    - ./build/catapult-config/peer-node-2/userconfig/resources/:/userconfig/resources/
    - ./bin/bash:/bin-mount
    - ./build/state:/state:rw

ディレクトリ作ります。

$ mkdir -p dockerfiles/health/userconfig

Dockerfile作ります。

$ vi dockerfiles/health/Dockerfile
Dockerfile
FROM techbureau/catapult-tools:gcc-0.1.0.2
ADD ./userconfig /userconfig

実行シェル作ります。

$ vi dockerfiles/health/userconfig/health.sh
health.sh
/catapult/bin/catapult.tools.health --resources /userconfig/

起動します。

ひとつ目のコマンドで、標準出力に結果が表示されます。もう一度みたければ、2つ目のコマンドが使えます。

$ docker-compose up --build peer-node-2-health
$ docker-compose logs peer-node-2-lealth

設定ファイルが読み込まれます。

loading resources from "/userconfig/resources"
loading configuration from "/userconfig/resources/config-network.properties"
loading configuration from "/userconfig/resources/config-user.properties"
loading configuration from "/userconfig/resources/config-logging.properties"
loading configuration from "/userconfig/resources/config-node.properties"
loading configuration from "/userconfig/resources/peers-p2p.json"
loading configuration from "/userconfig/resources/peers-api.json"

なにかステータスが表示されます。

2018-09-24 04:52:01.540353 0x00007f878ebb2700: <info> (health::main.cpp@169) peer-node-2 @ peer-node-2
     ACNTST C : 27    |  ACTIVE PINGS : 0     |     B WRITERS : 0     |  BLK ELEM ACT : 0     | 
 BLK ELEM TOT : 1'369 |      BLKDIF C : 620   |        HASH C : 0     |    HASHLOCK C : 0     | 
  MEM CUR RSS : 16    |  MEM CUR VIRT : 752   |   MEM MAX RSS : 32    |   MEM SHR RSS : 0     | 
     MOSAIC C : 1     |   MOSAIC C DS : 1     |          NS C : 1     |       NS C AS : 1     | 
      NS C DS : 1     | RB COMMIT ALL : 14    | RB COMMIT RCT : 0     | RB IGNORE ALL : 19    | 
RB IGNORE RCT : 2     |       READERS : 5     |  SECRETLOCK C : 0     | SUCCESS PINGS : 0     | 
        TASKS : 12    |   TOTAL PINGS : 0     |   TS NODE AGE : 17    | TS OFFSET ABS : 0     | 
TS OFFSET DIR : 0     |  TS TOTAL REQ : 0     |   TX ELEM ACT : 0     |   TX ELEM TOT : 4     | 
 UNLKED ACCTS : 1     |      UT CACHE : 0     |       WRITERS : 2     |  

各ノードのブロック高とブロックスコアが表示されます。

APIノードは、接続ポートが3000に固定されているようで、うまく動きませんでした。

(追記)これについてNEMのSlackで質問しました。ブロック高とスコアはrest-gatewayに問い合わせおり、ポート3000で問題ないのではないか。そして、APIノードとrest-gatewayのIPが同じであることを前提とした作りなのではないか、ということでした。実際、dockerネットワークの外側からアクセスしたところ、うまく表示されます。

2018-09-24 04:52:01.541330 0x00007f878ebb2700: <warning> (health::main.cpp@136)             peer-node-2 @ peer-node-2 [P2P] at height 1279 with score 114882633655565888 
2018-09-24 04:52:01.541616 0x00007f878ebb2700: <error> (health::main.cpp@136)               api-node-0 @ api-node-0 [API] at height    0 with score 0 

ステータスの意味

こういうテストコードからヒントを探ります。

key value hint word hint file 意味を考える
ACNTST C 27 cache counters LocalNodeTests.cpp
ACTIVE PINGS 0 - NodeDiscoveryServiceTests.cpp
B WRITERS 0 NumActiveBroadcastWriters LocalNodeTestUtils.cpp
BLK ELEM ACT 0 Block_Elements_Active_Counter_Name DispatcherServiceTests.cpp
BLK ELEM TOT 1'369 Block_Elements_Counter_Name DispatcherServiceTests.cpp
BLKDIF C 620 - -
HASH C 0 - - Secret Lock Txで使われたsecretの数?
HASHLOCK C 0 - -
MEM CUR RSS 16 memory counters LocalNodeTests.cpp
MEM CUR VIRT 752 - -
MEM MAX RSS 32 - -
MEM SHR RSS 0 - -
MOSAIC C 1 GetMosaicView(cache)->size() NamespacePlugin.cpp モザイクの数
MOSAIC C DS 1 GetMosaicView(cache)->deepSize() NamespacePlugin.cpp モザイクの何か
NS C 1 GetNamespaceView(cache)->size() NamespacePlugin.cpp ネームスペースの数
NS C AS 1 GetNamespaceView(cache)->activeSize() NamespacePlugin.cpp ネームスペースの何か
NS C DS 1 GetNamespaceView(cache)->deepSize() NamespacePlugin.cpp ネームスペースの何か
RB COMMIT ALL 14 Rollback_Elements_Committed_All DispatcherServiceTests.cpp ブロック分岐の巻き戻し?
RB COMMIT RCT 0 Rollback_Elements_Committed_Recent DispatcherServiceTests.cpp ブロック分岐の巻き戻しの最近?
RB IGNORE ALL 19 Rollback_Elements_Ignored_All DispatcherServiceTests.cpp ブロック分岐の何か?
RB IGNORE RCT 2 Rollback_Elements_Ignored_Recent DispatcherServiceTests.cpp ブロック分岐の何か?
READERS 5 NumActiveReaders LocalNodeTestUtils.cpp
SECRETLOCK C 0 - - 有効期限内のSecret Lock Txの数?
SUCCESS PINGS 0 - NodeDiscoveryServiceTests
TASKS 12 NumScheduledTasks LocalNodeTestUtils.cpp
TOTAL PINGS 0 - NodeDiscoveryServiceTests
TS NODE AGE 17 Node_Age_Counter_Name TimeSynchronizationServiceTests.cpp
TS OFFSET ABS 0 Time_Offset_Absolute_Counter_Name TimeSynchronizationServiceTests.cpp
TS OFFSET DIR 0 Time_Offset_Direction_Counter_Name TimeSynchronizationServiceTests.cpp
TS TOTAL REQ 0 Total_Requests_Counter_Name TimeSynchronizationServiceTests.cpp
TX ELEM ACT 0 Transaction_Elements_Active_Counter_Name DispatcherServiceTests.cpp
TX ELEM TOT 4 service local node counters LocalNodeTests.cpp
UNLKED ACCTS 1 NumUnlockedAccounts LocalNodeTestUtils.cpp nemesis以外でTXを投げたことのあるアカウント数?
UT CACHE 0 basic local node counters LocalNodeTests.cpp
WRITERS 2 NumActiveWriters LocalNodeTestUtils.cpp

ぜんぜんわかりませんでした。わかったら更新していきます。

catapult.tools.network

docker-compose.yml
  peer-node-2-network:
    build: dockerfiles/network
    command: bash -c "/bin-mount/wait /state/configs-generated && /bin/bash /userconfig/network.sh && touch /state/peer-node-2-network"
    stop_signal: SIGINT
    volumes:
    - ./build/catapult-config/peer-node-2/userconfig/resources/:/userconfig/resources/
    - ./bin/bash:/bin-mount
    - ./build/state:/state:rw

ディレクトリを作ります。

$ mkdir -p dockerfiles/network/userconfig

Dockerfileを作ります。

$ vi dockerfiles/health/Dockerfile
Dockerfile
FROM techbureau/catapult-tools:gcc-0.1.0.2
ADD ./userconfig /userconfig

実行シェルを作ります。

$ vi dockerfiles/health/userconfig/network.sh
network.sh
/catapult/bin/catapult.tools.network --resources /userconfig/

起動します。

$ docker-compose up --build peer-node-2-network
$ docker-compose logs peer-node-2-network
loading resources from "/userconfig/resources"
loading configuration from "/userconfig/resources/config-network.properties"
loading configuration from "/userconfig/resources/config-user.properties"
loading configuration from "/userconfig/resources/config-logging.properties"
loading configuration from "/userconfig/resources/config-node.properties"
loading configuration from "/userconfig/resources/peers-p2p.json"
loading configuration from "/userconfig/resources/peers-api.json"

各ノードへ接続し、マトリックスで表示されます。

2018-09-24 04:59:46.548541 0x00007fe03a469700: <info> (network::main.cpp@288) 
                   |       peer-node-1 |    peer-node-     | peer-node-        |       api-node-19 |     api-node-     
 ----------------- | ----------------- | ----------------- | ----------------- | ----------------- | ----------------- |
       peer-node-1 |                   |               R S |               R S |                 R |                 R |
    peer-node-     |               R S |                   |               R S |                 R |                 R 
 peer-node-        |               R S |               R S |                   |                 R |                 R |
       api-node-19 |                 S |                 S |                 S |                   |               P R |
     api-node-     |                 S |                 S |                 S |               P R |                   |
 ----------------- | ----------------- | ----------------- | ----------------- | ----------------- | ----------------- | 

RREADSSYNCPPARTです(意味はわかりません)。

peer <=> peerR S
api <=> apiP R
peer <=> apiは、SR

おそらく、peerapiへ書き込み(SYNC)して、apipeerから読み取り(READ)ということでしょうか。

所感

これを使って、死活監視とかできないかな~と思っていたけど、この出力は整形する必要がありますね。

techbureau/catapult-tools:gcc-0.1.0.2には、nemgenaddressも入っているので、必要に応じて同じパターンで作れますね。

ヘルスステータスの意味をご存知の方はぜひおしえてください。

関連記事

catapult-service-bootstrapにpeer-nodeを追加する その1 サービス追加
https://qiita.com/planethouki/items/b80fe29157d80a63122c

catapult-service-bootstrapにpeer-nodeを追加する その2 サーバー編
https://qiita.com/planethouki/items/4c73a6b924b92529bd32

catapult-service-bootstrap その3 ホスト名とポート変更
https://qiita.com/planethouki/items/d365f2344c0f7a6c3523

catapult-service-bootstrap その4 チェーンの手動削除
https://qiita.com/planethouki/items/7ec5404701adeb96bb8e

catapult-service-bootstrap その5 catapult.tools.health/network
https://qiita.com/planethouki/items/5ed19ae8ceb67ad6fee0

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?