Skip to content

samouraiworld/gnomonitoring

Repository files navigation

๐Ÿ› ๏ธ Monitoring Gnoland Validators

This repository provides lightweight tools to monitor the Gno.land blockchain and its validators.

๐Ÿงฉ Architecture Overview:

Architecture Overview

Two services are available:

  • GovDAO โ€“ Detect news proposal and status (ACCEPTED / REFUSED / IN PROGRESS).

  • Validator Alerting โ€“ Monitors the entire validator set, calculates participation rates and sends Discord/Slack/Telegram alerts when needed. Also exposes Prometheus metrics.


๐Ÿ› ๏ธ Setup

Requirements

1.Copy the configuration template and edit it:

cd backend 
cp config.yaml.template config.yaml 
nano config.yaml

2.Customize parameters as needed. For example:

backend_port: "8989"
allow_origin: "http://localhost:3000"
rpc_endpoint: "https://rpc.test9.testnets.gno.land"
metrics_port: 8888
gnoweb: "https://test9.testnets.gno.land"
graphql: "indexer.test9.testnets.gno.land/graphql/query"
clerk_secret_key: "sk_test...." #change me
dev_mode: false # Set to true for local development without Clerk auth
token_telegram_validator: ""
token_telegram_govdao: ""

3.Start the backend:

docker compose up -d 

๐Ÿ”— Webhook Management (Discord / Slack)

โœš Add webhook URL:

curl -L -X POST '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token ' \
-d '{
     "URL": "https://discord.com/api/webhooks/.....",
    "Type": "discord",
    "Description":"Samourai"
  }'

โ˜ฐ List webhook URL:

curl -L -X GET '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token' 

โŒ Delete webhook URL:

curl -L -X DELETE '127.0.0.7:8989/webhooks/[govdao | validator]?id=2' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token' 

๐Ÿ”„ Update webhook URL:

curl -L -X PUT '127.0.0.7:8989/webhooks/[govdao | validator]' \
-H 'Content-Type: application/json' \
-H 'Authorization: Bearer Clerk_Token' 
-d '{
    "ID": 3,
   
    "URL": "https://discord.com/api/...",
    "Type": "discord",
    "Description": "Samourai"
}

๐Ÿ“ข ALERTING

Sends alerts (Discord/Slack) when:

  • Rpc is down
  • The blockchain is stuck on the same block for more than 2 minutes.

Alert example

  • A new validator joins the network.

News Validators

  • A validator's missed block :
    • WARNING if a validator missed 5 blocks.
    • CRITICAL if a validator missed more of 30 blocks
  • Send Resolve Alert.

Alert example

  • Send Daily Report:

Discord alert daily


๐Ÿ“ Expose Metrics from API REST

The disponible period for metrics:

  • current_week
  • current_month
  • current_year
  • all_time

Participate Rate:

The participation rate represents the percentage of blocks in which a validator successfully participated during a given time period.

curl -X GET '127.0.0.1:8989/Participation?period=all_time'

Response:

[{"addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","moniker":"gnocore-val-01","participationRate":100},
  {"addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","moniker":"onbloc-val-02","participationRate":100}]

Missing Block Metrics: The Missing Block metric measures the total number of blocks that a validator failed to participate in during a given period

curl -X GET '127.0.0.1:8989/missing_block?period=all_time''

Response:

[{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","missingBlock":1},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","missingBlock":1},
{"moniker":"onbloc-val-01","addr":"g1kntcjkfplj0z44phajajwqkx5q4ry5yaft5q2h","missingBlock":1}...

Tx Contrib Metrics: The Tx Contribution metric measures how much a validator has contributed to the total number of transactions processed across all validators during a specific period.

curl -X GET '127.0.0.1:8989/tx_contrib?period=all_time'

Response:

[{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","txContrib":14.4},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","txContrib":22.9},...

Lastest incidents: The Latest Incidents metric retrieves the most recent critical or warning events (alerts) detected for validators within a specific time period.

curl -X GET '127.0.0.1:8989/latest_incidents?period=all_time'

Response:

[{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","level":"CRITICAL","startHeight":78811,"endHeight":78840,"msg":"","sentAt":"2025-10-20T14:40:45.452216011-03:00"},
{"moniker":"all","addr":"all","level":"CRITICAL","startHeight":78840,"endHeight":78840,"msg":"๐Ÿšจ CRITICAL : Blockchain stuck at height 78840 since 18 Oct 25 16:29 UTC (121h33m45s ago)","sentAt":"2025-10-23T15:03:10.282235678-03:00"},
{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","level":"WARNING","startHeight":78834,"endHeight":78838,"msg":"","sentAt":"2025-10-22T13:28:53.018836743-03:00"},

Uptime Metrics:

Validator Uptime represents the percentage of the last 500 blocks in which a validator was active and participated successfully.

curl -X GET 'localhost:8989/uptime'

Response:

[{"moniker":"onbloc-val-02","addr":"g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2","uptime":94},
{"moniker":"gnocore-val-01","addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t","uptime":100}]

Operation time Metrics:

Operation Time represents the number of days between a validatorโ€™s last successful participation and its most recent downtime.

curl -X GET 'localhost:8989/operation_time'

Response:

[{"moniker":"gnocore-val-01",
"addr":"g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t",
"lastDownDate":"2025-10-14 08:00:00+00:00",
"lastUpDate":"2025-10-18 16:29:24.242186417+00:00","operationTime":4.4}....

๐Ÿ“ˆ Prometheus Metrics

Metrics are exposed at http://localhost:8888/metrics.

Status of Validator

List of metrics:

  • gnoland_validator_participation_rate{moniker="gnocore-val-01",validator_address="g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t"} 99.99873156005428
  • gnoland_missed_blocks{moniker="gnocore-val-01",validator_address="g1ek7ftha29qv4ahtv7jzpc0d57lqy7ynzklht7t"} 1
  • gnoland_consecutive_missed_blocks{moniker="onbloc-val-02",validator_address="g1j306jcl4qyhgjw78shl3ajp88vmvdcf7m7ntm2"} 30

โœ‰๏ธ Telegram Bot

๐ŸŒ Govdao bot

/status โ€” list recent GovDAO proposals โฎ‘ Params: limit (optional, default: 10) /status limit=5

/executedproposals โ€” show the last executed proposals โฎ‘ Params: limit (optional, default: 10) /executedproposals limit=5

/lastproposal โ€” show the most recent proposal

๐ŸŒ Gnovalidator bot

โฑ๏ธ Available periods

  • current_week
  • current_month
  • current_year
  • all_time

๐Ÿ“ก Commands

๐Ÿšฆ Particpate rate command Shows the participation rate of validators for a given period. Examples:

/status [period=...] [limit=N]

  • /status (defaults: period=current_month, limit=10)
  • /status period=current_month limit=5

๐Ÿ•’ Up time command Displays uptime statistics of validator. Examples:

/uptime [limit=N]

  • /uptime (default: limit=10)
  • /uptime limit=3

๐Ÿ’ช Tx contribution command Shows each validatorโ€™s contribution to transaction inclusion. Examples: /tx_contrib [period=...] [limit=N]

  • /tx_contrib (defaults: period=current_month, limit=10)
  • /tx_contrib period=current_year limit=20

๐Ÿšง Subscribe missing block command Displays how many blocks each validator missed for a given period. Examples:

/missing [period=...] [limit=N]

  • /missing (defaults: period=current_month, limit=10)
  • /missing period=all_time limit=50

๐Ÿ“ฌ Subscribe command Show your active subscriptions and available validators

  • /subscribe list

Enable alerts for one or more validators

  • /subscribe on [addr] [more...]

Disable alerts for one or more validators

  • /subscribe off [addr] [more...]\n

Enable alerts for all validators

  • /subscribe on all

Disable alerts for all validators

  • /subscribe off all

About

Gno Monitoring

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •