@blinklabs/dingo 0.46.3 → 0.80.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,376 +0,0 @@
1
- # Example config file for dingo
2
- # The values shown below correspond to the in-code defaults unless a
3
- # setting is left commented out to preserve a storage-mode-specific
4
- # runtime default.
5
-
6
- # Public bind address for the Dingo server
7
- # CLI: --bind-addr
8
- bindAddr: "0.0.0.0"
9
-
10
- # Path to the Cardano node configuration file
11
- #
12
- # Can be overridden with the config environment variable
13
- # CLI: --cardano-config
14
- cardanoConfig: "./config/cardano/preview/config.json"
15
-
16
- # Global data directory for both blob and metadata storage plugins.
17
- # Can be overridden with CARDANO_DATABASE_PATH or --data-dir.
18
- # Plugin-specific data-dir settings below override this value.
19
- databasePath: ".dingo"
20
-
21
- # Database configuration
22
- database:
23
- # Blob storage plugin configuration
24
- blob:
25
- # Plugin to use for blob storage (badger, gcs, s3)
26
- plugin: "badger"
27
- # Configuration options for each plugin
28
- badger:
29
- # Data directory for BadgerDB storage
30
- data-dir: ".dingo/badger"
31
- # Block cache size in bytes.
32
- # Leave unset to use the storage-mode default:
33
- # - 0 when storageMode: "core"
34
- # - 268435456 (256MB) when storageMode: "api"
35
- # block-cache-size: 0
36
- # Index cache size in bytes.
37
- # Leave unset to use the runtime default (0 in both core and api modes).
38
- # index-cache-size: 0
39
- # Enable garbage collection (default: true)
40
- gc: true
41
- # Enable Snappy compression.
42
- # Leave unset to use the storage-mode default:
43
- # - false when storageMode: "core"
44
- # - true when storageMode: "api"
45
- # compression: false
46
- gcs:
47
- # Google Cloud Storage bucket name
48
- bucket: ""
49
- # Google Cloud project ID
50
- project-id: ""
51
- # Path prefix within the bucket
52
- prefix: ""
53
- s3:
54
- # AWS Endpoint
55
- endpoint: ""
56
- # AWS S3 bucket name
57
- bucket: ""
58
- # AWS region
59
- region: ""
60
- # Path prefix within the bucket
61
- prefix: ""
62
- # AWS access key ID (optional - uses default credential chain if not set)
63
- access-key-id: ""
64
- # AWS secret access key (optional - uses default credential chain if not set)
65
- secret-access-key: ""
66
-
67
- # Metadata storage plugin configuration
68
- metadata:
69
- # Plugin to use for metadata storage (sqlite, postgres, mysql)
70
- plugin: "sqlite"
71
- # Configuration options for each plugin
72
- sqlite:
73
- # Path to SQLite database file
74
- data-dir: ".dingo/metadata.db"
75
- postgres:
76
- # NOTE: These are example values for local development only.
77
- # Do not use these credentials in production environments.
78
- # Postgres host
79
- host: "localhost"
80
- # Postgres port
81
- port: 5432
82
- # Postgres user
83
- user: "postgres"
84
- # Postgres password (required - no default)
85
- password: ""
86
- # Postgres database name
87
- database: "postgres"
88
- # Postgres sslmode
89
- ssl-mode: "disable"
90
- # Postgres TimeZone
91
- timezone: "UTC"
92
- # Full Postgres DSN (overrides other options when set)
93
- dsn: ""
94
- mysql:
95
- # NOTE: These are example values for local development only.
96
- # Do not use these credentials in production environments.
97
- # MySQL host
98
- host: "localhost"
99
- # MySQL port
100
- port: 3306
101
- # MySQL user
102
- user: "root"
103
- # MySQL password (required - no default)
104
- password: ""
105
- # MySQL database name
106
- database: "mysql"
107
- # MySQL TLS mode (mapped to tls= in DSN)
108
- ssl-mode: ""
109
- # MySQL time zone location
110
- timezone: "UTC"
111
- # Full MySQL DSN (overrides other options when set)
112
- dsn: ""
113
-
114
- # Path to the UNIX domain socket file used by the server
115
- # CLI: --socket-path
116
- socketPath: "dingo.socket"
117
-
118
- # Name of the Cardano network
119
- # CLI: --network
120
- network: "preview"
121
-
122
- # TLS certificate file path (for HTTPS)
123
- #
124
- # Can be overridden with the TLS_CERT_FILE_PATH environment variable
125
- tlsCertFilePath: ""
126
-
127
- # TLS key file path (for HTTPS)
128
- #
129
- # Can be overridden with the TLS_KEY_FILE_PATH environment variable
130
- tlsKeyFilePath: ""
131
-
132
- # Path to the topology configuration file for Cardano node
133
- topology: ""
134
-
135
- # TCP port to bind for Prometheus metrics endpoint
136
- # CLI: --metrics-port
137
- metricsPort: 12798
138
-
139
- # TCP port to bind for pprof debug endpoints (heap, profile, goroutine, etc).
140
- # 0 disables. Operators opt in; never enable in production by default — debug
141
- # endpoints expose internal state and run on a separate listener from metrics.
142
- # CLI: --debug-port Env: DINGO_DEBUG_PORT
143
- debugPort: 0
144
-
145
- # Internal/private address to bind for listening for Ouroboros NtC
146
- privateBindAddr: "127.0.0.1"
147
-
148
- # TCP port to bind for listening for Ouroboros NtC
149
- # CLI: --private-port
150
- privatePort: 3002
151
-
152
- # TCP port to bind for listening for Ouroboros NtN
153
- #
154
- # Can be overridden with the port environment variable
155
- # CLI: --port
156
- relayPort: 3001
157
-
158
- # Storage mode controls how much data is persisted.
159
- # - "core": Only consensus data (UTxOs, certs, pools, pparams). Suitable for
160
- # block producers and relay nodes. API ports are ignored in core mode.
161
- # - "api": Core data plus full transaction metadata (witnesses, scripts, datums,
162
- # redeemers). All APIs start automatically on their default ports.
163
- #
164
- # Can be overridden with DINGO_STORAGE_MODE
165
- # CLI: --storage-mode
166
- storageMode: "core"
167
-
168
- # API ports — only used when storageMode is "api".
169
- # In API mode, all APIs start on their default ports. Set a port to 0 to
170
- # disable an individual API.
171
- #
172
- # UTxO RPC gRPC API port (default: 9090)
173
- # Can be overridden with DINGO_UTXORPC_PORT
174
- # CLI: --utxorpc-port
175
- utxorpcPort: 9090
176
- # Blockfrost-compatible REST API port (default: 3000)
177
- # Can be overridden with DINGO_BLOCKFROST_PORT
178
- # CLI: --blockfrost-port
179
- blockfrostPort: 3000
180
- # Mesh (Coinbase Rosetta) REST API port (default: 8080)
181
- # Can be overridden with DINGO_MESH_PORT
182
- # CLI: --mesh-port
183
- meshPort: 8080
184
-
185
- # base url of bark archive server
186
- # CLI: --bark-url
187
- barkBaseUrl: ""
188
-
189
- # TCP port bind for listening for bark RPC calls
190
- # CLI: --bark-port
191
- barkPort: 0
192
-
193
- # ---
194
- # Deployment pattern examples (uncomment one block):
195
- #
196
- # Relay node (core storage, API ports ignored):
197
- # storageMode: "core"
198
- # blockProducer: false
199
- #
200
- # Data node (all APIs start on defaults automatically):
201
- # storageMode: "api"
202
- # # Override individual ports or set to 0 to disable:
203
- # # blockfrostPort: 3100
204
- # # meshPort: 0 # disable Mesh API
205
- # # With storageMode: "api", leave mode-sensitive Badger settings unset to keep:
206
- # # block-cache-size: 268435456
207
- # # index-cache-size: 0
208
- # # compression: true
209
- #
210
- # Validator / block producer (core storage, API ports ignored):
211
- # storageMode: "core"
212
- # blockProducer: true
213
- # shelleyVrfKey: "/keys/vrf.skey"
214
- # shelleyKesKey: "/keys/kes.skey"
215
- # shelleyOperationalCertificate: "/keys/opcert.cert"
216
- # # With storageMode: "core", Badger blob defaults switch to mmap-only:
217
- # # block-cache-size: 0
218
- # # index-cache-size: 0
219
- # # compression: false
220
- # # You can still override any of those explicitly under database.blob.badger.
221
- # # Optional forging tolerances (0 = defaults)
222
- # forgeSyncToleranceSlots: 0
223
- # forgeStaleGapThresholdSlots: 0
224
- #
225
- # Dev mode (isolated, forge blocks, no outbound):
226
- # runMode: "dev"
227
- # ---
228
-
229
- # Ignore prior chain history and start from current tip (default: false)
230
- # This is experimental and may break — use with caution
231
- intersectTip: false
232
-
233
- # Maximum total size (in bytes) of all transactions allowed in the mempool.
234
- # Transactions exceeding this limit will be rejected.
235
- # Default: 1048576 (1 MiB) for Praos modes; 26214400 (25 MiB) for Leios.
236
- # Leave commented to use the mode default; uncomment to override.
237
- # CLI: --mempool-capacity
238
- # mempoolCapacity: 1048576
239
-
240
- # Forging tolerances (0 = defaults)
241
- # forgeSyncToleranceSlots controls how far the local chain can lag the upstream
242
- # tip before forging is skipped. forgeStaleGapThresholdSlots controls when to
243
- # log an error if the chain tip is far ahead of the slot clock.
244
- forgeSyncToleranceSlots: 0
245
- forgeStaleGapThresholdSlots: 0
246
-
247
- # Operational mode: "serve" (default), "load", or "dev"
248
- # - serve: Full node with network connectivity (default)
249
- # - load: Batch import from ImmutableDB (requires immutableDbPath)
250
- # - dev: Development mode (forge blocks, disable outbound, skip topology)
251
- # Note: CLI commands (serve, load) take priority over this setting
252
- #
253
- # Can be overridden with the DINGO_RUN_MODE environment variable
254
- # CLI: --run-mode
255
- runMode: "serve"
256
-
257
- # Path to ImmutableDB for batch import (used when runMode is "load")
258
- # Can also be provided as argument to 'dingo load' command
259
- #
260
- # Can be overridden with the DINGO_IMMUTABLE_DB_PATH environment variable
261
- # CLI: --immutable-db-path
262
- immutableDbPath: ""
263
-
264
- # Validate historical blocks during ledger processing (default: false)
265
- validateHistorical: false
266
-
267
- # Peer targets - target number of peers in each state
268
- # These are goals the system works toward, not hard limits.
269
- # Use 0 for default values, -1 for unlimited
270
- # Default: known=150, established=50, active=20
271
- #
272
- # Target number of known (cold) peers
273
- # CLI: --target-known-peers
274
- targetNumberOfKnownPeers: 0
275
- # Target number of established (warm) peers
276
- # CLI: --target-established-peers
277
- targetNumberOfEstablishedPeers: 0
278
- # Target number of active (hot) peers
279
- # CLI: --target-active-peers
280
- targetNumberOfActivePeers: 0
281
-
282
- # Per-source quotas for active peers
283
- # These specify how active peer slots are distributed by source.
284
- # Use 0 for default values.
285
- # Default: topology=3, gossip=12, ledger=5
286
- #
287
- # Active peer slots for topology sources (local + public roots)
288
- activePeersTopologyQuota: 0
289
- # Active peer slots for gossip sources
290
- activePeersGossipQuota: 0
291
- # Active peer slots for ledger sources
292
- activePeersLedgerQuota: 0
293
-
294
- # Inbound peer governance budget (phase 1)
295
- # These define explicit operator intent for inbound peers as a governed source.
296
- # Current behavior remains conservative; these values are surfaced in metrics and
297
- # quota/status output to make inbound policy visible.
298
- #
299
- # Target number of inbound peers to keep in warm state.
300
- # CLI: --inbound-warm-target
301
- inboundWarmTarget: 0
302
- # Quota for inbound peers in hot state.
303
- # CLI: --inbound-hot-quota
304
- inboundHotQuota: 0
305
- # Minimum tenure before inbound peers are eligible for hot promotion.
306
- # CLI: --inbound-min-tenure
307
- inboundMinTenure: 0s
308
- # Minimum score threshold for inbound hot promotion.
309
- # CLI: --inbound-hot-score-threshold
310
- inboundHotScoreThreshold: 0
311
- # Future prune grace window for inbound peers.
312
- # CLI: --inbound-prune-after
313
- inboundPruneAfter: 0s
314
- # Future duplex policy knob for inbound peers.
315
- # CLI: --inbound-duplex-only-for-hot
316
- inboundDuplexOnlyForHot: false
317
- # Future cooldown knob for inbound peer governance actions.
318
- # CLI: --inbound-cooldown
319
- inboundCooldown: 0s
320
-
321
- # Genesis bootstrap configuration
322
- # Used only for from-origin sync. Default behavior keeps this enabled and
323
- # exits Genesis mode automatically near the best known peer tip.
324
- genesisBootstrap:
325
- # Enable/disable Genesis bootstrap mode (default: true).
326
- enabled: true
327
- # Override the Genesis comparison window in slots.
328
- # 0 auto-derives the window from genesis params (3k/f).
329
- windowSlots: 0
330
- # Minimum diversity groups to prefer while promoting peers during bootstrap.
331
- # 0 uses the peer-governor default.
332
- promotionMinDiversityGroups: 0
333
-
334
- # Cache configuration for tiered CBOR cache system
335
- # This controls the in-memory caching of UTxO and transaction CBOR data
336
- cache:
337
- # Number of entries in the hot UTxO cache (LFU eviction)
338
- # Default: 50000
339
- # CLI: --cache-hot-utxo-entries
340
- hotUtxoEntries: 50000
341
- # Number of entries in the hot transaction cache (LFU eviction)
342
- # Default: 10000
343
- hotTxEntries: 10000
344
- # Maximum memory in bytes for hot transaction cache
345
- # Default: 268435456 (256 MB)
346
- hotTxMaxBytes: 268435456
347
- # Number of blocks to keep in the block LRU cache
348
- # Default: 500
349
- # CLI: --cache-block-lru-entries
350
- blockLruEntries: 500
351
- # Number of recent blocks to warm up on startup
352
- # Default: 1000
353
- warmupBlocks: 1000
354
- # Wait for cache warmup to complete before serving requests
355
- # Default: true
356
- # CLI: --cache-warmup-sync
357
- warmupSync: true
358
-
359
- # Mithril snapshot bootstrap configuration
360
- # Use 'dingo mithril sync' or 'dingo sync --mithril' to bootstrap from a snapshot
361
- # CLI: --mithril-enabled, --mithril-verify-certs
362
- mithril:
363
- # Enable Mithril integration (default: true)
364
- enabled: true
365
- # Override aggregator URL (auto-detected from network if empty)
366
- # Supported networks: mainnet, preprod, preview
367
- aggregatorUrl: ""
368
- # Directory for downloading snapshot archives
369
- # If empty, a randomized temporary directory is created automatically
370
- # downloadDir: ""
371
- # Remove temporary files after loading completes
372
- # Default: true
373
- cleanupAfterLoad: true
374
- # Verify the Mithril certificate chain from snapshot back to genesis
375
- # Default: true
376
- verifyCertificates: true
@@ -1,51 +0,0 @@
1
- # Dingo Cardano Node - Docker Compose Configuration
2
- #
3
- # Usage:
4
- # docker compose up -d # Start with defaults (preview network)
5
- # CARDANO_NETWORK=mainnet docker compose up -d # Start on mainnet
6
- #
7
- # With Mithril snapshot bootstrap (first run only):
8
- # RESTORE_SNAPSHOT=1 docker compose up -d
9
-
10
- services:
11
- # --------------------------------------------------------------------------
12
- # Basic relay node
13
- # --------------------------------------------------------------------------
14
- dingo:
15
- build:
16
- context: .
17
- dockerfile: Dockerfile
18
- image: ghcr.io/blinklabs-io/dingo:latest
19
- restart: unless-stopped
20
- environment:
21
- - CARDANO_NETWORK=${CARDANO_NETWORK:-preview}
22
- - CARDANO_DATABASE_PATH=/data/db
23
- - DINGO_SOCKET_PATH=/ipc/dingo.socket
24
- # Uncomment to enable debug logging
25
- # - DINGO_DEBUG=1
26
- # Uncomment to bootstrap from Mithril snapshot on first run
27
- # - RESTORE_SNAPSHOT=1
28
- ports:
29
- # Ouroboros Node-to-Node (relay port)
30
- - "3001:3001"
31
- # Prometheus metrics (localhost only by default)
32
- - "127.0.0.1:12798:12798"
33
- # UTxO RPC (gRPC, localhost only by default)
34
- - "127.0.0.1:9090:9090"
35
- volumes:
36
- # Persistent database storage
37
- - dingo-data:/data/db
38
- # Unix socket for cardano-cli and other NtC clients
39
- - dingo-ipc:/ipc
40
- healthcheck:
41
- test: ["CMD", "wget", "-qO-", "http://127.0.0.1:12798/metrics"]
42
- interval: 30s
43
- timeout: 5s
44
- start_period: 60s
45
- retries: 3
46
-
47
- volumes:
48
- dingo-data:
49
- driver: local
50
- dingo-ipc:
51
- driver: local
@@ -1,188 +0,0 @@
1
- # Dingo Grafana Dashboards
2
-
3
- Monitoring dashboards for [Dingo](https://github.com/blinklabs-io/dingo), the Go Cardano node by Blink Labs.
4
-
5
- ## Dashboards
6
-
7
- | Dashboard | File | Description |
8
- |-----------|------|-------------|
9
- | **Node Overview** | `node-overview.json` | At-a-glance header (epoch, slot, tip gap, density, blockfetch, mempool, KES, peers, storage, runtime), block height, epoch progress, forging stats |
10
- | **Block Production** | `block-production.json` | Forge latency heatmap, block delay CDFs, forge rates, KES lifecycle |
11
- | **Peer Health** | `peer-health.json` | Hot/warm/cold peers, connection types, peer state timeseries, promotions/demotions, network I/O |
12
- | **Mempool** | `mempool.json` | Pending TXs, mempool size, TX lifecycle, CBOR cache, event bus |
13
- | **Resource Usage** | `resources.json` | CPU, memory, GC heatmap, disk I/O, IOPS, PSI pressure, Badger, file descriptors |
14
-
15
- `full-panel.json` contains the standalone Business Text header panel for embedding into custom dashboards.
16
-
17
- ## Prerequisites
18
-
19
- Before you begin, make sure you have:
20
-
21
- - **Grafana 12+** (tested on 12.4) — [install guide](https://grafana.com/docs/grafana/latest/setup-grafana/installation/)
22
- - **Prometheus** scraping your Dingo node on port `12798` (configured in step 2 below)
23
- - **Dingo** node with metrics enabled (default port `12798`)
24
- - **[Business Text plugin](https://grafana.com/grafana/plugins/marcusolsson-dynamictext-panel/)** — required by all dashboards for the header panel
25
- - **[prometheus-node-exporter](https://github.com/prometheus/node_exporter)** — required only by the Resource Usage dashboard for host-level CPU, memory, and disk metrics
26
-
27
- ## Quick start
28
-
29
- ### 1. Install the Business Text plugin
30
-
31
- Open a terminal on the machine running Grafana and run:
32
-
33
- ```bash
34
- grafana-cli plugins install marcusolsson-dynamictext-panel
35
- sudo systemctl restart grafana-server
36
- ```
37
-
38
- If you are running Grafana in Docker or Kubernetes, set the environment variable instead:
39
-
40
- ```text
41
- GF_INSTALL_PLUGINS=marcusolsson-dynamictext-panel
42
- ```
43
-
44
- ### 2. Configure Prometheus scrape targets
45
-
46
- Prometheus needs to know where to find your Dingo node. Add the following to your `prometheus.yml` under `scrape_configs`:
47
-
48
- ```yaml
49
- - job_name: dingo
50
- scrape_interval: 15s
51
- static_configs:
52
- - targets: ['localhost:12798']
53
-
54
- # Optional: required for Resource Usage dashboard
55
- - job_name: node
56
- scrape_interval: 15s
57
- static_configs:
58
- - targets: ['localhost:9100']
59
- ```
60
-
61
- Then reload Prometheus to apply the change:
62
-
63
- ```bash
64
- sudo systemctl reload prometheus
65
- ```
66
-
67
- ### 3. Import dashboards
68
-
69
- There are two ways to get the dashboards into Grafana.
70
-
71
- **Option A: Provisioning (recommended)**
72
-
73
- Provisioning automatically loads dashboards from files on disk. Grafana will pick them up on startup or within about 30 seconds if already running.
74
-
75
- ```bash
76
- sudo cp docs/dashboards/provisioning.yaml /etc/grafana/provisioning/dashboards/dingo.yaml
77
- sudo mkdir -p /var/lib/grafana/dashboards/dingo
78
- sudo cp docs/dashboards/*.json /var/lib/grafana/dashboards/dingo/
79
- sudo chown -R grafana:grafana /var/lib/grafana/dashboards/dingo/
80
- sudo systemctl restart grafana-server
81
- ```
82
-
83
- After restarting, go to **Dashboards → Browse** in the Grafana UI and search for "Dingo". All five dashboards appear in a **Dingo** folder automatically.
84
-
85
- **Note:** `allowUiUpdates: true` lets you edit dashboards in the Grafana UI, but changes will be overwritten on the next provision cycle (every 30 seconds). To make permanent edits, modify the JSON files directly.
86
-
87
- **Option B: Manual import**
88
-
89
- 1. Open Grafana in your browser
90
- 2. Go to **Dashboards → New → Import**
91
- 3. Upload each JSON file
92
- 4. Select your Prometheus datasource when prompted
93
-
94
- ### 4. Alert rules (optional)
95
-
96
- The alert rules file is ready to use as-is — no editing required.
97
-
98
- Copy the file to your Prometheus rules directory:
99
-
100
- ```bash
101
- sudo cp docs/dashboards/alerts.yaml /etc/prometheus/rules/dingo.yaml
102
- ```
103
-
104
- Then add it to `prometheus.yml`:
105
-
106
- ```yaml
107
- rule_files:
108
- - /etc/prometheus/rules/dingo.yaml
109
- ```
110
-
111
- Reload Prometheus:
112
-
113
- ```bash
114
- sudo systemctl reload prometheus
115
- ```
116
-
117
- ## Datasource
118
-
119
- All dashboards expect a Prometheus datasource with UID `prometheus`. If your datasource has a different UID, update it before importing or recreate the datasource with UID `prometheus`.
120
-
121
- ## Template variables
122
-
123
- All dashboards include two template variables that auto-discover dingo instances:
124
-
125
- | Variable | Query | Purpose |
126
- |----------|-------|---------|
127
- | `$network` | `label_values(dingo_build_info, network)` | Selects the Cardano network (`preview`, `preprod`, `mainnet`). |
128
- | `$instance` | `label_values(dingo_build_info{network="$network"}, instance)` | Selects specific dingo instance(s). Multi-select with "All" default. |
129
-
130
- `dingo_build_info` is a metric only dingo exposes (includes `network`, `version`, `commit` labels). This ensures dropdowns show only dingo targets, never Haskell cardano-node.
131
-
132
- All panel queries use `{network="$network", instance=~"$instance"}` as their selector.
133
-
134
- The **Resource Usage** dashboard adds a third variable:
135
-
136
- | Variable | Query | Purpose |
137
- |----------|-------|---------|
138
- | `$node_instance` | `label_values(node_uname_info, instance)` | Selects the node_exporter target for host-level metrics (CPU, memory, disk, network). node_exporter runs on a different port (default `9100`) from the dingo metrics port, so it needs its own instance dropdown. |
139
-
140
- Set `$node_instance` to the hostname/port reported by your node_exporter scrape target (typically `localhost:9100` or the host IP).
141
-
142
- ## Navigation
143
-
144
- Dashboard-level links at the top of each dashboard connect all 5 dashboards. Links preserve the selected time range and template variables.
145
-
146
- ## Dormant metrics
147
-
148
- Some metrics only emit when their feature is active. Panels display "No data" until activated:
149
-
150
- | Metric | Activates when |
151
- |--------|---------------|
152
- | `cardano_node_metrics_Forge_node_is_leader_int` | Forging is enabled |
153
- | `cardano_node_metrics_Forge_adopted_int` | Block is forged and adopted |
154
- | `dingo_metrics_blockForgingLatency_seconds_bucket` | Block is forged |
155
- | `cardano_node_metrics_remainingKESPeriods_int` | KES key is configured |
156
- | `dingo_forge_tip_gap_slots` | Forging is enabled |
157
- | `dingo_database_size_bytes` | Database stores are initialized |
158
- | `database_blob_*` | Badger blob store is active |
159
-
160
- ## File listing
161
-
162
- ```text
163
- docs/dashboards/
164
- node-overview.json Node Overview dashboard
165
- block-production.json Block Production dashboard
166
- peer-health.json Peer Health dashboard
167
- mempool.json Mempool dashboard
168
- resources.json Resource Usage dashboard
169
- full-panel.json Business Text header panel (standalone)
170
- provisioning.yaml Grafana provisioning config
171
- prometheus.yaml Prometheus scrape config snippet
172
- alerts.yaml Prometheus alert rules
173
- README.md This file
174
- ```
175
-
176
- ## Troubleshooting
177
-
178
- **Business Text plugin not found / panels show "Panel plugin not found: marcusolsson-dynamictext-panel"**
179
- Install the plugin (step 1 above) and restart Grafana. If running in a managed environment, add `marcusolsson-dynamictext-panel` to your `GF_INSTALL_PLUGINS` list.
180
-
181
- **Panels show "No data"**
182
- Check that Prometheus is scraping your Dingo node: open Prometheus in the browser, go to **Status → Targets**, and confirm the `dingo` job is up. Also verify the `$network` and `$instance` template variables at the top of the dashboard are set to the correct values.
183
-
184
- **Datasource UID mismatch ("datasource not found")**
185
- All JSON files use the datasource UID `prometheus`. If your Prometheus datasource has a different UID, either rename it to `prometheus` in **Connections → Data sources**, or do a find-and-replace of `"prometheus"` with your actual UID in the JSON files before importing.
186
-
187
- **Dashboards not appearing after provisioning**
188
- Confirm `/etc/grafana/provisioning/dashboards/dingo.yaml` references the correct path. Grafana auto-reloads provisioned dashboards every 30 seconds; if it hasn't appeared after a minute, check the Grafana log (`journalctl -u grafana-server`) for errors.
@@ -1,29 +0,0 @@
1
- groups:
2
- - name: dingo
3
- rules:
4
- - alert: DingoBlockStall
5
- expr: changes(cardano_node_metrics_blockNum_int{network=~".+"}[5m]) == 0
6
- for: 0m
7
- labels:
8
- severity: warning
9
- annotations:
10
- summary: "Dingo block height stalled on {{ $labels.network }}"
11
- description: "Node {{ $labels.instance }} on {{ $labels.network }}: block height has not changed in 5 minutes."
12
-
13
- - alert: DingoSlotDrift
14
- expr: changes(cardano_node_metrics_slotNum_int{network=~".+"}[2m]) == 0
15
- for: 0m
16
- labels:
17
- severity: warning
18
- annotations:
19
- summary: "Dingo slot counter stalled on {{ $labels.network }}"
20
- description: "Node {{ $labels.instance }} on {{ $labels.network }}: slot counter has not advanced in 2 minutes."
21
-
22
- - alert: DingoPeerLoss
23
- expr: cardano_node_metrics_connectionManager_outgoingConns{network=~".+"} == 0
24
- for: 5m
25
- labels:
26
- severity: critical
27
- annotations:
28
- summary: "Dingo has no outgoing peers on {{ $labels.network }}"
29
- description: "Node {{ $labels.instance }} on {{ $labels.network }}: zero outgoing connections for 5+ minutes. Node cannot sync."
@@ -1,16 +0,0 @@
1
- ## Prometheus scrape configuration for Dingo dashboards
2
- ##
3
- ## Add these jobs to your prometheus.yml under scrape_configs:
4
-
5
- scrape_configs:
6
- # Dingo node metrics (default port 12798)
7
- - job_name: dingo
8
- scrape_interval: 15s
9
- static_configs:
10
- - targets: ['localhost:12798']
11
-
12
- # Node exporter for host-level metrics (required by Resource Usage dashboard)
13
- - job_name: node
14
- scrape_interval: 15s
15
- static_configs:
16
- - targets: ['localhost:9100']
@@ -1,14 +0,0 @@
1
- apiVersion: 1
2
-
3
- providers:
4
- - name: dingo
5
- orgId: 1
6
- folder: Dingo
7
- folderUid: dingo-dashboards
8
- type: file
9
- disableDeletion: false
10
- updateIntervalSeconds: 30
11
- allowUiUpdates: true
12
- options:
13
- path: /var/lib/grafana/dashboards/dingo
14
- foldersFromFilesStructure: false