Skip to content

Commit 2f65ced

Browse files
committed
feat(relay): Add performance prometheus metrics
1 parent b266124 commit 2f65ced

File tree

4 files changed

+69
-1
lines changed

4 files changed

+69
-1
lines changed

beacon-light-client/solidity/tasks/start-publishing.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
accountBalanceGauge,
1616
initPrometheusSetup,
1717
registerGaugesForStartPublishing,
18+
startResourceMetricsUpdate,
1819
} from '@dendreth/utils/ts-utils/prometheus-utils';
1920

2021
const logger = getGenericLogger();
@@ -78,6 +79,7 @@ task('start-publishing', 'Run relayer')
7879

7980
initPrometheusSetup(args.prometheusPort, networkName);
8081
registerGaugesForStartPublishing();
82+
startResourceMetricsUpdate(networkName);
8183
}
8284

8385
const currentConfig = await getNetworkConfig(args.followNetwork);

libs/typescript/ts-utils/prometheus-utils.ts

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -157,3 +157,63 @@ export const numberOfProofPublished = new client.Counter({
157157
help: 'The number of proofs published(since last restart)',
158158
labelNames: ['network'],
159159
});
160+
161+
const gaugeCpuUser = new client.Gauge({
162+
name: 'process_cpu_user_seconds_total',
163+
help: 'Total user CPU time spent by the process in seconds.',
164+
labelNames: ['label'], // Adding label
165+
});
166+
167+
const gaugeCpuSystem = new client.Gauge({
168+
name: 'process_cpu_system_seconds_total',
169+
help: 'Total system CPU time spent by the process in seconds.',
170+
labelNames: ['label'], // Adding label
171+
});
172+
173+
const gaugeMemoryUsage = new client.Gauge({
174+
name: 'process_memory_bytes',
175+
help: 'Memory usage of the process in bytes.',
176+
labelNames: ['label'], // Adding label
177+
});
178+
179+
const gaugeHeapTotal = new client.Gauge({
180+
name: 'process_heap_total_bytes',
181+
help: 'Total heap memory allocated by the process in bytes.',
182+
labelNames: ['label'], // Adding label
183+
});
184+
185+
const gaugeHeapUsed = new client.Gauge({
186+
name: 'process_heap_used_bytes',
187+
help: 'Heap memory used by the process in bytes.',
188+
labelNames: ['label'], // Adding label
189+
});
190+
191+
const gaugeRss = new client.Gauge({
192+
name: 'process_rss_bytes',
193+
help: 'Resident set size (RSS) memory used by the process in bytes.',
194+
labelNames: ['label'], // Adding label
195+
});
196+
197+
export function startResourceMetricsUpdate(label: string) {
198+
register.registerMetric(gaugeCpuUser);
199+
register.registerMetric(gaugeCpuSystem);
200+
register.registerMetric(gaugeMemoryUsage);
201+
register.registerMetric(gaugeHeapTotal);
202+
register.registerMetric(gaugeRss);
203+
204+
// Set an interval to regularly update the resource metrics
205+
setInterval(() => {
206+
const memoryUsage = process.memoryUsage();
207+
const cpuUsage = process.cpuUsage();
208+
209+
// Update CPU metrics
210+
gaugeCpuUser.labels(label).set(cpuUsage.user / 1e6); // Convert from microseconds to seconds
211+
gaugeCpuSystem.labels(label).set(cpuUsage.system / 1e6); // Convert from microseconds to seconds
212+
213+
// Update memory metrics
214+
gaugeMemoryUsage.labels(label).set(memoryUsage.rss); // Resident set size (RSS)
215+
gaugeHeapTotal.labels(label).set(memoryUsage.heapTotal); // Total heap allocated
216+
gaugeHeapUsed.labels(label).set(memoryUsage.heapUsed); // Heap memory in use
217+
gaugeRss.labels(label).set(memoryUsage.rss); // RSS memory in bytes
218+
}, 5000); // Update metrics every 5 seconds
219+
}

relay/workers/poll-updates/poll-updates-worker.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,14 @@ import doUpdate from '@/workers/poll-updates/do_update';
99
import { getBeaconApi } from '@/implementations/beacon-api';
1010
import { checkConfig } from '@dendreth/utils/ts-utils/common-utils';
1111
import { getGenericLogger } from '@dendreth/utils/ts-utils/logger';
12-
import { initPrometheusSetup } from '@dendreth/utils/ts-utils/prometheus-utils';
12+
import {
13+
initPrometheusSetup,
14+
startResourceMetricsUpdate,
15+
} from '@dendreth/utils/ts-utils/prometheus-utils';
1316

1417
const logger = getGenericLogger();
1518
initPrometheusSetup();
19+
startResourceMetricsUpdate('poll-update-worker');
1620

1721
(async () => {
1822
const updatePollingConfig = {

relay/workers/prover/prover-worker.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import yargs from 'yargs';
1010
import {
1111
initPrometheusSetup,
1212
registerGaugesForProver,
13+
startResourceMetricsUpdate,
1314
} from '@dendreth/utils/ts-utils/prometheus-utils';
1415

1516
(async () => {
@@ -19,6 +20,7 @@ import {
1920
};
2021
initPrometheusSetup(3000);
2122
registerGaugesForProver();
23+
startResourceMetricsUpdate('proofGenerationWorker');
2224

2325
checkConfig(proverConfig);
2426

0 commit comments

Comments
 (0)