
iRODS Metrics in irods_demo
Terrell Russell, Ph.D.
Executive Director
iRODS Consortium
June 29 - July 2, 2026
iRODS User Group Meeting 2026
Barcelona, Spain

iRODS → Timeseries
Best practice:
- Regularly query the database for 'metrics'
- Write them down
- Later, query the metrics, and draw some graphs
sql_exporter → prometheus → grafana
- https://github.com/burningalchemist/sql_exporter
- https://github.com/prometheus/prometheus
- https://github.com/grafana/grafana
Part of https://github.com/irods/irods_demo
December 2025
Demo: https://www.youtube.com/watch?v=IWKrd5b-57Q
Capturing Transfers In and Out

ICAT=> \d r_transfer_totals
Table "public.r_transfer_totals"
Column | Type | Collation | Nullable | Default
-----------+------------------------+-----------+----------+---------
user_id | bigint | | not null |
action | character varying(250) | | not null |
exbibytes | bigint | | not null |
bytes | bigint | | not null |
Indexes:
"unique_user_action" UNIQUE CONSTRAINT, btree (user_id, action)
ICAT=> select * from r_transfer_totals;
user_id | action | exbibytes | bytes
---------+--------+-----------+------------
10002 | out | 0 | 4294967296
10002 | in | 0 | 2147483888
(2 rows)
INSERT INTO R_TRANSFER_TOTALS (user_id, action, exbibytes, bytes)
VALUES (${USER_ID}, '${ACTION}', 0, ${BYTES})
ON CONFLICT (user_id, action) DO UPDATE SET
bytes = R_TRANSFER_TOTALS.bytes + EXCLUDED.bytes;
iRODS Dashboarding


Next Steps
- Seek community feedback
- New metrics
- Optimized queries
- Different databases
- Better dashboards
- Define best practices
- Scraping intervals
- Thresholds and alerts
- Absorb transfer tracking into the server

UGM 2026 - iRODS Metrics in irods_demo
By iRODS Consortium
UGM 2026 - iRODS Metrics in irods_demo
- 9