概要
catapult-service-bootstrapを使ってcatapult48gh23s.xyz というオレオレcatapultをやっています。
よくAPIノードやmongoDBがストップしています。
風のうわさで、ヘルスチェックツールがあるということを聞いたので、使ってみます。
作業
catapult.tools.health
新しくpeer-node-2-health
を作ります。環境に合わせて、peer-node-0-health
とかpeer-node-1-health
とかに変えてください。
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
FROM techbureau/catapult-tools:gcc-0.1.0.2
ADD ./userconfig /userconfig
実行シェル作ります。
$ vi dockerfiles/health/userconfig/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
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
FROM techbureau/catapult-tools:gcc-0.1.0.2
ADD ./userconfig /userconfig
実行シェルを作ります。
$ vi dockerfiles/health/userconfig/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 | |
----------------- | ----------------- | ----------------- | ----------------- | ----------------- | ----------------- |
R
がREAD
、S
がSYNC
、P
がPART
です(意味はわかりません)。
peer <=> peer
はR S
api <=> api
はP R
peer <=> api
は、S
かR
おそらく、peer
はapi
へ書き込み(SYNC
)して、api
はpeer
から読み取り(READ
)ということでしょうか。
所感
これを使って、死活監視とかできないかな~と思っていたけど、この出力は整形する必要がありますね。
techbureau/catapult-tools:gcc-0.1.0.2
には、nemgen
とaddress
も入っているので、必要に応じて同じパターンで作れますね。
ヘルスステータスの意味をご存知の方はぜひおしえてください。
関連記事
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