---
schema_version: "1"
id: a16fba3c2b33d44f38c9d72d0e6a0c5c3982e882184057cced26f957ad4bb612
title: "RMT Upgrade: Technical Reference"
collection: tableau
version: next
locale: en-us
portal_url: https://docs.salesforce.com/tableau/next/en-us/server/rmt-admin-upgrade-reference.md
canonical_url: https://help.tableau.com/v0.0/server/en-us/rmt-admin-upgrade-reference.htm
source_site: help.tableau.com
content_type: documentation
content_hash: c98ca181132c2a754a2b0947a620aa9c31de2c373992738b1c21e1124b089b41
description: Technical reference of operational thresholds and checks during RMT upgrade.
---
[Skip to main content](#main-content)

# RMT Upgrade: Technical Reference

This section is a technical reference guide for the operational thresholds, system paths, and network ports checked during the upgrade process. Use these tables to quickly diagnose validation failures and align your environment with required RMT baselines.

**Note**: To align with our company values of Equality, we have updated RMT Master to RMT Server. In some cases, RMT Server installation paths and commands may use the term "master" instead of "server." So, you may continue to see the term in CLI commands and options, installation folders, configuration files. and other instances. For more information, see [About Tableau Help](https://help.tableau.com/current/tableau/en-us/about-tableau-help.htm)..

## Pre-upgrade health checks

The pre-upgrade health check inspects your RMT Server or Agent host while the existing installation is still intact like services running, database accessible and generates a detailed PASS / FAIL / WARN report. It runs over 80 individual checks across system resources, accounts, file permissions, PostgreSQL, RabbitMQ, networking, configuration files, and RMT services. The following table lists the checks performed before the upgrade. If any item returns a **FAIL** status (Exit Code 2), the upgrade is canceled.

### System and hardware

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table">
                    <colgroup><col style="width: 158px;">
                    <col style="width: 23%;">
                    <col style="width: 23%;">
                    <col style="width: 438px;">
                    </colgroup><tbody>
                        <tr>
                            <td><b>Check ID</b>
                            </td>
                            <td style="text-align: center;"><strong>Name </strong>
                            </td>
                            <td><b>Platforms</b>
                            </td>
                            <td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong>
                            </td>
                        </tr>
                        <tr>
                            <td>#1</td>
                            <td style="text-align: center;">Operating System</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>WARN</b> OS version is not in the pre-check allow-list. The supported list is  RHEL 8.x/9.x, Ubuntu 20.04/22.04/24.04, CentOS Stream 8/9, Oracle Linux 8.x/9.x, AlmaLinux 8.x/9.x, Rocky Linux 8.x/9.x, Amazon Linux 2023, Windows Server 2019/2022</td>
                        </tr>
                        <tr>
                            <td>#2</td>
                            <td style="text-align: center;">Disk Space</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>FAIL</b> RMT&nbsp;Server &lt; 20 GB or Agent &lt; 5 GB free. <b>WARN</b> RMT&nbsp;Server &lt; 50 GB or Agent &lt; 10 GB free</td>
                        </tr>
                        <tr>
                            <td>#2a</td>
                            <td style="text-align: center;">Disk Type</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>INFO</b> Reports if the drive is SSD or HDD</td>
                        </tr>
                        <tr>
                            <td>#3</td>
                            <td style="text-align: center;">
                                <p>RAM</p>
                            </td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>WARN</b> RMT&nbsp;Server &lt; 8 GB (minimum) or Agent &lt; 4 GB (minimum)</td>
                        </tr>
                        <tr>
                            <td>#4</td>
                            <td style="text-align: center;">CPU Cores</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>WARN</b> RMT&nbsp;Server &lt; 8 GB (minimum) or Agent &lt; 4 GB (minimum)</td>
                        </tr>
                        <tr>
                            <td>#4a</td>
                            <td style="text-align: center;">CPU Instructions</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>FAIL</b> (Linux): Missing sse4_2 or popcnt. <b>WARN</b> (Windows): Older CPU detected.</td>
                        </tr>
                        <tr>
                            <td>#4b</td>
                            <td style="text-align: center;">VC++ Redist</td>
                            <td>Windows</td>
                            <td style="text-align: center;"><b>FAIL</b> Visual Studio 2022 C++ Redistributable missing.</td>
                        </tr>
                        <tr>
                            <td>#4c</td>
                            <td style="text-align: center;">OpenSSL DLLs</td>
                            <td>Windows</td>
                            <td style="text-align: center;"><b>INFO</b>  Checks for libcrypto-3-x64.dll and libssl-3-x64.dll</td>
                        </tr>
                        <tr>
                            <td>#5</td>
                            <td style="text-align: center;">System uptime</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;font-weight: bold;">INFO: <span style="font-weight: normal;">Notes if &lt; 10 minutes (very recent reboot) or &gt; 90 days (pending patches)</span></td>
                        </tr>
                        <tr>
                            <td>#6</td>
                            <td style="text-align: center;">Systemd running</td>
                            <td>Linux</td>
                            <td style="text-align: center;"><b>FAIL</b>  systemd not running, <b>PASS</b> : Running or degraded</td>
                        </tr>
                        <tr>
                            <td>#7</td>
                            <td style="text-align: center;">FIPS Mode</td>
                            <td>Linux, Windows</td>
                            <td style="text-align: center;"><b>FAIL</b> (Windows): Enabled in registry, <b>PASS </b>FIPS disabled . <b>WARN</b> (Linux) Mismatch with config.json. <b>PASS</b> OS and config match </td>
                        </tr>
                        <tr>
                            <td>#7a</td>
                            <td style="text-align: center;">PowerShell version</td>
                            <td>Windows</td>
                            <td style="text-align: center;"><b>INFO</b> <span style="font-weight: normal;">PowerShell version</span></td>
                        </tr>
                        <tr>
                            <td>#7b</td>
                            <td style="text-align: center;">System locale</td>
                            <td>Windows</td>
                            <td style="text-align: center;"><b>INFO</b> <span style="font-weight: normal;">System locale information</span></td>
                        </tr>
                        <tr>
                            <td>#7c</td>
                            <td style="text-align: center;">WMI Health</td>
                            <td>Windows</td>
                            <td style="text-align: center;"><b>WARN</b>  WMI repository is inconsistent</td>
                        </tr>
                    </tbody>
                </table>

### Accounts and permissions

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 161px;"> <col style="width: 23%;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td><b>Platform</b></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#8</td><td style="text-align: center;">Service Account</td><td>Linux, Windows</td><td style="text-align: center;"><b>FAIL</b> RMT service account or Windows service not found</td></tr><tr><td>#9</td><td style="text-align: center;">Group Membership</td><td>Linux</td><td style="text-align: center;"><b>FAIL</b> Required service groups (e.g., rmtmasterapp, rmtmasterconfig, and so on) missing</td></tr><tr><td>#10</td><td style="text-align: center;">User Systemd</td><td>Linux</td><td style="text-align: center;"><b>FAIL</b> User systemd daemon/linger is not active</td></tr><tr><td>#44</td><td style="text-align: center;">pamtester installed</td><td>Linux</td><td style="text-align: center;"><b>WARN</b> if not installed. To fix this, install <code>yum install pamtester</code> or <code>apt install libpam-runtime</code></td></tr></tbody></table>

#### Directory ownership and permissions for Linux

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 21%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Directory</strong></td><td style="font-weight: bold;">Expected Owner:Group</td><td style="text-align: center;font-weight: bold;">Expected Mode</td></tr><tr><td>#11</td><td style="text-align: center;">Config dir</td><td>tabrmt-master:rmtmasterconfig</td><td style="text-align: center;">2775</td></tr><tr><td>#12</td><td style="text-align: center;">Log dir</td><td>tabrmt-master:rmtmasterlogs</td><td style="text-align: center;">2775</td></tr><tr><td>#13</td><td style="text-align: center;">Data dir (+ PG/RMQ subdirs)</td><td>Component-appropriate</td><td style="text-align: center;">2775</td></tr><tr><td>#14</td><td style="text-align: center;">Prerequisites dirs</td><td><code>root</code> or component user</td><td style="text-align: center;">755</td></tr><tr><td>#14a</td><td style="text-align: center;"><code>rabbitmq-defaults</code> file</td><td>Group-writable required</td><td style="text-align: center;">g+w</td></tr><tr><td>#15</td><td style="text-align: center;">SSL cert dir</td><td>tabrmt-master:rmtopenssl</td><td style="text-align: center;">2775</td></tr><tr><td>#15a</td><td style="text-align: center;">Home directory</td><td>Component user</td><td style="text-align: center;">770</td></tr><tr><td>#15b</td><td style="text-align: center;"><code>/etc/profile.d/tabrmt-*.sh</code></td><td>root</td><td style="text-align: center;">default</td></tr><tr><td>#15c</td><td style="text-align: center;">Config dir setgid bit</td><td>--</td><td style="text-align: center;">2xxx required</td></tr><tr><td>#16</td><td style="text-align: center;"><code>environment.bash</code></td><td>Component user</td><td style="text-align: center;">group-writable</td></tr></tbody></table>

Severity: **FAIL** on ownership only for the data-dir set (#13 and #15). All other Linux directory checks (#11, #12, #14, #14a, #15a–c, #16) emit **WARN** on ownership/mode mismatches because the installer's post install re-applies ownership during upgrade. **WARN** if permission mode is wrong but ownership is correct.

#### Directory ownership and permissions for Windows

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check</b></td><td style="text-align: center;"><strong>Name</strong></td><td style="font-weight: bold;">Severity</td></tr><tr><td>#11</td><td style="text-align: center;">Config dir ACLs</td><td><b>FAIL</b> if service user lacks FullControl</td></tr><tr><td>#12</td><td style="text-align: center;">Log dir ACLs</td><td><b>FAIL</b> if service user lacks Modify</td></tr><tr><td>#13</td><td style="text-align: center;">Data dir ACLs (RMT&nbsp;Server)</td><td><b>FAIL</b> if service user lacks FullControl on PG/RMQ data dirs</td></tr><tr><td>#14</td><td style="text-align: center;">Prereqs dir ACLs (RMT&nbsp;Server)</td><td><b>WARN</b> if missing ReadAndExecute (advisory — every upgrade reinstalls the prereq MSIs and their post-install actions re-apply ACLs)</td></tr><tr><td>#15</td><td style="text-align: center;">SSL cert dir ACLs (RMT&nbsp;Server)</td><td><b>FAIL</b> if service user lacks FullControl</td></tr><tr><td>#16a</td><td style="text-align: center;">Service user identity</td><td><b>PASS</b> (informational -- shows which user the service runs as)</td></tr><tr><td>#16b</td><td style="text-align: center;">SeServiceLogonRight privilege</td><td><b>INFO</b> if found; <b>WARN</b> if not found or secedit fails</td></tr><tr><td>#16c</td><td style="text-align: center;">Service user ACLs on RMT dirs</td><td><b>FAIL</b> if service user lacks required rights</td></tr></tbody></table>

### Database (PostgreSQL)

All PostgreSQL checks run only on the RMT Server.

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 233px;"> <col style="width: 23%;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td><b>Requires --</b><code style="font-weight: bold;">db-password</code><b> option</b></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#17</td><td style="text-align: center;">PG Service</td><td>No</td><td style="text-align: center;"><b>FAIL</b> Local service Stopped AND Disabled</td></tr><tr><td>#18</td><td style="text-align: center;">Port 5555 listening</td><td>No</td><td style="text-align: center;"><b>WARN</b> (security group / VPC / RDS hint) Not listening</td></tr><tr><td>#19</td><td style="text-align: center;">DB Connection</td><td>Yes</td><td style="text-align: center;"><b>WARN</b> Unable to connect to internal DB (SSL, password, or network issue)</td></tr></tbody></table>

### Messaging (RabbitMQ)

The Messaging (RabbitMQ) checks run only on the RMT Server.

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 234px;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#22</td><td style="text-align: center;">RMQ Service</td><td style="text-align: center;"><b>FAIL</b> Local service Stopped AND Disabled</td></tr><tr><td>#24</td><td style="text-align: center;">Queue Backlog</td><td style="text-align: center;"><b>WARN</b> Any queue that has &gt; 10,000 messages</td></tr><tr><td>#25</td><td style="text-align: center;">RabbitMQ users</td><td style="text-align: center;"><b>WARN</b> if default <code>guest</code> user still exists</td></tr><tr><td>#26</td><td style="text-align: center;">Active connections</td><td style="text-align: center;"><b>INFO</b> only. Reports active connection count</td></tr><tr><td>#27</td><td style="text-align: center;">Erlang cookie accessible</td><td style="text-align: center;"><b>WARN</b> if cookie file missing, if permissions wrong (should be mode 400 or 600)</td></tr><tr><td>#27a</td><td style="text-align: center;">ERLANG_HOME set</td><td style="text-align: center;"><b>WARN</b> (Windows only) if `ERLANG_HOME` not set or path does not exist.</td></tr><tr><td>#27b</td><td style="text-align: center;">SSL Validity</td><td style="text-align: center;"><b>FAIL</b> Certificates are expired</td></tr><tr><td>#27c</td><td style="text-align: center;">Disk Alarm</td><td style="text-align: center;"><b>FAIL</b> &lt; 10 GB free on RMQ partition (Upgrade will hang)</td></tr><tr><td>#45</td><td style="text-align: center;">Certificate directory populated</td><td style="text-align: center;"><b>WARN</b> if cert dir exists but is empty or missing expected certificate files (server cert, key, CA cert)</td></tr></tbody></table>

### Network and configuration

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 245px;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#28a/b</td><td style="text-align: center;">Agent-Master Comms</td><td style="text-align: center;"><b>WARN</b> Agent cannot reach Master on 5671, 5672, 80, or 443</td></tr><tr><td>#33-35</td><td style="text-align: center;">JSON/Bash Config</td><td style="text-align: center;"><b>FAIL</b> Missing or invalid config.json, setup.json, or environment.bash</td></tr><tr><td>#36a</td><td style="text-align: center;">Known-Bad Version</td><td style="text-align: center;"><b>FAIL</b> Current version is 2025.3.0 (Regression blocks upgrade)</td></tr></tbody></table>

### Services and backup

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 215px;"> <col style="width: 23%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#38</td><td style="text-align: center;">All RMT services running</td><td style="text-align: center;"><b>WARN</b> for each stopped service</td></tr><tr><td>#38a</td><td style="text-align: center;">Stranded Processes</td><td style="text-align: center;"><b>FAIL</b> Lingering tabrmt-* processes found after services stopped</td></tr><tr><td>#39</td><td style="text-align: center;">Background processor running</td><td style="text-align: center;"><b>WARN</b> if the host process is not running</td></tr><tr><td>#40</td><td style="text-align: center;">Pre-upgrade backup reminder</td><td style="text-align: center;"><b>WARN</b> as a reminder to back up configuration before upgrading</td></tr><tr><td>#41</td><td style="text-align: center;">Topology</td><td style="text-align: center;"><b>INFO</b> only. Reports Master/Agent node type and (with DB) active agent count</td></tr><tr><td>#42</td><td style="text-align: center;">Component version inventory</td><td style="text-align: center;"><b>INFO</b> only. Reports RMT, PostgreSQL, RabbitMQ, OpenSSL versions</td></tr><tr><td>#43</td><td style="text-align: center;">Machine specs summary</td><td style="text-align: center;"><b>INFO</b> only. Reports OS, CPU cores, RAM, free disk space</td></tr></tbody></table>

## Post-upgrade health checks

These checks run after the upgrade. They are non-blocking and failures do not stop the upgrade but indicate post-install issues.

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 21%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check ID</b></td><td style="text-align: center;"><strong>Name</strong></td><td><b>Component</b></td><td style="text-align: center;"><strong>Failure (FAIL) / Warning (WARN) Condition</strong></td></tr><tr><td>#1a-d</td><td style="text-align: center;">Services and processes</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> Main, PG, or RMQ services are not running</td></tr><tr><td>#2</td><td style="text-align: center;">Host process Supervisor</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>WARN</b> Host supervisor process missing (No auto-recovery)</td></tr><tr><td>#3a-b</td><td style="text-align: center;">Configuration file integrity</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> if missing or invalid JSON</td></tr><tr><td>#4a-b</td><td style="text-align: center;">File Permissions</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> Config/Log dirs not readable/writable by service account</td></tr><tr><td>#5a-d</td><td style="text-align: center;">Port Listening</td><td>RMT&nbsp;Server</td><td style="text-align: center;"><b>FAIL</b> Web (443), AMQP (5672), or DB (5555) not listening</td></tr><tr><td>#6</td><td style="text-align: center;">PostgreSQL Connectivity</td><td>RMT&nbsp;Server</td><td style="text-align: center;"><b>FAIL</b> PostgreSQL not accepting connections</td></tr><tr><td>#7</td><td style="text-align: center;">RabbitMQ status</td><td>RMT Server</td><td style="text-align: center;"><b>SKIP</b> if external. <b>FAIL</b> after all retries exhausted.</td></tr><tr><td>#8a</td><td style="text-align: center;">Queue Consumers</td><td>RMT&nbsp;Server</td><td style="text-align: center;"><b>WARN</b> Backlog exists but no active consumers (Master workers disconnected)</td></tr><tr><td>#9</td><td style="text-align: center;">RMQ Alarms</td><td>RMT&nbsp;Server</td><td style="text-align: center;"><b>FAIL</b> Active Memory or Disk resource alarms detected</td></tr><tr><td>#10</td><td style="text-align: center;">RabbitMQ SSL certificate</td><td>RMT Server</td><td style="text-align: center;"><b>FAIL</b> if certificate expired. <b>WARN</b> if certificates expires within 30 days</td></tr><tr><td>#11</td><td style="text-align: center;">FIPS Match</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> OS FIPS state mismatches isFIPSEnabled config</td></tr><tr><td>#12</td><td style="text-align: center;">Web server HTTP response</td><td>RMT Server</td><td style="text-align: center;">Makes HTTP GET to `https://localhost:&lt;port&gt;/authentication/login`. <b>PASS</b> on 200 or 302. <b>FAIL</b> on connection refused/timeout. <b>WARN</b> on other errors.</td></tr><tr><td>#13</td><td style="text-align: center;">HTTPS certificate validity</td><td>RMT&nbsp;Server</td><td style="text-align: center;"><b>FAIL</b> Web server TLS certificate is expired</td></tr><tr><td>#14a-d</td><td style="text-align: center;">Disk Space</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> &lt; 1 GB free. <b>WARN</b>: &lt; 5 GB free</td></tr><tr><td>#15</td><td style="text-align: center;">Recent Log Errors</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> FATAL errors in logs. <b>WARN</b>: CRITICAL errors</td></tr><tr><td>#16</td><td style="text-align: center;">RMT Status</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>FAIL</b> <code>rmtadmin</code> status returns failure patterns</td></tr><tr><td>#17</td><td style="text-align: center;">Agent log history</td><td>Agent</td><td style="text-align: center;">Checks log tracking files (<code>.history, .json</code>) in the agent data directory. <b>WARN</b> if files are unreadable or corrupt</td></tr><tr><td>#18a-f</td><td style="text-align: center;">Inventory Version</td><td>RMT&nbsp;Server, Agent</td><td style="text-align: center;"><b>INFO</b> about RMT version, PostgreSQL version, RabbitMQ version, Erlang/OTP version, .NET Runtime (Windows) / OS (Linux), OS version (Windows) / Kernel (Linux)</td></tr></tbody></table>

## Health check exit codes

Use the following exit codes to interpret the results of both the pre-upgrade and post-upgrade health check scripts.

### Pre-upgrade scripts

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 421px;"></colgroup><tbody><tr><td><b>Exit Code</b></td><td style="text-align: center;"><strong>Status</strong></td><td><b>Upgrade Behavior</b></td></tr><tr><td>0</td><td style="text-align: center;">READY TO UPGRADE</td><td>Upgrade proceeds</td></tr><tr><td>1</td><td style="text-align: center;">UPGRADE&nbsp;WITH&nbsp;CAUTION</td><td>Upgrade proceeds; review warnings</td></tr><tr><td>2</td><td style="text-align: center;">Do not upgrade</td><td>Upgrade canceled</td></tr><tr><td>3</td><td style="text-align: center;">Script Error</td><td>Check execution environment</td></tr></tbody></table>

### Post-upgrade scripts

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 669px;"></colgroup><tbody><tr><td style="font-weight: bold;">Exit Code</td><td style="text-align: center;"><strong>Status</strong></td></tr><tr><td>0</td><td style="text-align: center;">ALL PASSED</td></tr><tr><td>1</td><td style="text-align: center;">WARNINGS PRESENT</td></tr><tr><td>2</td><td style="text-align: center;">CRITICAL FAILURES</td></tr></tbody></table>

## InstallerContext severity changes

When run with `-InstallerContext` during automatic Windows MSI upgrades, the following checks behave differently from the manual default. The default (non-InstallerContext) behavior is \*already\* WARN for "stopped but not Disabled" / "port not listening" states; FAIL is reserved for \`Stopped+Disabled\`. Under \`-`InstallerContext`\`, even the \`Disabled\` branch is reported as WARN so an in-flight installer-driven upgrade is never vetoed by a transient state the installer is about to fix.

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 21%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Check</b></td><td style="text-align: center;"><strong>Name</strong></td><td><b>Default</b></td><td style="text-align: center;"><strong>InstallerContext</strong></td></tr><tr><td>#17</td><td style="text-align: center;">PG Service</td><td><b>WARN</b> if Stopped, <b>FAIL</b> if Stopped and Disabled, <b>INFO</b> if all stopped</td><td style="text-align: center;">WARN</td></tr><tr><td>#18</td><td style="text-align: center;">PG Port</td><td><b>WARN</b> if not listening, <b>INFO</b> if all services stopped</td><td style="text-align: center;">WARN</td></tr><tr><td>#22</td><td style="text-align: center;">RabbitMQ Service</td><td><b>WARN</b> if Stopped, <b>FAIL</b> if Stopped+Disabled, <b>INFO</b> if all stopped</td><td style="text-align: center;">WARN</td></tr><tr><td>#23</td><td style="text-align: center;">Port 5672 (AMQP)</td><td><b>WARN</b> if not listening, <b>INFO</b> if all services stopped</td><td style="text-align: center;">WARN</td></tr><tr><td>#38a</td><td style="text-align: center;">Stranded RMT Processes</td><td>(see check description)</td><td style="text-align: center;">SKIP (installer manages process lifecycle)</td></tr></tbody></table>

### Pre-upgrade thresholds

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 21%;"> <col style="width: 21%;"></colgroup><tbody><tr><td><b>Threshold</b></td><td style="text-align: center;"><strong>RMT&nbsp;Server</strong></td><td style="font-weight: bold;">Agent</td><td style="text-align: center;font-weight: bold;">Unit</td></tr><tr><td>Disk space FAIL</td><td style="text-align: center;">20</td><td>5</td><td style="text-align: center;">GB free</td></tr><tr><td>Disk space WARN</td><td style="text-align: center;">50</td><td>10</td><td style="text-align: center;font-weight: bold;"><span style="font-weight: normal;">GB free</span></td></tr><tr><td>Temp dir FAIL</td><td style="text-align: center;">5</td><td>5</td><td style="text-align: center;">GB free</td></tr><tr><td>Temp dir WARN</td><td style="text-align: center;">10</td><td>10</td><td style="text-align: center;font-weight: bold;"><span style="font-weight: normal;">GB free</span></td></tr><tr><td>RAM&nbsp;FAIL</td><td style="text-align: center;">8</td><td>4</td><td style="text-align: center;font-weight: bold;"><span style="font-weight: normal;">GB</span></td></tr><tr><td>RAM&nbsp;WARN</td><td style="text-align: center;">16</td><td>8</td><td style="text-align: center;font-weight: bold;"><span style="font-weight: normal;">GB</span></td></tr><tr><td>CPU&nbsp;FAIL</td><td style="text-align: center;">4</td><td>2</td><td style="text-align: center;">cores</td></tr><tr><td>CPU&nbsp;WARN</td><td style="text-align: center;">8</td><td>4</td><td style="text-align: center;">cores</td></tr><tr><td>Database size FAIL</td><td style="text-align: center;">500</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>Database size WARN</td><td style="text-align: center;">200</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>Hangfire schema FAIL</td><td style="text-align: center;">10</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>Hangfire schema WARN</td><td style="text-align: center;">1</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>WAL dir FAIL (Windows)</td><td style="text-align: center;">10</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>WAL dir FAIL (Windows)</td><td style="text-align: center;">2</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>WAL dir FAIL (Linux)</td><td style="text-align: center;">10</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>Mnesia dir WARN</td><td style="text-align: center;">5</td><td>-</td><td style="text-align: center;">GB</td></tr><tr><td>RabbitMQ disk alarm FAIL</td><td style="text-align: center;">10</td><td>-</td><td style="text-align: center;">GB free</td></tr><tr><td>Queue backlog WARN</td><td style="text-align: center;">10,000</td><td>-</td><td style="text-align: center;">messages</td></tr><tr><td>Certificate expiry WARN</td><td style="text-align: center;">30</td><td>30</td><td style="text-align: center;">days</td></tr><tr><td>Cleanup retention WARN</td><td style="text-align: center;">180</td><td>-</td><td style="text-align: center;">days</td></tr><tr><td>Dead tuple ratio WARN</td><td style="text-align: center;">20</td><td>-</td><td style="text-align: center;">percent</td></tr><tr><td>Agent heartbeat stale</td><td style="text-align: center;">15</td><td>-</td><td style="text-align: center;">minutes</td></tr><tr><td>Network driver age WARN</td><td style="text-align: center;">3</td><td>-</td><td style="text-align: center;">years</td></tr><tr><td>Log dir size WARN</td><td style="text-align: center;">5</td><td>5</td><td style="text-align: center;">GB</td></tr><tr><td>Log dir size WARN (severe)</td><td style="text-align: center;">20</td><td>20</td><td style="text-align: center;">GB</td></tr></tbody></table>

### Post-upgrade thresholds

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 207px;"> <col style="width: 23%;"> <col style="width: 421px;"></colgroup><tbody><tr><td style="font-weight: bold;">Threshold</td><td style="text-align: center;font-weight: bold;"><strong>Value</strong></td><td style="font-weight: bold;">Unit</td></tr><tr><td>Disk space FAIL</td><td style="text-align: center;">1</td><td>GB free</td></tr><tr><td>Disk space WARN</td><td style="text-align: center;">5</td><td>GB free</td></tr><tr><td>Certificate expiry WARN</td><td style="text-align: center;">30</td><td>days</td></tr><tr><td>Queue backlog WARN</td><td style="text-align: center;">10,000</td><td>messages</td></tr><tr><td>Log scan window</td><td style="text-align: center;">60</td><td>minutes</td></tr><tr><td>RabbitMQ startup retry</td><td style="text-align: center;">6 attempts x 5 sec</td><td>30 seconds total</td></tr></tbody></table>

## Minimum supported component versions

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"></colgroup><tbody><tr><td style="font-weight: bold;">Component</td><td style="text-align: center;font-weight: bold;"><strong>Minimum Version</strong></td></tr><tr><td>RabbitMQ</td><td style="text-align: center;">&gt;= 3.10.10</td></tr><tr><td>Agent version</td><td style="text-align: center;">&gt;= 2023.1.0</td></tr></tbody></table>

### Automation and CI/CD Integration

**For Linux:**

\`\`\`base  
\# Linux  
sudo bash rmt-pre-upgrade-check.sh --component master --db-password "$DB\_PASSWORD"  
EXIT\_CODE=$?  
if \[ $EXIT\_CODE -eq 2 \]; then  
echo "BLOCKED: Fix critical issues before upgrading"  
exit 1  
fi  
\`\`\`

**For Windows:**

\`\`\`powershell  
\# Windows  
.\\rmt-pre-upgrade-check.ps1 -Component master  
if ($LASTEXITCODE -eq 2) {  
Write-Error "BLOCKED: Fix critical issues before upgrading"  
exit 1  
}  
\`\`\`

## Installation directory reference

To manually invoke the underlying diagnostic utilities or verify your installation structure, refer to the platform-specific directory paths:

### Linux directory structure

\`\`\`

`/opt/tableau/tabrmt/ # Install root`

+`-- master/ # Master application binaries`

`+-- agent/ # Agent application binaries`

`+-- prerequisites/ # Bundled dependencies`

`/var/opt/tableau/tabrmt/ # Data root`

`+-- master/config/ # config.json, setup.json`

`+-- master/logs/ # Application logs`

`+-- data/postgresql15/ # PostgreSQL data files`

`+-- data/rabbitmq313/ # RabbitMQ data/mnesia`

`+-- data/ssl/ # TLS certificates`

`/etc/opt/tableau/tabrmt/`

`+-- master/environment.bash # Master environment variables`

`+-- agent/environment.bash # Agent environment variables`

\`\`\`

### Windows directory structure

\`\`\`

`C:\Program Files\Tableau\Tableau Resource Monitoring Tool\ # Install root`

`C:\ProgramData\Tableau\Tableau Resource Monitoring Tool\ # Data root`

\`\`\`

### Required network ports

<table style="width: 100%;margin-left: 0;margin-right: auto;" class="simple-table"><colgroup><col style="width: 136px;"> <col style="width: 23%;"> <col style="width: 421px;"></colgroup><tbody><tr><td><b>Port</b></td><td style="text-align: center;"><strong>Service</strong></td><td><b>Direction</b></td></tr><tr><td>80</td><td style="text-align: center;">RMT Web UI (HTTP)</td><td>Inbound</td></tr><tr><td>443</td><td style="text-align: center;">RMT Web UI (HTTPS)</td><td>Inbound</td></tr><tr><td>5672</td><td style="text-align: center;">RabbitMQ AMQP</td><td>Inbound on RMT&nbsp;Server</td></tr><tr><td>5671</td><td style="text-align: center;">RabbitMQ AMQP over TLS</td><td>Inbound on RMT&nbsp;Server</td></tr><tr><td>15672</td><td style="text-align: center;">RabbitMQ Management UI</td><td>Local</td></tr><tr><td>25672</td><td style="text-align: center;">RabbitMQ inter-node</td><td>Local</td></tr><tr><td>5555</td><td style="text-align: center;">Internal PostgreSQL</td><td>Local</td></tr></tbody></table>