Chapter 12. Usage reporting with metrics-utility
			The Ansible Automation Platform metrics utility tool (metrics-utility) is a command-line utility that is installed on a system containing an instance of automation controller.
		
			When installed and configured, metrics-utility gathers billing-related metrics from your system and creates a consumption-based billing report. The metrics-utility tool is especially suited for users who have multiple managed hosts and want to use consumption-based billing. After a report is generated, it is deposited in a target location that you specify in the configuration file.
		
			metrics-utility collects two types of data from your system: configuration data and reporting data.
		
The configuration data includes the following information:
- Version information for automation controller and for the operating system
- Subscription information
- The base URL
The reporting data includes the following information:
- Job name and ID
- Host name
- Inventory name
- Organization name
- Project name
- Success or failure information
- Report date and time
			To ensure that metrics-utility continues to work as configured, clear your report directories of outdated reports regularly.
		
12.1. Configuring metrics-utility
Configure the metrics-utility to gather and report usage data for your Ansible Automation Platform, both on Red Hat Enterprise Linux and OpenShift Container Platform.
12.1.1. Configuring metrics-utility on Red Hat Enterprise Linux
Prerequisites:
- An active Ansible Automation Platform subscription
Metrics-utility is included with Ansible Automation Platform, so you do not need a separate installation. The following procedure gathers the relevant data and generate a CCSP report containing your usage metrics. You can configure these commands as cronjobs to ensure they run at the beginning of every month. See How to schedule jobs using the Linux 'cron' utility for more on configuring using the cron syntax.
Procedure
- Create two scripts in your user’s home directory to set correct variables to ensure that - metrics-utilitygathers all relevant data.- In - /home/my-user/cron-gather:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- In - /home/my-user/cron-report:- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- To ensure that these files are executable, run: - chmod a+x /home/my-user/cron-gather /home/my-user/cron-report
- To open the cron file for editing, run: - crontab -e
- To configure the run schedule, add the following parameters to the end of the file and specify how often you want - metrics-utilityto gather information and build a report using cron syntax. In the following example, the- gathercommand is configured to run every hour at 00 minutes. The- build_reportcommand is configured to run on the second day of each month at 4:00 AM.- 0 */1 * * * /home/my-user/cron-gather- 0 4 2 * * /home/my-user/cron-report
- Save and close the file.
- To verify that you saved your changes, run: - crontab -l
- To ensure that data is being collected, run: - cat /var/log/cron- The following is a typical output. Note that time and date might vary depending on how your configure the run schedule: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow - The generated report will have the default name - CCSP-<YEAR>-<MONTH>.xlsxand is saved in the ship path that you specified in step 1a.
12.1.2. Configuring metrics-utility on OpenShift Container Platform from the Ansible Automation Platform operator
					metrics-utility is included in the OpenShift Container Platform image beginning with version 4.12, 4.512, and 4.6. If your system does not have metrics-utility installed, update your OpenShift image to the latest version.
				
					Complete the following steps to configure the run schedule for metrics-utility on OpenShift Container Platform using the Ansible Automation Platform operator:
				
12.1.2.1. Creating a ConfigMap in the OpenShift UI YAML view
						To inject the metrics-utility cronjobs with configuration data, use the following procedure to create a ConfigMap in the OpenShift UI YAML view:
					
Prerequisites:
- A running OpenShift cluster
- An operator-based installation of Ansible Automation Platform on OpenShift Container Platform.
							metrics-utility runs as indicated by the parameters you set in the configuration file. You cannot run the utility manually on OpenShift Container Platform.
						
Procedure
- From the navigation panel, select .
- Click .
- On the next screen, select the YAML view tab.
- In the YAML field, enter the following parameters with the appropriate variables set: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
- Click .
Verification
- 
								To verify that you created the ConfigMap and metrics-utilityis installed, select ConfigMap from the navigation panel and look for your ConfigMap in the list.
12.1.2.2. Deploy automation controller
						To deploy automation controller and specify variables for how often metrics-utility gathers usage information and generates a report, use the following procedure:
					
Procedure
- From the navigation panel, select Installed Operators.
- Select Ansible Automation Platform.
- In the Operator details, select the automation controller tab.
- Click .
- Select the YAML view option. The YAML now shows the default parameters for automation controller. The relevant parameters for - metrics-utilityare the following:- Expand - Parameter - Variable - metrics_utility_enabled- True. - metrics_utility_cronjob_gather_schedule- @hourlyor- @daily.- metrics_utility_cronjob_report_schedule- @dailyor- @monthly.
- 
								Find the metrics_utility_enabledparameter and change the variable to true.
- 
								Find the metrics_utility_cronjob_gather_scheduleparameter and enter a variable for how often the utility should gather usage information (for example,@hourlyor@daily).
- 
								Find the metrics_utility_cronjob_report_scheduleparameter and enter a variable for how often the utility generates a report (for example,@dailyor@monthly).
- Click .
12.2. Fetching a monthly report
Fetch a monthly report from Ansible Automation Platform to gather usage metrics and create a consumption-based billing report. To fetch a monthly report on Red Hat Enterprise Linux or on OpenShift Container Platform, use the following procedures:
12.2.1. Fetching a monthly report on Red Hat Enterprise Linux
Use the following procedure to fetch a monthly report on Red Hat Enterprise Linux:
Procedure
- 
							Run: scp -r username@controller_host:$METRICS_UTILITY_SHIP_PATH/data/<YYYY>/<MM>/ /local/directory/
					The system saves the generated report as CCSP-<YEAR>-<MONTH>.xlsx in the ship path that you specified.
				
12.2.2. Fetching a monthly report on OpenShift Container Platform from the Ansible Automation Platform Operator
Use the following playbook to fetch a monthly consumption report for Ansible Automation Platform on OpenShift Container Platform:
12.3. Modifying the run schedule
				You can configure metrics-utility to run at specified times and intervals. Run frequency is expressed in cronjobs. For more information on the cron utility, see How to schedule jobs using the Linux ‘Cron’ utility.
			
To modify the run schedule on Red Hat Enterprise Linux and on OpenShift Container Platform, use one of the following procedures:
Procedure
- From the command line, run: - crontab -e
- After the code editor has opened, update the - gatherand- buildparameters using cron syntax as shown below:- */2 * * * * metrics-utility gather_automation_controller_billing_data --ship --until=10m- */5 * * * * metrics-utility build_report
- Save and close the file.
12.3.1. Modifying the run schedule on OpenShift Container Platform from the Ansible Automation Platform operator
					To adjust the execution schedule of the metrics-utility within your Ansible Automation Platform deployment running on OpenShift Container Platform, use the following procedure:
				
Procedure
- 
							From the navigation panel, select  . 
- On the next screen, select automation-controller-operator-controller-manager.
- Beneath the heading Deployment Details, click the down arrow button to change the number of pods to zero. This pauses the deployment so you can update the running schedule.
- From the navigation panel, select Installed Operators.
- From the list of installed operators, select Ansible Automation Platform.
- On the next screen, select the automation controller tab.
- From the list that appears, select your automation controller instance.
- 
							On the next screen, select the YAMLtab.
- In the - YAMLfile, find the following parameters and enter a variable representing how often- metrics-utilityshould gather data and how often it should produce a report:- metrics_utility_cronjob_gather_schedule:- metrics_utility_cronjob_report_schedule:
- Click .
- From the navigation menu, select and then select automation-controller-operator-controller-manager.
- Increase the number of pods to 1.
- To verify that you have changed the - metrics-utilityrunning schedule successfully, you can take one or both of the following steps:- 
									Return to the YAMLfile and ensure that the previously described parameters reflect the correct variables.
- 
									From the navigation menu, select  and ensure that your cronjobs show the updated schedule. 
 
- 
									Return to the 
12.4. Supported storage
				Supported storage is available for storing the raw data obtained by using the metrics-utility gather_automation_controller_billing_data command and storing the generated reports obtained by using the metrics-utility build_report command. Apply the environment variables to this storage based on your Ansible Automation Platform installation.
			
12.4.1. Local disk
For an installation of Ansible Automation Platform on Red Hat Enterprise Linux, the default storage option is a local disk. Using an OpenShift deployment of OpenShift Container Platform, default storage is a path inside the attached Persistent Volume Claim.
+
Set needed ENV VARs for gathering data and generating reports Your path on the local disk
# Set needed ENV VARs for gathering data and generating reports
export METRICS_UTILITY_SHIP_TARGET=directory
# Your path on the local disk
export METRICS_UTILITY_SHIP_PATH=/path_to_data_and_reports/...12.4.2. Object storage with S3 interface
To use object storage with S3 interface, for example, with AWS S3, Ceph Object storage, or Minio, you must define environment variables for data gathering and report building commands and cronjobs.
+
12.5. Report types
This section provides additional configurations for data gathering and report building based on a report type. Apply the environment variables to each report type based on your Ansible Automation Platform installation.
12.5.1. CCSPv2
CCSPv2 is a report which shows the following:
- Directly and indirectly managed node usage
- The content of all inventories
- Content usage
The primary use of this report is for partners under the CCSP program, but all customers can use it to obtain on-premise reporting showing managed nodes, jobs and content usage across their automation controller organizations.
					Set the report type using METRICS_UTILITY_REPORT_TYPE=CCSPv2.
				
12.5.2. Optional collectors for gather command
					You can use the following optional collectors for the gather command:
				
- main_jobhostsummary- 
									If present by default, this incrementally collects data from the main_jobhostsummarytable in the automation controller database, containing information about jobs runs and managed nodes automated.
 
- 
									If present by default, this incrementally collects data from the 
- main_host- 
									This collects daily snapshots of the main_hosttable in the automation controller database and has managed nodes and hosts present across automation controller inventories.
 
- 
									This collects daily snapshots of the 
- main_jobevent- 
									This incrementally collects data from the main_jobeventtable in the automation controller database and contains information about which modules, roles, and Ansible collections are being used.
 
- 
									This incrementally collects data from the 
- main_indirectmanagednodeaudit- This incrementally collects data from the - main_indirectmanagednodeaudittable in the automation controller database and contains information about indirectly managed nodes.- Example with all optional collectors - # Example with all optional collectors export METRICS_UTILITY_OPTIONAL_COLLECTORS="main_host,main_jobevent,main_indirectmanagednodeaudit"- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
12.5.3. Optional sheets for build_report command
					You can use the following optional sheets for the build_report command:
				
- ccsp_summary- This is a landing page specifically for partners under CCSP program. This report takes additional parameters to customize the summary page. For more information, see the following example: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- jobs- This is a list of automation controller jobs launched. It is grouped by job template.
 
- managed_nodes- This is a deduplicated list of managed nodes automated by automation controller.
 
- indirectly_managed_nodes- This is a deduplicated list of indirect managed nodes automated by automation controller.
 
- inventory_scope- This is a deduplicated list of managed nodes present across all inventories of automation controller.
 
- usage_by_organizations- This is a list of all automation controller organizations with several metrics showing the organizations usage. This provides data suitable for doing internal chargeback.
 
- usage_by_collections- This is a list of Ansible collections used in a automation controller job runs.
 
- usage_by_roles- This is a list of roles used in automation controller job runs.
 
- usage_by_modules- This is a list of modules used in automation controller job runs.
 
- managed_nodes_by_organization- This generates a sheet per organization, listing managed nodes for every organization with the same content as the managed_nodes sheet.
 
- data_collection_status- 
									This generates a sheet with the status of every data collection done by the gathercommand for the date range the report is built for.
 
- 
									This generates a sheet with the status of every data collection done by the 
To outline the quality of data collected it also lists:
- unusual gaps between collections (based on collection_start_timestamp)
- gaps in collected intervals (based on since vs until) - Example with all optional sheets - # Example with all optional sheets export METRICS_UTILITY_OPTIONAL_CCSP_REPORT_SHEETS='ccsp_summary,jobs,managed_nodes,indirectly_managed_nodes,inventory_scope,usage_by_organizations,usage_by_collections,usage_by_roles,usage_by_modules,data_collection_status'- Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
12.5.4. Filtering reports by organization
To filter your report so that only certain organizations are present, use this environment variable with a semicolon separated list of organization names.
					export METRICS_UTILITY_ORGANIZATION_FILTER="ACME;Organization 1"
				
This renders only the data from these organizations in the built report. This filter currently does not have any effect on the following optional sheets:
- 
							usage_by_collections
- 
							usage_by_roles
- 
							usage_by_modules
12.5.5. Selecting a date range for your CCSPv2 report
The default behavior of the CCSPv2 report is to build a report for the previous month. The following examples describe how to override this default behavior to select a specific date range for your report:
12.5.6. RENEWAL_GUIDANCE
					The RENEWAL_GUIDANCE report provides historical usage from the HostMetric table, applying deduplication and showing real historical usage for renewal guidance purposes.
				
					To generate this report, set the report type to METRICS_UTILITY_REPORT_TYPE=RENEWAL_GUIDANCE.
				
						This report is currently a tech preview solution. It is designed to provide more information than automation controller when built in the awx-manage host_metric command.
					
12.5.6.1. Storage and invocation
						The RENEWAL_GUIDANCE report supports the use of only local disk storage to store the report results. This report does not have a gather data step. It reads directly from the controller HostMetric table, so it does not store any raw data under the METRICS_UTILITY_SHIP_PATH.
					
12.5.6.2. Showing ephemeral usage
						The RENEWAL_GUIDANCE report has the capability to list additional sheets with ephemeral usage if the –ephemeral parameter is provided. Using the parameter --ephemeral=1month, you can define ephemeral nodes as any managed node that has been automated for a maximum of one month, then never automated again. Using this parameter, the total ephemeral usage of the 12-month period is computed as maximum ephemeral nodes used over all 1-month rolling date windows. This sheet is also added into the report.
					
Will generate report for 12 months back with epehemeral nodes being nodes automated for less than 1 month.
# Will generate report for 12 months back with epehemeral nodes being nodes
# automated for less than 1 month.
metrics-utility build_report --since=12months --ephemeral=1month12.5.6.3. Selecting a date range for your RENEWAL_GUIDANCE report
						The RENEWAL_GUIDANCE report requires a since parameter as the parameter is not supported due to the nature of the HostMetric data and is always set to now. To override a report date range that has already been built, use parameter –force with the command. For more information, see the following examples:
					
12.5.7. CCSP
					CCSP is the original report format. It does not include many of the customization of CCSPv2, and it is intended to be used only for the CCSP partner program.
				
12.5.8. Optional collectors for gather command
					You can use the following optional collectors for the gather command:
				
- main_jobhostsummary- 
									If present by default, this incrementally collects the main_jobhostsummarytable from the automation controller database, containing information about jobs runs and managed nodes automated.
 
- 
									If present by default, this incrementally collects the 
- main_host- 
									This collects daily snapshots of the main_hosttable from the automation controller database and has managed nodes/hosts present across automation controller inventories,
 
- 
									This collects daily snapshots of the 
- main_jobevent- 
									This incrementally collects the main_jobeventtable from the automation controller database and contains information about which modules, roles, and ansible collections are being used.
 
- 
									This incrementally collects the 
- main_indirectmanagednodeaudit - 
									This incrementally collects the main_indirectmanagednodeaudittable from the automation controller database and contains information about indirectly managed nodes,
 
- 
									This incrementally collects the 
Example with all optional collectors
# Example with all optional collectors
export METRICS_UTILITY_OPTIONAL_COLLECTORS="main_host,main_jobevent,main_indirectmanagednodeaudit"12.5.9. Optional sheets for build_report command
					You may use the following optional sheets for the build_report command:
				
- ccsp_summary- This is a landing page specifically for partners under the CCSP program. It shows managed node usage by each automation controller organization.
- This report takes additional parameters to customize the summary page. For more information, see the following example: - Copy to Clipboard Copied! - Toggle word wrap Toggle overflow 
 
- managed_nodes- This is a deduplicated list of managed nodes automated by automation controller.
 
- indirectly_managed_nodes- This is a deduplicated list of indirect managed nodes automated by automation controller.
 
- inventory_scope- This is a deduplicated list of managed nodes present across all inventories of automation controller.
 
- usage_by_collections- This is a list of Ansible collections used in automation controller job runs.
 
- usage_by_roles- 
									This is a list of roles used in automation controller job runs. *usage_by_modules
- This is a list of modules used in automation controllerjob runs.
 
- 
									This is a list of roles used in automation controller job runs. *
Example with all optional sheets
# Example with all optional sheets
export METRICS_UTILITY_OPTIONAL_CCSP_REPORT_SHEETS='ccsp_summary,managed_nodes,indirectly_managed_nodes,inventory_scope,usage_by_collections,usage_by_roles,usage_by_modules'12.5.10. Selecting a date range for your CCSP report
The default behavior of this report is to build a report for the previous month. The following examples describe how to override this default behavior to select a specific date range for your report: