@blinklabs/dingo 0.37.0 → 0.39.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.
- package/.dockerignore +3 -0
- package/RELEASE_NOTES.md +110 -0
- package/dingo.yaml.example +6 -4
- package/docs/dashboards/README.md +188 -0
- package/docs/dashboards/alerts.yaml +29 -0
- package/docs/dashboards/prometheus.yaml +16 -0
- package/docs/dashboards/provisioning.yaml +14 -0
- package/package.json +1 -1
package/.dockerignore
CHANGED
package/RELEASE_NOTES.md
CHANGED
|
@@ -1,6 +1,116 @@
|
|
|
1
1
|
# Release Notes
|
|
2
2
|
|
|
3
3
|
|
|
4
|
+
## v0.38.0 (April 29, 2026)
|
|
5
|
+
|
|
6
|
+
**Title:** Smarter sync decisions, clearer operations, and ready made dashboards
|
|
7
|
+
|
|
8
|
+
**Date:** April 29, 2026
|
|
9
|
+
|
|
10
|
+
**Version:** v0.38.0
|
|
11
|
+
|
|
12
|
+
Hi folks! Here’s what we shipped in v0.38.0.
|
|
13
|
+
|
|
14
|
+
### ✨ What's New
|
|
15
|
+
|
|
16
|
+
* Added **inbound peer controls and visibility:** Operators can now track how inbound peers are accepted, denied, warmed, promoted, cooled down, and pruned, which makes public relays easier to tune and unsolicited traffic easier to manage.
|
|
17
|
+
* Expanded **dashboard based monitoring setup:** Operators can now deploy a full Grafana dashboard bundle with Prometheus scrape settings, alert rules, provisioning files, and setup guidance, which makes node monitoring faster to stand up.
|
|
18
|
+
* Introduced **parallel backup block delivery near tip:** Nodes can now request the same near tip block range from a second suitable peer and prefer the faster response, which keeps sync steadier when multiple peers report the same tip.
|
|
19
|
+
* Delivered **structured era mismatch errors:** Integrations can now detect era mismatch failures through consistent error details instead of relying on plain text parsing.
|
|
20
|
+
* Surfaced **earlier era transition stability signals:** Operators and integrators can now see when an upcoming era transition has effectively stabilized before the epoch boundary arrives, which makes planning safer around governance driven changes.
|
|
21
|
+
|
|
22
|
+
### 💪 Improvements
|
|
23
|
+
|
|
24
|
+
* Improved **one step era advancement safety:** Era changes now advance one boundary at a time, which avoids skipping required transition handling when the chain crosses into a new era.
|
|
25
|
+
* Refined **future protocol setting audit guidance:** Maintainers now have a clearer note about a future audit at era boundaries, which makes upcoming governance work easier to track.
|
|
26
|
+
* Enhanced **Windows and macOS build reliability:** Automation now avoids platform specific native linker issues on Windows and macOS, which keeps routine build verification steadier.
|
|
27
|
+
* Modernized **Windows test stability on slower runners:** Automation now gives slower Windows runners more room to finish successfully, which reduces avoidable test failures.
|
|
28
|
+
* Updated **OpenTelemetry stdout tracing support:** Tracing support now stays current with the newer `go.opentelemetry.io/otel/exporters/stdout/stdouttrace` release.
|
|
29
|
+
* Refreshed **Connect API compatibility:** Connect based integrations now stay current with the newer `connectrpc.com/connect` release.
|
|
30
|
+
* Advanced **AWS S3 integration currency:** S3 backed workflows now stay aligned with the newer `github.com/aws/aws-sdk-go-v2/service/s3` release.
|
|
31
|
+
* Polished **AWS client compatibility:** AWS backed components now stay aligned with the newer `github.com/aws/smithy-go` release.
|
|
32
|
+
* Completed **v0.37.0 release history refresh:** Release history now includes the refreshed v0.37.0 notes entry for easier scanning.
|
|
33
|
+
|
|
34
|
+
### 🔧 Fixes
|
|
35
|
+
|
|
36
|
+
* Fixed **active block download continuity during peer switches:** Near tip sync can now keep a block download moving even when the best peer changes, which reduces the chance of repeated restarts during equal tip switching.
|
|
37
|
+
* Corrected **stale nonce cleanup after rollbacks:** Rollback recovery now removes outdated nonce data after fork changes and while loading tip state, which keeps nonce dependent behavior aligned with the active chain.
|
|
38
|
+
* Hardened **async block delivery failure reporting:** Connection error handling now surfaces asynchronous block delivery failures, which makes stuck or failed block delivery easier to detect.
|
|
39
|
+
* Stabilized **connection setup diagnostics:** Connection failure logs now include the remote peer address, which makes troubleshooting failed handshakes easier.
|
|
40
|
+
|
|
41
|
+
### 📋 What You Need to Know
|
|
42
|
+
|
|
43
|
+
* Adopt the new Grafana and Prometheus dashboard bundle and alert rules to monitor Dingo nodes more quickly.
|
|
44
|
+
* Expect steadier near-tip sync and smoother equal-tip peer switching because shadow blockfetch, latency aware peer choice, preserved in-flight batches, and clearer blockfetch failure reporting now work together.
|
|
45
|
+
* Note more explicit era and hard-fork handling because Dingo now surfaces upcoming transition stability earlier, advances only one era at a time, and returns typed era mismatch errors.
|
|
46
|
+
* Review the dependency refreshes and the updated v0.37.0 release history entry when maintaining integrations and internal release records.
|
|
47
|
+
|
|
48
|
+
### Recommended Network Compatibility ⚠️
|
|
49
|
+
|
|
50
|
+
| Network | Compatible |
|
|
51
|
+
|---------------------|------------|
|
|
52
|
+
| mainnet | ⛔ |
|
|
53
|
+
| preprod-testnet | ⛔ |
|
|
54
|
+
| preview-testnet | ✅ |
|
|
55
|
+
|
|
56
|
+
### 🙏 Thank You
|
|
57
|
+
|
|
58
|
+
Thank you for trying!
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## v0.37.0 (April 27, 2026)
|
|
63
|
+
|
|
64
|
+
**Title:** Genesis bootstrap, governance, and steadier Mithril recovery
|
|
65
|
+
|
|
66
|
+
**Date:** April 27, 2026
|
|
67
|
+
|
|
68
|
+
**Version:** v0.37.0
|
|
69
|
+
|
|
70
|
+
Hi folks! Here’s what we shipped in v0.37.0.
|
|
71
|
+
|
|
72
|
+
### ✨ What's New
|
|
73
|
+
|
|
74
|
+
* Added **Ouroboros Genesis bootstrap support:** Operators can now start from Genesis bootstrap flows, which gives early sync a clearer path before the node reaches the current chain tip.
|
|
75
|
+
* Expanded **Genesis mode chain selection:** Nodes can now choose the chain more safely during Genesis mode, which keeps early sync aligned with the right history.
|
|
76
|
+
* Introduced **bootstrap aware peer promotion:** Peer promotion now accounts for bootstrap state, which helps early sync keep useful peers active while the node is still catching up.
|
|
77
|
+
* Delivered **Conway governance ratification support:** Governance aware services can now track ratified actions more completely as Conway governance advances.
|
|
78
|
+
* Enabled **Conway governance enactment handling:** Governance state now follows enacted actions more accurately, which gives operators and integrators a clearer view of active governance outcomes.
|
|
79
|
+
* Preserved **committee quorum persistence:** Committee quorum information now persists across restarts, which keeps governance state steadier after interruptions.
|
|
80
|
+
* Opened **broader governance state handling:** Governance aware integrations can now read and handle more of the Conway governance state without losing important context.
|
|
81
|
+
* Unlocked **new Blockfrost compatible block endpoints:** Blockfrost compatible users can now retrieve additional block details through new block endpoints.
|
|
82
|
+
* Extended **new Blockfrost compatible network endpoints:** Network status integrations can now access new network endpoints in a Blockfrost compatible shape.
|
|
83
|
+
* Introduced **new Blockfrost compatible era endpoints:** Era aware clients can now request era information through new Blockfrost compatible endpoints.
|
|
84
|
+
* Added **new Blockfrost compatible genesis endpoints:** Genesis data is now available through new Blockfrost compatible endpoints for services that need network bootstrap details.
|
|
85
|
+
|
|
86
|
+
### 💪 Improvements
|
|
87
|
+
|
|
88
|
+
* Improved **newer Mithril snapshot compatibility:** Bootstrap runs now accept newer snapshot shapes more reliably, which makes setup and recovery smoother across current Mithril data.
|
|
89
|
+
* Refined **interrupted Mithril resume safety:** Resuming after an interrupted Mithril run now behaves more safely, which reduces the chance of a broken recovery path.
|
|
90
|
+
* Enhanced **bootstrap aware peer governance:** Peer promotion and selection now align more closely with bootstrap state, which helps early sync keep useful peers active.
|
|
91
|
+
* Modernized **bootstrap and governance observability:** Operators can now see more metrics and event signals around bootstrap and governance behavior.
|
|
92
|
+
* Updated **operator and integrator guidance:** Documentation and workflow refreshes make recent bootstrap, governance, and API behavior easier to follow.
|
|
93
|
+
|
|
94
|
+
### 🔧 Fixes
|
|
95
|
+
|
|
96
|
+
* Fixed **Mithril bootstrap resume reliability:** Mithril bootstrap and resume handling now recover more reliably when a previous run stopped before completion.
|
|
97
|
+
* Corrected **snapshot bootstrap handling:** Snapshot based bootstrap flows now handle current snapshot layouts correctly, which reduces failed setup paths.
|
|
98
|
+
* Hardened **early sync recovery behavior:** Recovery during early sync now follows Genesis mode chain selection and bootstrap aware promotion more safely after interruptions.
|
|
99
|
+
* Stabilized **governance state continuity:** Governance state now keeps ratification, enactment, and committee quorum handling steadier across restarts and replay.
|
|
100
|
+
|
|
101
|
+
### 📋 What You Need to Know
|
|
102
|
+
|
|
103
|
+
* Clarified **Genesis bootstrap rollout:** Ouroboros Genesis bootstrap changes early sync behavior, including Genesis mode chain selection and bootstrap aware peer promotion.
|
|
104
|
+
* Highlighted **governance support growth:** Conway governance coverage now reaches ratification, enactment, committee quorum persistence, and broader governance state handling.
|
|
105
|
+
* Emphasized **steadier Mithril recovery:** Mithril bootstrap and resume handling now work more reliably with newer snapshot shapes and safer interrupted resume behavior.
|
|
106
|
+
* Summarized **expanded Blockfrost compatibility:** Blockfrost compatible users can now use new block, network, era, and genesis endpoints.
|
|
107
|
+
|
|
108
|
+
### 🙏 Thank You
|
|
109
|
+
|
|
110
|
+
Thank you for trying!
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
4
114
|
## v0.36.1 (April 21, 2026)
|
|
5
115
|
|
|
6
116
|
**Title:** Steadier catch-up sync and refreshed integrations
|
package/dingo.yaml.example
CHANGED
|
@@ -136,6 +136,12 @@ topology: ""
|
|
|
136
136
|
# CLI: --metrics-port
|
|
137
137
|
metricsPort: 12798
|
|
138
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
|
+
|
|
139
145
|
# Internal/private address to bind for listening for Ouroboros NtC
|
|
140
146
|
privateBindAddr: "127.0.0.1"
|
|
141
147
|
|
|
@@ -180,10 +186,6 @@ meshPort: 8080
|
|
|
180
186
|
# CLI: --bark-url
|
|
181
187
|
barkBaseUrl: ""
|
|
182
188
|
|
|
183
|
-
# number of slots from tip within which blocks
|
|
184
|
-
# will not be found in the bark archive
|
|
185
|
-
barkSecurityWindow: 10000
|
|
186
|
-
|
|
187
189
|
# TCP port bind for listening for bark RPC calls
|
|
188
190
|
# CLI: --bark-port
|
|
189
191
|
barkPort: 0
|
|
@@ -0,0 +1,188 @@
|
|
|
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
|
+
| `cardano_node_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.
|
|
@@ -0,0 +1,29 @@
|
|
|
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."
|
|
@@ -0,0 +1,16 @@
|
|
|
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']
|
|
@@ -0,0 +1,14 @@
|
|
|
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
|