XRPL Validator Linux Package Monitoring Guide
Revision: September 2026
Need monitoring credentials? If you do not have a Basic Auth username and password, request monitoring access before you start this guide.
Introduction
This guide explains how to connect an xrpld validator host to the XRPL monitoring platform with Grafana Alloy. You can use the guided installer or make the same changes yourself with the manual steps.
Still running rippled (pre-3.2.0)? rippled was renamed to xrpld in version 3.2.0. The installer detects legacy rippled nodes automatically: it also checks
/etc/opt/ripple/rippled.cfg,/opt/ripple/etc/rippled.cfg, and/etc/rippled/rippled.cfg, therippledsystemd unit, and runningrippledprocesses. Where this guide saysxrpld.cfgor/var/log/xrpld/, use your existing rippled paths instead.
Opting in gives the validator operator access to validator health in Grafana. Metrics and logs make it easier to catch problems early, confirm that telemetry is flowing, and troubleshoot incidents without manually collecting log files after the fact.
The setup is designed to stay under the operator’s control. Alloy reads local telemetry and pushes it with credentials provided by the XRPL Foundation. The guided installer shows one focused preview before it offers to change xrpld.cfg. It asks separately before restarting xrpld, starting Alloy, or enabling Alloy. The manual path shows every command and file so you decide when to make each change.
The mental model is simple:
xrpld -> Grafana Alloy -> XRPL monitoring proxy -> Grafana
Grafana Alloy runs on the validator host. It reads local xrpld telemetry and pushes it to the monitoring platform:
- StatsD metrics are collected.
- Basic host CPU, memory, load, filesystem, disk, and network metrics can be enabled separately.
debug.logandperf.logare collected.- Grafana shows the validator dashboards.
The trusted validator identity is the Basic Auth username provided by the XRPL Foundation. The local node label is only a dashboard filter. Operators can optionally add the validator’s public master key to correlate the collector with public XRPL network statistics.
The guided installer is intentionally careful:
- It shows complete affected
xrpld.cfgtelemetry sections with focused-and+changes. - It lets you apply the plan or open your editor in the same terminal.
- It creates one protected original backup when a repair requires config changes and confirms its path before the action choice.
- It asks separately before restarting
xrpld. - It verifies the monitoring credentials before writing the final Alloy config.
- It asks before starting or enabling Alloy.
Before You Start
What You Need
The XRPL Foundation provides:
- Monitoring push host:
push.monitoring.xrplf.org. - Grafana URL:
https://monitoring.xrplf.org. - Basic Auth username and password.
- Grafana account access.
The validator host needs:
systemd.sudo, unless you work as root.- A readable
xrpld.cfg. - Optionally, the validator’s public 52-character
nHmaster key for correlation with public XRPL network statistics. This is not an account address, signing key, private key, or seed. - StatsD metrics,
debug.log, andperf.logavailable fromxrpld. - Outbound HTTPS access to
push.monitoring.xrplf.organd Grafana’s package repository.
The current official XRPL package guides list these 64-bit x86 hosts:
- Ubuntu 22.04 or 24.04, which receive the highest support and testing.
- Debian 12 Bookworm, for which packages are available.
- RHEL 9.6, which is supported.
See the XRPL system requirements, Ubuntu and Debian install guide, and RHEL install guide for current platform guidance. The steps below cover APT on Ubuntu or Debian and DNF or YUM on RHEL-family hosts.
Check The Monitoring Credentials
Check the username and password before storing them in the Alloy config. Replace <username> with the Basic Auth username from the XRPL Foundation:
curl --fail-with-body \
--user '<username>' \
https://push.monitoring.xrplf.org/healthcurl asks for the password without displaying it. A successful check prints:
ok
An HTTP 401 means the username or password is wrong. An HTTP 403 means the credentials are valid but are not yet assigned to a monitoring tenant. Contact the XRPL Foundation if either error continues.
Choose A Setup Path
Both paths create the same Alloy setup and send the same telemetry.
- Guided install: download the hosted installer, review it if you want, and answer each prompt. The installer explains each change before making it.
- Manual install: run each command yourself, review the downloaded shared config, and create the small host-specific files by hand.
Use only one path. If you use the guided installer, continue with the next section. If you want to make every change yourself, skip to Manual Install.
Guided Install
Run The Installer
Use the hosted installer provided by the XRPL Foundation:
curl -fsSL https://push.monitoring.xrplf.org/alloy/install \
| bashTo download and verify the installer before running it:
push_host="https://push.monitoring.xrplf.org"
install_sha256="fc8628d85953aa60a4859cd165ced7c791a938ec8cd58acab984b56aecf72f55"
installer="install-xrpl-monitoring.sh"
curl -fsSL "$push_host/alloy/install" -o "$installer"
printf '%s %s\n' "$install_sha256" "$installer" | sha256sum -c -sha256sum -c - must print OK. You can open the file in a text editor before you run it. When you are ready, run the same downloaded file:
bash "$installer"What The Installer Does
The installer:
- Detects an existing Alloy package, service, and managed configuration.
- On a rerun, offers the actions allowed by the managed-version state: update an older installation, review the full setup, replace credentials on a current installation, or exit.
- Detects the OS and checks prerequisites.
- Asks for the push host, username, and password on a first install.
- Checks the credentials before installing Alloy or changing
xrpld.cfg. - Installs Grafana Alloy from the official Grafana package repository.
- Finds
xrpld.cfg. - Checks StatsD,
debug.log,perf.log, and required log directories. - Creates one original backup before the action choice when
xrpld.cfgneeds changes. - Shows one repair plan with complete affected sections when
xrpld.cfgneeds telemetry changes. - Lets you apply the plan or open the file in your editor without creating more backups.
- Before it automatically applies a StatsD relay change, stores a protected pending-state record that can be recovered after a paused run.
- Asks separately before restarting
xrpld, then checks its log files. - Checks Alloy’s read access to the logs.
- Asks for a node label and optional validator public master key.
- Asks whether to enable basic host metrics. The default answer is no.
- Writes and validates the Alloy config.
- Asks before starting or restarting Alloy and before enabling it at boot.
- Offers to redact plaintext push passwords from legacy config backups after Alloy starts.
On a first install, push.monitoring.xrplf.org is the default push host. Press Enter to use it, or enter another host. If curl is missing, the installer asks before installing that minimum prerequisite. No other package or node configuration change occurs before the credential check succeeds.
An older managed configuration can be updated without a full setup review. The installer loads the host and username from the managed config. It loads the password from /etc/alloy/xrpl-push, or from the managed config during a legacy migration. It keeps the password hidden, validates the credentials, and preserves existing redaction expressions. A version 5 config is updated with host metrics disabled. Use the full setup review to enable or disable them. It also migrates the unchanged StatsD mapping to its independent mapping version. If Alloy is running, the installer validates the update candidate and asks before it changes the managed files and restarts the service. After Alloy starts, the installer offers to replace a plaintext password in each legacy config backup with "<redacted>". The accepted action keeps the backup, writes the redaction atomically, and sets mode 0600.
An outdated installation must be updated before credential replacement is offered. A missing or unrecognized StatsD mapping requires the full setup review. The installer does not downgrade a newer config or mapping, and it leaves an unrecognized config unchanged.
The repair preview shows the complete relevant telemetry sections. Unchanged lines remain plain, additions start with +, and replaced values use - and +. Press Enter to apply the plan, enter e to edit the file in the same terminal, enter s for repair details, or enter q to stop. The installer resolves a selected xrpld.cfg symbolic link once and changes the regular target without changing the link. Automatic apply is not available when target sections or keys are ambiguous or when the target has hard links.
When a repair puts Alloy in front of an existing StatsD collector, the installer writes /var/lib/xrpl-monitoring-alloy/pending-relay before it changes xrpld.cfg. The root-owned mode 0600 file contains one line: the config path, Alloy listener, and existing relay address. It contains no credentials. On the next run, the installer uses the relay only when the config path and current StatsD address match the saved path and listener. It removes the file after the Alloy config is committed or when the original relay address is active again.
Changes The Installer May Request
StatsD must be enabled. If you are not already using StatsD, the installer asks you to add a block like this:
[insight]
server=statsd
address=127.0.0.1:9125
prefix=xrpld
If you already use StatsD, you do not need to change your existing prefix or lose your existing collector. The installer detects the current prefix and configures Alloy for it.
The only change the installer may ask for is the StatsD address, so xrpld sends packets to Alloy first. Alloy then acts as a middleman:
xrpld -> Alloy -> existing StatsD collector
|
+-> XRPL monitoring
The existing collector receives the original packets unchanged. The monitoring copy is handled separately by Alloy. If installation pauses after the address change, the protected pending-state record preserves the relay for the next run.
The debug log can use any path, as long as the file exists and Alloy can read it. Example:
[debug_logfile]
/var/log/xrpld/debug.log
The perf log must also be enabled:
[perf]
perf_log=/var/log/xrpld/perf.log
log_interval=2
The guided installer creates one protected original backup after the repair plan detects required xrpld.cfg changes and before it asks you to apply, edit, or stop. It keeps the backup next to the source file, confirms the path, and reuses that backup for all automatic or manual changes in the run. It does not create a config backup when the file needs no changes. The backup can contain validator secrets, so keep its original restrictive permissions. Approved automatic or manual changes are written before the restart question. Declining the restart leaves those changes in the file. If the restart fails, the installer offers to restore the original backup when it can safely replace the file. It checks the config again after restore approval and does not overwrite a concurrent change. Create your own backup when you use the manual installation path.
On xrpld package installs, the log directory is usually not readable by the Alloy service user. The installer detects this and asks before adding the alloy user to the log directory’s group so Alloy can read the logs. If a configured log directory is missing, the repair plan can create it with mode 0750 and the detected xrpld service owner. Its parent must be a real root-owned directory that is not writable by group or other users. Otherwise, create the log directory yourself and run the installer again. The installer changes the xrpld service state only when you approve the separate restart prompt.
Manual Install
The manual path follows the same order as the guided installer. Read each step before running its commands. Run them in Bash, in the same terminal, so values set in one step remain available in later steps. The examples use sudo. If you are already root, omit it from ordinary commands. Open files with your preferred editor instead of sudoedit, and follow the root-specific notes for service-user checks in steps 6 and 11.
1. Check The Host
Confirm the CPU architecture and operating system:
uname -m
cat /etc/os-releaseFor the supported production hosts listed above, uname -m prints x86_64. Also confirm that xrpld is running under systemd:
sudo systemctl status xrpldOn versions before 3.2.0, use rippled instead of xrpld in service commands.
2. Install Grafana Alloy
Grafana Alloy is installed from Grafana’s official package repository. These commands follow Grafana’s Linux installation guide. First check whether Alloy is already installed:
alloy --versionIf this prints a version, skip the package commands and continue with step 3. Otherwise, use the section for your operating system.
Ubuntu Or Debian With APT
Install curl if it is not already available:
sudo apt-get update
sudo apt-get install -y curlDownload the Grafana signing key, add the repository, and install Alloy:
grafana_key="$(mktemp)"
curl -fsSL https://apt.grafana.com/gpg-full.key -o "$grafana_key"
sudo install -d -m 0755 /etc/apt/keyrings
sudo install -m 0644 "$grafana_key" /etc/apt/keyrings/grafana.asc
rm -f "$grafana_key"
grafana_repo='deb [signed-by=/etc/apt/keyrings/grafana.asc]'
grafana_repo="$grafana_repo https://apt.grafana.com stable main"
printf '%s\n' "$grafana_repo" \
| sudo tee /etc/apt/sources.list.d/grafana.list
sudo apt-get update
sudo apt-get install -y alloyRHEL With DNF Or YUM
Install curl if it is not already available:
sudo dnf install -y curlUse yum in place of dnf if that is the package manager on your host. Download the Grafana signing key and add the repository:
grafana_key="$(mktemp)"
curl -fsSL https://rpm.grafana.com/gpg.key -o "$grafana_key"
sudo install -D -m 0644 "$grafana_key" \
/etc/pki/rpm-gpg/RPM-GPG-KEY-grafana
sudo rpm --import "$grafana_key"
rm -f "$grafana_key"
sudo tee /etc/yum.repos.d/grafana.repo >/dev/null <<'EOF'
[grafana]
name=grafana
baseurl=https://rpm.grafana.com
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-grafana
sslverify=1
EOF
sudo dnf -y makecache --refresh
sudo dnf install -y alloyCheck the installed version:
alloy --version3. Find And Back Up xrpld.cfg
The current package path is:
/etc/xrpld/xrpld.cfg
Older installations may use one of these paths:
/etc/opt/ripple/rippled.cfg
/opt/ripple/etc/rippled.cfg
/etc/rippled/rippled.cfg
If the file is elsewhere, systemctl cat xrpld or the command used to start xrpld may show a --conf path.
Back up xrpld.cfg before changing it.
Replace the path below if your config is elsewhere:
sudo cp -a /etc/xrpld/xrpld.cfg /etc/xrpld/xrpld.cfg.bak.$(date +%s)
sudoedit /etc/xrpld/xrpld.cfgDo not add a second copy of a section that already exists. Update the existing section instead.
4. Configure StatsD And Logs
Enable StatsD and both debug and perf logs in xrpld.cfg. Update existing sections instead of adding duplicates.
You can keep your existing filenames and directories. Use paths that xrpld can write to, then give Alloy read access in step 6. In step 10, set log_debug and log_perf to those same paths.
Keep your existing non-empty StatsD prefix. Use it again in the mapping in step 8. If you already use a StatsD collector, read If Another StatsD Collector Already Exists before changing the address.
Example settings:
[insight]
server=statsd
address=127.0.0.1:9125
prefix=xrpld
[debug_logfile]
/var/log/xrpld/debug.log
[perf]
perf_log=/var/log/xrpld/perf.log
log_interval=2
If Another StatsD Collector Already Exists
Do not stop using it. Put Alloy in front of it so both systems receive the metrics.
For example, if xrpld currently sends to 127.0.0.1:8125:
- Keep
127.0.0.1:8125as the relay address for the Alloy config. - Choose a free local UDP port for Alloy, such as
127.0.0.1:9125or127.0.0.1:9126. - Change only the
[insight]address inxrpld.cfgto the new Alloy address. - Keep the current StatsD prefix.
Check whether a UDP port is already in use:
sudo ss -lunp | grep ':9125 'No output means the port is normally free. The final flow is:
xrpld -> Alloy -> existing StatsD collector
|
+-> XRPL monitoring
5. Apply Changes And Check The Inputs
Restart xrpld only if you changed xrpld.cfg in the previous step. Config changes do not take effect until the service restarts. Use your normal restart process. For a package install:
sudo systemctl restart xrpldIf you did not change xrpld.cfg, do not restart the service.
In either case, check that xrpld is running and that both log files exist:
sudo systemctl status xrpld
sudo ls -l /var/log/xrpld/debug.log /var/log/xrpld/perf.logFor a legacy service, use rippled in the service commands. Use your configured log paths if they are different.
6. Give Alloy Read Access To The Logs
First check whether the Alloy service user can read both files:
sudo -u alloy test -r /var/log/xrpld/debug.log && echo 'debug.log is readable'
sudo -u alloy test -r /var/log/xrpld/perf.log && echo 'perf.log is readable'If you are working as root on a host without sudo, run the equivalent checks with runuser:
runuser -u alloy -- test -r /var/log/xrpld/debug.log && echo 'debug.log is readable'
runuser -u alloy -- test -r /var/log/xrpld/perf.log && echo 'perf.log is readable'If both messages appear, continue to the next step. If not, check the group that owns the log directory:
sudo stat -c '%U %G %a %n' /var/log/xrpldIf the group is not root, add the alloy user to it. The group is commonly named xrpld:
sudo usermod -aG xrpld alloyIf the stat command showed another non-root group, use that group name instead.
If the directory uses the root group, never add the alloy user to that group. Instead, give the Alloy group access only to the log directory and the two configured log files:
sudo chgrp alloy /var/log/xrpld
sudo chgrp alloy /var/log/xrpld/debug.log /var/log/xrpld/perf.log
sudo chmod g+rx /var/log/xrpld
sudo chmod g+r /var/log/xrpld/debug.log /var/log/xrpld/perf.logThese commands keep each file’s owner unchanged. If root owns a file, its ownership becomes root:alloy. Use your configured directory and file paths if they are different.
Run the two read checks again and do not continue until both messages appear. Do not make validator logs readable by every user. Check access again after log rotation in case the files are created with their old group.
8. Create The StatsD Mapping
Create the mapping file:
sudoedit /etc/alloy/statsd-mapping.ymlFor the standard prefix=xrpld, paste:
defaults:
match_type: regex
mappings:
- match: '^xrpld[.](.+)$'
name: 'xrpld_${1}'
- match: '.*'
action: drop
name: 'dropped'The first match must use the same prefix as [insight]. For example, prefix=rippled needs ^rippled[.](.+)$. A literal dot in a custom prefix must be written as [.], and a literal hyphen can be written as [-]. The last rule drops unrelated StatsD packets from the monitoring path.
Set the file permissions:
sudo chmod 0644 /etc/alloy/statsd-mapping.yml9. Create The Protected Password File
Find the Alloy service account and create the password file without a final newline:
alloy_user="$(systemctl show alloy.service -p User --value)"
alloy_group="$(systemctl show alloy.service -p Group --value)"
[ -n "$alloy_user" ] || alloy_user=root
[ -n "$alloy_group" ] || alloy_group="$(id -gn "$alloy_user")"
(
set -e
umask 077
password_tmp="$(mktemp)"
trap 'rm -f -- "$password_tmp"' EXIT
printf '%s' 'Monitoring push password: ' >&2
IFS= read -r -s xrpl_push_password
printf '\n' >&2
printf '%s' "$xrpl_push_password" >"$password_tmp"
unset xrpl_push_password
sudo install -d -o root -g "$alloy_group" -m 0750 /etc/alloy
sudo install -o root -g "$alloy_group" -m 0640 \
"$password_tmp" /etc/alloy/xrpl-push
)The file must contain only the password and must not have a final newline. Alloy reads it as a secret, so the password stays redacted in the local Alloy API, UI, and support bundle.
10. Create The Host Config
The package normally creates a default /etc/alloy/config.alloy. Review it before replacing it:
sudo less /etc/alloy/config.alloyPress q to close less.
If the file contains a setup you already use, do not replace it. Plan how to merge the XRPL settings with the person who manages that setup.
If the file is only the package default, back it up and open it for editing:
sudo cp -a /etc/alloy/config.alloy /etc/alloy/config.alloy.bak.$(date +%s)
sudoedit /etc/alloy/config.alloyPaste the following config and replace every value inside angle brackets. If you do not use a public validator master key, set validator_master_key = "". Never enter a validator token, seed, or private key.
Host metrics are disabled in this example. See Optional Host Metrics to enable them.
// XRPL validator monitoring config.
import.file "xrpl_monitoring" {
filename = "/etc/alloy/xrplf.alloy"
}
local.file "xrpl_monitoring_password" {
filename = "/etc/alloy/xrpl-push"
is_secret = true
}
xrpl_monitoring.xrplf "default" {
node = "<node-label>"
validator_master_key = "<public-validator-master-key>"
host_metrics_enabled = false
push_host = "push.monitoring.xrplf.org"
username = "<basic-auth-username>"
password = local.file.xrpl_monitoring_password.content
log_debug = "/var/log/xrpld/debug.log"
log_perf = "/var/log/xrpld/perf.log"
statsd_listen = "127.0.0.1:9125"
statsd_relay_addr = ""
// Keep "^$" when no extra redaction is needed.
host = "^$"
pubkey = "^$"
}
logging {
format = "logfmt"
level = "info"
}
Use these values:
node: a short label for this host. The full hostname is a good default.validator_master_key: the optional public 52-character validator master key that starts withnH. Use an empty string ("") to opt out. Never use a validator token, signing key, private key, or seed.host_metrics_enabled: a baretrueorfalsevalue. Keepfalseunless you choose to send basic host metrics.username: Basic Auth username from the XRPL Foundation.password: the secret content exported bylocal.file, do not put a literal password inconfig.alloy.log_debugandlog_perf: exact paths fromxrpld.cfg.statsd_listen: exact[insight]address fromxrpld.cfg.statsd_relay_addr: the old collector address, or an empty string if there is no other collector.
Alloy strings use double quotes. If a value itself contains " or \, put a backslash before that character.
The config does not contain the monitoring password, but it still contains private local monitoring details. Give the Alloy service group read access, but do not make the file public:
alloy_group="$(systemctl show alloy.service -p Group --value)"
sudo chown "root:${alloy_group:-alloy}" /etc/alloy/config.alloy
sudo chmod 0640 /etc/alloy/config.alloy11. Validate And Start Alloy
Check the password file contract, then validate the complete config:
sudo test -s /etc/alloy/xrpl-push
sudo test ! -L /etc/alloy/xrpl-push
sudo -u "$alloy_user" test -r /etc/alloy/xrpl-push
sudo stat -c '%U:%G %a %n' /etc/alloy/xrpl-push
sudo python3 -c '
data = open("/etc/alloy/xrpl-push", "rb").read()
raise SystemExit(1 if data.endswith(b"\n") else 0)
'
sudo alloy validate /etc/alloy/config.alloyIf you are working as root on a host without sudo, replace the service-user readability check with:
runuser -u "$alloy_user" -- test -r /etc/alloy/xrpl-pushThe stat output must show root, the Alloy service group, and mode 640. The Python command must exit successfully without output.
Do not start Alloy if validation reports an error. Fix the named file and run the check again.
If Alloy is not running, start it:
sudo systemctl start alloyIf it was already running with the package’s default config, restart it:
sudo systemctl restart alloyEnable Alloy so it starts after a reboot:
sudo systemctl enable alloy.serviceStarting or restarting Alloy begins sending the configured metrics and logs to push.monitoring.xrplf.org.
12. Verify The Manual Install
Check the service:
sudo systemctl status alloyCheck its recent logs:
sudo journalctl -u alloy -n 100 --no-pagerThe status should be active and the logs should not show repeated read, config, authentication, or push errors. After a few minutes, continue to Grafana Setup & Access and confirm that the node appears in the dashboards.
Configuration Reference
Both setup paths use the same four files: the guided installer writes them for you, while the manual path has you create them yourself.
/etc/alloy/config.alloy
/etc/alloy/xrpl-push
/etc/alloy/xrplf.alloy
/etc/alloy/statsd-mapping.yml
Most operators do not need to edit the files after setup. It is useful to know what they contain.
/etc/alloy/xrpl-push contains only the push password, has no final newline, and is written with owner root, the Alloy service group, and mode 0640.
/etc/alloy/config.alloy loads the password as an Alloy secret. It does not contain the literal password and is written with mode 0640.
/etc/alloy/xrplf.alloy contains the shared XRPL telemetry module and is written with mode 0644.
/etc/alloy/statsd-mapping.yml contains no secrets and is written with mode 0644.
/var/lib/xrpl-monitoring-alloy/pending-relay is a temporary guided installer record, not an Alloy config file. Its one line contains the config path, Alloy listener, and existing relay address. It exists only while an approved relay change is waiting for the Alloy config to be committed. The containing directory is root-owned mode 0700, and the file is root-owned mode 0600.
The guided installer backs up an existing file before replacing it:
<path>.bak.<unix-seconds>
The manual path shows the backup command before you replace the package config.
Values You Should Recognize
This table explains the general settings. Keep reading for details on host metrics, validator correlation, redaction, StatsD, and logs.
| Setting | What it does |
|---|---|
node |
Sets the node label shown in Grafana. |
push_host |
Sets the monitoring host, without https:// or a path. |
username |
Sets the Basic Auth username from the XRPL Foundation. |
password |
Loads the secret from /etc/alloy/xrpl-push. |
All generated connections to the push host use HTTPS.
Optional Host Metrics
Host metrics are disabled by default. To enable them, set this value in /etc/alloy/config.alloy, validate the config, and restart Alloy:
host_metrics_enabled = true
Alloy then collects CPU, memory, load, filesystem, disk, network, system time, kernel, and virtual-memory metrics every 15 seconds. The metrics use job="node_exporter", service_name="node_exporter", and the configured node label for both node and instance. They use the existing Mimir connection and monitoring tenant.
The host pipeline does not add validator_master_key. It drops disk identity metrics and real hostname labels. View enabled host metrics in the XRPL Validator Resources dashboard. This option does not add host alerts. Set the value to false, validate the config, and restart Alloy to stop new host samples. Historical samples remain until backend retention removes them.
Optional Validator Correlation
Set validator_master_key to the validator’s public 52-character master key that starts with nH to correlate the collector with public XRPL network statistics. This is not an account address, signing key, private key, seed, or validator token. Leave the value exactly empty to opt out:
validator_master_key = ""
The public master key is attached only to the Prometheus up metric. It is not attached to other metrics or any Loki log stream, and it does not replace the Basic Auth tenant as the trusted identity. After changing the value, validate the config and restart Alloy.
Optional Redaction
Host or public-key redaction is optional. The guided installer does not ask for it, and the manual config leaves it disabled.
By default, the generated config contains:
host = "^$"
pubkey = "^$"
^$ is the disabled value. Keep it when no extra redaction is needed.
Alloy always redacts IPv4 and IPv6 addresses from debug.log. To also redact a host, domain, or public key, edit /etc/alloy/config.alloy after install and replace one or both values with a regex that matches only the value you want to hide.
hostredacts matching host or domain values fromdebug.logandperf.log.pubkeyredacts matching public-key values fromdebug.log.
Example:
host = "validator[.]example[.]com"
pubkey = "n9KExamplePublicKey"
Then restart Alloy:
sudo systemctl restart alloyDo not use broad patterns such as .*, because every match is replaced in the logs. Keep the config file private because it contains local monitoring details. The password is stored separately in /etc/alloy/xrpl-push.
StatsD
xrpld sends StatsD packets to Alloy. Set statsd_listen to the same address as [insight] address in xrpld.cfg. Alloy converts the packets into metrics for the Grafana dashboards.
The mapping file keeps only the configured StatsD prefix and drops unrelated StatsD packets from the monitoring path.
If another StatsD collector already exists, Alloy sits in front of it:
xrpld -> Alloy -> existing StatsD collector
|
+-> XRPL monitoring
In that setup, the guided installer configures statsd_relay_addr automatically. In the manual path, you enter the old collector address yourself. The existing collector receives the original packets unchanged.
Logs
Alloy reads the files selected by log_debug and log_perf. Set these to the exact paths in xrpld.cfg. The filenames and directories can be different from the examples.
It parses timestamps, adds dashboard labels, applies the built-in and optional redaction described above, and sends the logs to the monitoring platform.
Useful service commands:
sudo systemctl status alloy
sudo journalctl -u alloy -n 100 --no-pager
sudo systemctl restart alloy
sudo systemctl stop alloyGrafana Setup & Access
The XRPL Foundation provides Grafana account access. Open:
https://monitoring.xrplf.org
After Alloy starts, wait a few minutes, then open:
XRPL Validator HealthXRPL StatsD MetricsXRPL Logs & Triage
If you opt in to host metrics, open XRPL Validator Resources to check them.
Use the dashboard filters:
validator: the monitoring tenant.node: the node label entered during install.- For logs:
file,level, andmodule.
If data does not appear:
Check Alloy:
sudo systemctl status alloyCheck Alloy logs:
sudo journalctl -u alloy -n 100 --no-pagerConfirm
xrpldis sending StatsD to the same address Alloy listens on.Confirm
debug.logandperf.logpaths exist and are readable.Confirm the push host and credentials with the XRPL Foundation.
Uninstall
Guided Uninstall
If you used the guided installer, run:
curl -fsSL \
https://push.monitoring.xrplf.org/alloy/install \
| bash -s -- --uninstallThe uninstall flow asks before it:
- Stops Alloy.
- Disables Alloy at boot.
- Removes managed
/etc/alloyfiles. - Removes the Grafana package repository and signing key.
- Removes the
alloypackage.
/etc/alloy/xrpl-push holds the monitoring push password. The installer asks before removing it without a backup. It also removes the managed config without a backup and offers to remove leftover config.alloy copies because legacy backups can contain a literal password.
It does not touch xrpld.cfg. If the install put Alloy in front of an existing StatsD collector, the uninstall prints the original collector address so you can restore the [insight] address yourself and restart xrpld using your normal process. The uninstall removes a valid pending relay-state record after it reads that address and removes a managed Alloy file or package.
Manual Uninstall
First stop Alloy and disable it at boot:
sudo systemctl stop alloy
sudo systemctl disable alloyIf you put Alloy in front of an older StatsD collector, restore the old [insight] address in xrpld.cfg now and restart xrpld using your normal process.
Remove the four config files. Check any backup before removing it because legacy config.alloy backups may contain the monitoring password:
sudo rm -i /etc/alloy/config.alloy
sudo rm -i /etc/alloy/xrpl-push
sudo rm -i /etc/alloy/xrplf.alloy
sudo rm -i /etc/alloy/statsd-mapping.yml
sudo find /etc/alloy -maxdepth 1 \
\( -name 'config.alloy.bak.*' -o -name 'config.alloy.rpmsave' \) \
-exec rm -i {} \;Remove the package with the command for your operating system:
sudo apt-get remove alloyOr:
sudo dnf remove alloyThe Grafana repository can stay in place for package updates or other Grafana software. If you want to remove it too, follow the optional repository-removal step in Grafana’s Linux uninstall guide.
Disable Without Removing Alloy
To stop monitoring but keep the package and config:
sudo systemctl stop alloy
sudo systemctl disable alloyIf you changed xrpld.cfg to send StatsD to Alloy and want to go back to a previous collector, restore the previous [insight] address yourself and restart xrpld using your normal process.