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.
About the automation dashboard
The automation dashboard utility is a web-based container application that provides key metrics related to job execution, efficiency, and the value derived from automation.
Automation dashboard uses automation metrics to supply automation usage data from Ansible Automation Platform. This data helps you compare the cost of performing tasks manually to the cost of performing tasks through automation, allowing you to show what savings are achievable through automation.
Key benefits
Automation dashboard helps you:
- Get a clear overview of the automation occurring in your environment.
- Track metrics such as time saved and errors reduced, to quantify the benefits of automation.
- Analyze job execution times and failure rates to pinpoint areas for automation improvement.
- Use the generated data to make informed decisions about automation strategy, resource allocation, and prioritization of automation projects.
Install automation dashboard
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
- 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.
- One of the following supported Red Hat Ansible Automation Platform versions:
- Red Hat Ansible Automation Platform 2.4
- Red Hat Ansible Automation Platform 2.5
- Red Hat Ansible Automation Platform 2.6
- Red Hat Ansible Automation Platform 2.7
- 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
Results
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=0Alternative 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
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
- 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
Synchronize data to automation dashboard
Synchronize data from your connected Ansible Automation Platform clusters to the automation dashboard to view the latest automation metrics.
Before you begin
- You have installed automation dashboard.
- You have configured the
clusters.yamlfile with your platform details.
Procedure
Results
- 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
After you configure and load your cluster data, verify the stored access tokens for debugging purposes.
Procedure
Results
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-webYou 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.768681ZCheck 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 -PUninstall automation dashboard
Uninstall automation dashboard and its dependencies by using a single command, ensuring a clean removal from your host.
Procedure
ansible-playbook -i inventory
ansible.containerized_installer.dashboard_uninstall