Skip to main content

The WHM plugin

The WHM plugin gives you tenantd's per-tenant state and statistics inside WHM, without dropping to a shell.

It is free. There are no locked panels and no upsell blocks.

Install

dnf install tenantd-whm-plugin

The package registers itself with WHM automatically. Find it in WHM under Plugins.

It requires cPanel, since it installs into /usr/local/cpanel/whostmgr/docroot/cgi/tenantd/. Everything else in tenantd works without cPanel.

Panels

Configured packages

Lists every profile in /etc/tenantd/packages/ with its limits. You can edit a profile from here rather than hand-editing the file, which is the safer path since the form validates values before writing.

See package profiles for what each key does.

Active per-user slices

Every enrolled tenant, their assigned package, and their live slice state. This reads the running system rather than the config, so it shows what systemd is actually enforcing.

Use it to spot tenants who are enrolled but whose slice is inactive, or who are on an unexpected profile after a migration.

24-hour spike log

Resource spikes over the last 24 hours, from the rolling stats database at /var/lib/tenantd/stats.db. This is where you look first when a customer reports that their site was slow an hour ago.

Retention is 24 hours by design. tenantd does not accumulate an unbounded metrics store on your host.

MySQL governor

Per-tenant database activity: query rates against the profile's MYSQL_MAX_QUERIES_PER_HOUR cap, connection counts against MYSQL_MAX_USER_CONNECTIONS, slow queries observed, and kills issued.

Needs tenantctl mysql-bootstrap to have been run and the governor service to be running. See the MySQL governor.

Per-tenant IO observability (eBPF)

Attributes database IO to individual tenants on a shared mysqld.

Needs the tenantd-ebpf package and the tenantd-mysql-ebpf service:

dnf install tenantd-ebpf
systemctl enable --now tenantd-mysql-ebpf

This panel is observability, not enforcement. Per-thread IO throttling inside a shared mysqld is not possible on a stock kernel, so what this gives you is the answer to "who is causing this?" rather than a throttle. That answer is what you need to decide whom to promote onto a dedicated mariadb@ instance, where enforcement does work. The reasoning is spelled out in the MySQL governor.

Troubleshooting

The plugin does not appear in WHM

Confirm the package installed and re-register:

rpm -q tenantd-whm-plugin
/usr/local/cpanel/bin/register_appconfig /usr/local/cpanel/whostmgr/docroot/cgi/tenantd/appconfig

The MySQL panels are empty

The governor is not running or mysql-bootstrap was never run. Check:

systemctl status tenantd-mysql-governor

Also confirm MariaDB has performance_schema enabled. It ships off by default; tenantd installs a drop-in to enable it, but MariaDB must be restarted for that to apply.

The eBPF panel is empty

Confirm tenantd-ebpf is installed and tenantd-mysql-ebpf.service is active.