はじめに
Google SpreadSheetとGASを使って手軽にSymbolブロックチェーンのDualノードを監視する試み。
GASで定期実行しつつ、ノードを監視してエラーがあったらスプレッドシートに記載&通知できます。
監視内容
- 死活監視: ノードAPIへのリクエストタイムアウト
- ヘルスチェック: DB・APIの状態監視
-
ブロック高監視: 他ノードとの同期遅延検出
- 他のノードとの差分を取るため2つ以上のノードを設定してください。他人のノードでOK
- ただし、その他人のノードのエラーも通知されます。。。
- SSL証明書: 期限切れの検出
必要なもの
- Googleアカウント
- 監視したいSymbolノードのURL
- (オプション) Slack通知用のWebhookまたはBot Token
- 無い場合はメールで通知します
セットアップ手順
1. Googleスプレッドシートの準備
1-1. 新しいスプレッドシートを作成
- Google Driveにアクセスし、新しいスプレッドシートを作成
- シート名を
mainnet
に変更
1-2. スプレッドシートの設定
以下のTSVデータをコピーして、A1セルから貼り付けてください:
ノード監視シート 基準ブロック高 =max(G4:G) ブロックしきい値 5
ノードURL Status ErrorType DB API BlockHeight エラー発生日時 エラー最終通知日時 無効
https://your-node1.example.com:3001 Running up up 1,670,000
https://your-node2.example.com:3001 Running up up 1,670,000
こんな感じ(D1セルは数式です)
1-3. プルダウンの設定
必須ではないですが、以下の列にデータ入力規則を設定しておくと色分けされてわかりやすいです。
C列(Status):
- Running
- Error
- Delay
E列(DB):
- up
- down
- unknown
F列(API):
- up
- down
- unknown
J列(無効):
- 無効
- (空白)
- 無効と入力するとそのノードに対するチェックはされません
2. Google Apps Scriptの設定
2-1. GASプロジェクトの作成
- スプレッドシートから「拡張機能」→「Apps Script」を選択
- 新しいGASプロジェクトが作成されます
2-2. コードの追加
GitHubからコードを取得:
以下のリンクからGASコードをコピーしてください:
GitHub - Symbol Node Monitoring Code
2-3. プロパティの設定(任意)
GASの設定で、プロパティストアに以下の値を設定できます:
設定方法: GAS画面左メニューの「設定」→「スクリプトプロパティ」
プロパティ名 | 説明 | 必須 |
---|---|---|
EMAIL_ADDRESS | 通知先メールアドレス | 任意(Slack通知設定ずみの場合は通知しない) |
SLACK_WEBHOOK_URL | SlackのWebhook URL | 任意(Slack Botで通知する場合は不要) |
SLACK_TOKEN | SlackのBot Token | 任意(WebhookURLで通知する場合は不要) |
SLACK_CHANNEL | 通知先Slackチャンネル | 任意(WebhookURLで通知する場合は不要) |
何も設定しないとトリガーを設定したGoogleアカウントのGmailに通知されます。
3. Slack通知の設定(任意)
3-1. Webhook URLを使用する場合
- Slackワークスペースの設定から「アプリ」を選択
- 「Incoming Webhooks」アプリを検索・追加
- 通知したいチャンネルを選択してWebhook URLを取得
- GASプロパティストアの
SLACK_WEBHOOK_URL
に設定
3-2. Bot Tokenを使用する場合
- Slack APIでアプリを作成
- Bot Tokenを取得
- GASプロパティストアの
SLACK_TOKEN
とSLACK_CHANNEL
に設定
4. トリガーの設定
4-1. 定期実行の設定
- GAS画面左メニューの「トリガー」を選択
- 「トリガーを追加」をクリック
- 以下の設定で作成:
- 実行する関数:
main
- イベントのソース: 時間主導型
- 時間ベースのトリガーのタイプ: 分ベースのタイマー
- 時間の間隔: 5分おき
- 実行する関数:
4-2. 権限の許可
初回実行時に、Googleアカウントへのアクセス許可が求められるので承認してください。
使い方
ノードの追加
- スプレッドシートのB列に監視したいノードURLを追加
- 自動で監視が開始されます
ノードの無効化
J列に「無効」と入力すると、そのノードの監視を停止できます。
通知の仕組み
エラー通知
- ノードに異常が検出されると、最初のエラーから30分間隔で通知
- 件名:🚨 Symbol Node Monitoring - Error - [ドメイン名]
復旧通知
- エラー状態から正常に復旧した場合に1回だけ通知
- 件名:✅ Symbol Node Monitoring - Recovery - [ドメイン名]
監視内容の詳細
1. 死活監視
- 各ノードに5秒以内のレスポンス要求
- タイムアウト時は「Error」状態に設定
2. ヘルスチェック
-
/node/health
エンドポイントでDB・API状態を確認 - 異常時は「Error」状態に設定
3. ブロック高監視
-
/chain/info
エンドポイントでブロック高を取得 - 設定しきい値より遅延している場合「Delay」状態に設定
4. SSL証明書監視
- SSL証明書のエラーを検出
- 期限切れ等の場合「Error」状態に設定
カスタマイズ
しきい値の調整
- スプレッドシートG1セルでブロック遅延のしきい値を変更可能
- デフォルトは5ブロック
通知間隔の変更
-
Code.js
のNOTIFICATION_INTERVAL
定数で変更可能 - デフォルトは30分(30 * 60 * 1000ミリ秒)
testnet環境の監視
-
testnet
という名前のシートを作成すると通知なしで監視可能 -
main
関数内の該当行のコメントアウトを解除