Install automation dashboard to calculate savings (RHEL only)
By effectively using automation dashboard, you can gain valuable insights into your Ansible Automation Platform usage and drive continuous improvement in your automation practices.
Install automation dashboard Copy linkLink copied!
Install automation dashboard to collect and analyze key metrics related to job execution, efficiency, and automation savings across your Ansible Automation Platform deployments.
Before you begin Copy linkLink copied!
- One of the following tested configurations:
- RHEL 9 or RHEL 10 on x86 or ARM-based physical or virtual hosts.
- With an external database: PostgreSQL v15 database.
Important Do not install automation dashboard on the same host(s) as Ansible Automation Platform.
- Automation dashboard installation has been tested with the following configuration:
- 80 GB hard drive (depending on data growth)
- 4 vCPUs x 16 GB RAM
- Disk IOPS - 3000
- Handle up to 10,000 jobs/month and 47M summaries/month
- Connects to three Ansible Automation Platform deployments of the same version
- Access to baseos and Ansible Automation Platformstream repository packages for the RHEL 9 or RHEL 10 host.
- A non-root login account to the RHEL 9 or RHEL 10 host for installation.
- The login account requires
sudoaccess to root. - By default, we use the
$HOMEDIRof the user account.
- The login account requires
- URL details for access to your Ansible Automation Platform instances.
- An Ansible Automation Platform OAuth2 token, which is used for communication between the Ansible Automation Platform instances and automation dashboard.
- Access to download the installation bundle providing installation components for the automation dashboard.
- Open firewall access to allow for bidirectional communication between Ansible Automation Platform instances and the automation dashboard.
- This includes HTTPS/443 (or your Ansible Automation Platform configured port) from the dashboard to the Ansible Automation Platform instance(s).
- Port 8447 is the default ingress port for the automation dashboard. This port can be configured during installation.
- RHEL firewall ports that might block 5432 to PostgreSQL.
- A supported version of
ansible-coreinstalled on supported RHEL versions.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
For reference, see the following example output:
PLAY RECAP *********************************************************************************************************************************************
ec2-54-147-26-173.compute-1.amazonaws.com : ok=126 changed=51 unreachable=0 failed=0 skipped=42 rescued=0 ignored=0
localhost : ok=12 changed=0 unreachable=0 failed=0 skipped=9 rescued=0 ignored=0
Alternative configurations are possible (for example, the database for automation dashboard can be set on a different host). This requires additional changes to variables in the inventory file. Consult the Inventory variables section of this document for available variables.
Configure automation dashboard Copy linkLink copied!
Integrate your Ansible Automation Platform instances into the automation dashboard configuration to collect and visualise data and gain insights into your automation.
Before you begin Copy linkLink copied!
- You have installed automation dashboard.
- You have verified that automation dashboard is running on HTTPS port 8447 on your Red Hat Enterprise Linux host.
Note - This verification requires your Ansible Automation Platform login details.
- Port 8447 is enabled by default, but this is configurable.
Procedure Copy linkLink copied!
Synchronize data to automation dashboard Copy linkLink copied!
Synchronize data from your connected Ansible Automation Platform clusters to the automation dashboard to view the latest automation metrics.
Before you begin Copy linkLink copied!
- You have installed automation dashboard.
- You have configured the
clusters.yamlfile with your platform details.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
- Verify that the terminal displays the success message:
Successfully created Sync task for Cluster <cluster_url>. - Refresh automation dashboard in your browser to view the updated metrics.
Verify cluster access tokens Copy linkLink copied!
After you configure and load your cluster data, verify the stored access tokens for debugging purposes.
Procedure Copy linkLink copied!
Results Copy linkLink copied!
If you come across error messages during installation, consult the following table:
| Issue | Possible Cause | Solution |
|---|---|---|
| 401 error |
This is an unauthorized access message indicating authentication errors such as wrong credentials or tokens. |
Verify that your access token is correct in |
| 401 error |
A temporary 401 error is expected behavior when the token expires, followed immediately by trying to refresh. |
If the automatic token refresh fails (for example, due to invalid |
| 404 error |
This is a “not found” message indicating that something is not configured correctly or pointing to the correct endpoint. |
Verify that your Ansible Automation Platform instance URLs used in |
A successful installation should be running the following three container services:
podman ps --all --format "{{.Names}}"
postgresql
automation-dashboard-task
automation-dashboard-web
You can check your container logs by running the following:
journalctl CONTAINER_NAME=container (where container equals one of postgresql automation-dashboard-task or automation-dashboard-web)
For example:
journalctl CONTAINER_NAME=automation-dashboard-task
May 22 13:02:07 automation-dashboard automation-dashboard-task[1607]: [wait-for-migrations-dashboard.sh] Waiting for database migrations...
May 22 13:02:07 automation-dashboard automation-dashboard-task[1607]: [wait-for-migrations-dashboard.sh] Attempt 1
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,636 periodic 2 140568371550016 Starting sync task.
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,636 periodic 2 140568371550016 Retrieving clusters inform>
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,747 periodic 2 140568371550016 Retrieved 1 clusters.
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,761 periodic 2 140568371550016 Retrieving data from clust>
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,761 connector 2 140568371550016 Checking Ansible Automation Platform version at h>
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,761 connector 2 140568371550016 Checking if is Ansible Automation Platform 2.5 at>
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,761 connector 2 140568371550016 Pinging api https://ec2-3>
May 22 13:02:10 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:10,761 connector 2 140568371550016 Executing GET request to >
May 22 13:02:13 automation-dashboard automation-dashboard-task[1607]: ERROR 2025-05-22 13:02:13,820 connector 2 140568371550016 GET request failed with >
May 22 13:02:13 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:13,821 connector 2 140568371550016 Checking if is Ansible Automation Platform 2.4 at>
May 22 13:02:13 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:13,821 connector 2 140568371550016 Pinging api https://ec2-3>
May 22 13:02:13 automation-dashboard automation-dashboard-task[1607]: INFO 2025-05-22 13:02:13,821 connector 2 140568371550016 Executing GET request to >
May 22 13:02:16 automation-dashboard automation-dashboard-task[1607]: ERROR 2025-05-22 13:02:16,892 connector 2 140568371550016 GET request failed with ...
The following log snippet shows a successful token refresh:
This log snippet omits timestamps and hostname for brevity.
Example
journalctl CONTAINER_NAME=automation-dashboard-task
INFO Checking if is AAP 2.5 ... 2.6 at https://app.example.com:443
INFO Pinging api https://app.example.com:443/api/gateway/v1/ping/
INFO Detected AAP version AAP 2.6 at https://app.example.com:443
INFO Executing GET request to https://app.example.com:443/api/controller/v2/organizations/?page_size=100&page=1
ERROR GET request failed with status 401
INFO Token refresh POST request succeeded with status 201
ERROR GET after reauth response.status_code=200
INFO Executing GET request to https://app.example.com:443/api/controller/v2/job_templates/?page_size=200&page=1
Executing GET request to https://app.example.com:443/api/controller/v2/jobs/?page_size=100&page=1&order_by=finished&finished__gt=2025-10-23T13:01:09.768681Z
Check how the services are running by using systemd:
systemctl status --user
● automation-dashboard
State: running
Units: 76 loaded (incl. loaded aliases)
Jobs: 0 queued
Failed: 0 units
Since: Thu 2025-05-22 13:02:07 UTC; 22min ago
systemd: 252-51.el9
CGroup: /user.slice/user-1000.slice/user@1000.service
├─app.slice
│ ├─automation-dashboard-task.service
│ │ └─1607 /usr/bin/conmon --api-version 1 -c 84e46532e8ca31b0cadb037479289d030103aa01b7a1591e62b83b17f031e47d -u 84e46532e8ca31b0cadb037479>
│ ├─automation-dashboard-web.service
│ │ └─1608 /usr/bin/conmon --api-version 1 -c d060f3e3fb2b4c4c5c588149253beed83c78ccc9c9a8c1bf4c96157142a210dc -u d060f3e3fb2b4c4c5c58814925>
│ ├─dbus-broker.service
│ │ ├─1621 /usr/bin/dbus-broker-launch --scope user
│ │ └─1624 dbus-broker --log 4 --controller 9 --machine-id 612db98503014199bfd8c788c8d3da58 --max-bytes 100000000000000 --max-fds 2500000000>
│ └─postgresql.service
│ └─1614 /usr/bin/conmon --api-version 1 -c eec61745cb6fc3a89a4f7475d7ef63b5899699157d943c2f16a3243311927bef -u eec61745cb6fc3a89a4f7475d7>
├─init.scope
│ ├─1093 /usr/lib/systemd/systemd --user
│ └─1128 "(sd-pam)"
└─user.slice
├─libpod-84e46532e8ca31b0cadb037479289d030103aa01b7a1591e62b83b17f031e47d.scope
│ └─container
│ ├─1619 /usr/bin/dumb-init -- /usr/bin/launch_dashboard_task.sh
│ └─1681 /venv/bin/python periodic.py
├─libpod-d060f3e3fb2b4c4c5c588149253beed83c78ccc9c9a8c1bf4c96157142a210dc.scope
│ └─container
│ ├─1617 /usr/bin/dumb-init -- /usr/bin/launch_dashboard_web.sh
│ ├─1646 /usr/bin/python3.9 /usr/local/bin/supervisord -c /etc/supervisord_dashboard_web.conf
│ ├─1877 /bin/bash /usr/local/bin/stop-supervisor
│ ├─1878 "nginx: master process nginx -g daemon off;"
│ ├─1879 /venv/bin/uwsgi /etc/tower/uwsgi.ini
│ ├─1880 "nginx: worker process"
│ ├─1881 "nginx: worker process"
│ ├─1882 "nginx: worker process"
│ ├─1883 "nginx: worker process"
│ ├─1884 /venv/bin/uwsgi /etc/tower/uwsgi.ini
│ ├─1885 /venv/bin/uwsgi /etc/tower/uwsgi.ini
│ ├─1886 /venv/bin/uwsgi /etc/tower/uwsgi.ini
│ ├─1887 /venv/bin/uwsgi /etc/tower/uwsgi.ini
│ └─1888 /venv/bin/uwsgi /etc/tower/uwsgi.ini
├─libpod-eec61745cb6fc3a89a4f7475d7ef63b5899699157d943c2f16a3243311927bef.scope
│ └─container
│ ├─1623 postgres
│ ├─1869 "postgres: logger "
│ ├─1871 "postgres: checkpointer "
│ ├─1872 "postgres: background writer "
│ ├─1873 "postgres: walwriter "
│ ├─1874 "postgres: autovacuum launcher "
│ ├─1875 "postgres: stats collector "
│ ├─1876 "postgres: logical replication launcher "
│ └─1889 "postgres: aapdashboard aapdashboard 172.31.28.99(39338) idle"
└─podman-pause-b6c4e853.scope
└─1359 catatonit -P
Uninstall automation dashboard Copy linkLink copied!
Uninstall automation dashboard and its dependencies by using a single command, ensuring a clean removal from your host.
Procedure Copy linkLink copied!
ansible-playbook -i inventory
ansible.containerized_installer.dashboard_uninstall