Skip to content

Commit ab182d6

Browse files
feat: add database metrics (#1079)
Co-authored-by: Tomás Grüner <[email protected]>
1 parent a7de861 commit ab182d6

File tree

3 files changed

+119
-2
lines changed

3 files changed

+119
-2
lines changed

lib/lambda_ethereum_consensus/store/db.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,13 @@ defmodule LambdaEthereumConsensus.Store.Db do
3030
Exleveldb.get(ref, key)
3131
end
3232

33+
@spec size() :: non_neg_integer()
34+
def size() do
35+
ref = GenServer.call(@registered_name, :get_ref)
36+
{:ok, size} = :eleveldb.status(ref, "leveldb.total-bytes")
37+
String.to_integer(size)
38+
end
39+
3340
@spec iterate() :: {:ok, :eleveldb.itr_ref()} | {:error, any()}
3441
def iterate() do
3542
ref = GenServer.call(@registered_name, :get_ref)

lib/lambda_ethereum_consensus/telemetry.ex

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ defmodule LambdaEthereumConsensus.Telemetry do
22
@moduledoc """
33
Telemetry module for the consensus node.
44
"""
5+
alias LambdaEthereumConsensus.Store.Db
56
use Supervisor
67
require Logger
78
import Telemetry.Metrics
@@ -118,7 +119,10 @@ defmodule LambdaEthereumConsensus.Telemetry do
118119
last_value("vm.system_counts.atom_count"),
119120
last_value("vm.system_counts.port_count"),
120121
last_value("vm.message_queue.length", tags: [:process]),
121-
last_value("vm.uptime.total", unit: :millisecond)
122+
last_value("vm.uptime.total", unit: :millisecond),
123+
124+
# Db Metrics
125+
last_value("db.size.total", unit: :byte)
122126
]
123127
end
124128

@@ -127,10 +131,16 @@ defmodule LambdaEthereumConsensus.Telemetry do
127131
# A module, function and arguments to be invoked periodically.
128132
# This function must call :telemetry.execute/3 and a metric must be added above.
129133
{__MODULE__, :message_queue_lengths, []},
130-
{__MODULE__, :uptime, []}
134+
{__MODULE__, :uptime, []},
135+
{__MODULE__, :db_size, []}
131136
]
132137
end
133138

139+
def db_size() do
140+
db_size = Db.size()
141+
:telemetry.execute([:db, :size], %{total: db_size})
142+
end
143+
134144
def uptime() do
135145
{uptime, _} = :erlang.statistics(:wall_clock)
136146
:telemetry.execute([:vm, :uptime], %{total: uptime})

metrics/grafana/provisioning/dashboards/home.json

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,106 @@
2828
"links": [],
2929
"liveNow": false,
3030
"panels": [
31+
{
32+
"datasource": {
33+
"type": "prometheus",
34+
"uid": "PBFA97CFB590B2093"
35+
},
36+
"fieldConfig": {
37+
"defaults": {
38+
"color": {
39+
"mode": "palette-classic"
40+
},
41+
"custom": {
42+
"axisBorderShow": false,
43+
"axisCenteredZero": false,
44+
"axisColorMode": "text",
45+
"axisLabel": "Bytes",
46+
"axisPlacement": "auto",
47+
"barAlignment": 0,
48+
"drawStyle": "line",
49+
"fillOpacity": 0,
50+
"gradientMode": "none",
51+
"hideFrom": {
52+
"legend": false,
53+
"tooltip": false,
54+
"viz": false
55+
},
56+
"insertNulls": false,
57+
"lineInterpolation": "linear",
58+
"lineWidth": 1,
59+
"pointSize": 6,
60+
"scaleDistribution": {
61+
"type": "linear"
62+
},
63+
"showPoints": "auto",
64+
"spanNulls": false,
65+
"stacking": {
66+
"group": "A",
67+
"mode": "none"
68+
},
69+
"thresholdsStyle": {
70+
"mode": "off"
71+
}
72+
},
73+
"mappings": [],
74+
"thresholds": {
75+
"mode": "absolute",
76+
"steps": [
77+
{
78+
"color": "green",
79+
"value": null
80+
},
81+
{
82+
"color": "red",
83+
"value": 80
84+
}
85+
]
86+
},
87+
"unit": "decbytes"
88+
},
89+
"overrides": []
90+
},
91+
"gridPos": {
92+
"h": 8,
93+
"w": 12,
94+
"x": 0,
95+
"y": 0
96+
},
97+
"id": 1,
98+
"options": {
99+
"legend": {
100+
"calcs": [],
101+
"displayMode": "list",
102+
"placement": "bottom",
103+
"showLegend": false
104+
},
105+
"tooltip": {
106+
"mode": "single",
107+
"sort": "none"
108+
}
109+
},
110+
"targets": [
111+
{
112+
"datasource": {
113+
"type": "prometheus",
114+
"uid": "PBFA97CFB590B2093"
115+
},
116+
"disableTextWrap": false,
117+
"editorMode": "builder",
118+
"expr": "db_size_total",
119+
"fullMetaSearch": false,
120+
"includeNullMetadata": true,
121+
"instant": true,
122+
"legendFormat": "__auto",
123+
"range": true,
124+
"refId": "A",
125+
"useBackend": false
126+
}
127+
],
128+
"title": "Database size",
129+
"type": "timeseries"
130+
},
31131
{
32132
"datasource": {
33133
"type": "prometheus",

0 commit comments

Comments
 (0)