Virtual Appliance CLI
Use the Virtual Appliance command-line interface to administer services, datastores, platform operations, licenses, applications, and diagnostics.
The appdcli utility is included with the Virtual Appliance package. Commands are hierarchical. Select a top-level command, its required child command, and any arguments or options.
Syntax
appdcli <command> <child-command> [options] [arguments]
Square brackets identify optional input. Angle brackets identify values that you supply. Do not enter the brackets.
To display top-level help, run appdcli --help. To display help for a command, run appdcli <command> --help.
Command categories
Service management commands
Start, stop, synchronize, upgrade, and check the health of Virtual Appliance services.
Start and synchronize services
appdcli start <service> [profile]
appdcli sync <service> [profile]
Use one of the following service values:
| Value | Description |
|---|---|
all |
All service groups. |
appd |
Core Splunk AppDynamics services. |
aiops |
Anomaly Detection and Root Cause Analysis services. |
secureapp |
Cisco Secure Application services. |
atd |
Automated Transaction Diagnostics services. |
ai-insights |
AI Insights and AI Assistant services. |
log-connect |
Splunk Log Connect services. |
mcp |
Model Context Protocol services. |
The optional profile value is small, medium, large, or xlarge.
Stop services
appdcli stop <service>
Use any service value listed for start except a profile. Use appdcli stop operators to stop Kubernetes operators.
Display status
appdcli status application [--node-url <url>]
appdcli status infrastructure
The application value displays application-service health. Use the --node-url option to override the base URL for application health checks. The infrastructure value displays infrastructure-component status.
Update a Virtual Appliance
appdcli upgrade <patch-file> [--ssh-user <user>] [-y|--yes]
The update package must have the .patch extension. The default SSH user is appduser. The command previews the update contents and requests confirmation unless you specify --yes. For more information, see Update Virtual Appliance with the Patch.
Datastore and infrastructure commands
Display datastore health, recover the MySQL cluster, list Kafka topics, and inspect registry images.
MySQL
appdcli mysql status [--extended] [--watch <seconds>] [--strict]
appdcli mysql restore
| Option | Description |
|---|---|
| --extended | Display detailed status, performance, configuration, and replication diagnostics. |
| --watch | Refresh continuously at the specified interval. The minimum is 2 seconds. |
| --strict | Return a failure exit code when an available cluster is degraded. |
appdcli mysql restore to recover the MySQL cluster from an outage. This operation is separate from datastore backups under appdcli backup mysql.
PostgreSQL
appdcli postgres status [--extended] [--sample-seconds <seconds>] [--top <count>] [--show-query-text]
| Option | Description |
|---|---|
| --extended | Display active work, top query IDs, table health, CPU throttling, configuration, and replication diagnostics. |
| --sample-seconds | Set the CPU-throttling sample duration. The default is 10 seconds and the minimum is 2 seconds. |
| --top | Set the maximum number of queries and tables. The default is 10. |
| --show-query-text | Include truncated SQL text. Query IDs are displayed by default. |
Kafka
appdcli kafka status [--extended] [--sample-seconds <seconds>] [--top <count>] [--topic <name>]
appdcli kafka list-topics <application-credential-id>
Extended status includes topic growth, consumer lag, retention, and configuration. The sampling default is 10 seconds and the minimum is 2 seconds. Use --top to limit displayed topics and consumer groups, or --topic to analyze one topic.
For list-topics, use an application credential identifier such as aiops or secapp.
Container registry
appdcli registry list-images
This command displays the images and tags in the local container registry.
Platform operations commands
Back up and restore the platform, manage service placement, and audit or rotate certificates.
Platform backup and restore
appdcli platform backup
appdcli platform restore <filename>
Create a platform backup before an upgrade. Supply the platform backup file when you restore.
Scale platform services
appdcli platform scale out --node <name-or-IP> [--node <name-or-IP> ...] --service <service>
appdcli platform scale in --node <name-or-IP> [--node <name-or-IP> ...] --service <service>
Repeat --node or provide a comma-separated node list. Supported service values are es and elasticsearch.
Dedicate a Controller node
appdcli platform dedicate-node --node <name-or-IP> --service controller
appdcli platform controller-info
The dedicate-node command dedicates a ready, schedulable node to the Controller service. The controller-info command displays Controller placement, pod, and readiness details.
Manage certificates
appdcli platform certificates audit
appdcli platform certificates rotate-leaf
appdcli platform certificates rotate-root-ca
The audit command reports expiration dates and severity for cert-manager certificates. In hybrid mode, it also reports customer-managed external certificates as read-only.
The rotate-leaf command rotates cert-manager leaf certificates but skips trust anchors. Services continue to hold old certificates in memory until they are restarted. The command asks whether to stop and start installed services.
After root-CA rotation, run appdcli platform certificates rotate-leaf so that leaf certificates are signed by the new CA. Distribute the new root CA and ingress certificate to every external truststore. For more information, see Manage Virtual Appliance Certificates.
Datastore backup commands
Manage Elasticsearch, PostgreSQL, and MySQL backups and restores.
Elasticsearch snapshots
| Syntax | Description |
|---|---|
appdcli backup elasticsearch create-fs-repo <repository> |
Create a file-system repository. |
appdcli backup elasticsearch create-s3-repo <repository> |
Create an Amazon S3 repository. |
appdcli backup elasticsearch delete-repo <repository> |
Delete a repository. |
appdcli backup elasticsearch list-repos |
List repositories. |
appdcli backup elasticsearch create-snapshot <repository> <snapshot> [indices ...] |
Create a snapshot. Omit indices to use the command default. |
appdcli backup elasticsearch delete-snapshot <repository> <snapshot> |
Delete a snapshot. |
appdcli backup elasticsearch list-snapshots <repository> |
List snapshots in a repository. |
appdcli backup elasticsearch restore-snapshot <repository> <snapshot> [indices ...] |
Restore a snapshot. Specify indices to restore only those indices. |
PostgreSQL snapshots
appdcli backup postgres create-snapshot <repository>
appdcli backup postgres restore-snapshot <repository>
MySQL XtraBackup
| Syntax | Description |
|---|---|
appdcli backup mysql full [--pod <pod>] |
Create a full backup. The default pod is appd-mysql-0. |
appdcli backup mysql incr [--pod <pod>] |
Create an incremental backup. Use the same pod that was used for the full backup. |
appdcli backup mysql restore [--from-chain <timestamp>] [--from-incr <timestamp|full>] [--staging-path <path>] |
Restore a backup chain. The latest chain and all incrementals are used by default. Manual cluster recovery is required afterward. |
appdcli backup mysql list |
List XtraBackup resources. |
appdcli backup mysql delete <backup-name> |
Delete an XtraBackup resource. |
appdcli backup mysql list-chains |
List backup chains, sizes, and incremental backups. |
appdcli backup mysql delete-chain <timestamp> [--force] |
Delete a backup chain. Use --force to allow deletion of the latest chain without confirmation. |
create-snapshot <repository> and restore-snapshot <repository> <snapshot> are deprecated. Use XtraBackup commands for new backups.
For more information, see Back Up and Restore the Virtual Appliance.
Component, application, and diagnostic commands
Bootstrap components, manage licenses and credentials, administer the Controller, and collect support information.
Bootstrap components
| Syntax | Description |
|---|---|
appdcli bootstrap core |
Bootstrap Core Splunk AppDynamics components. |
appdcli bootstrap hybrid |
Bootstrap a hybrid deployment. |
appdcli bootstrap authn |
Bootstrap authentication components. |
appdcli bootstrap atd |
Bootstrap Automated Transaction Diagnostics components. |
appdcli bootstrap log-connect |
Bootstrap Splunk Log Connect components. |
Manage licenses
appdcli license controller <license-file>
appdcli license eum <license-file>
To apply a MAC address-based Controller license to a specific cluster node, set appdController.nodeLocked to true in the global.yaml.gotmpl file before applying the license.
Manage access keys and API tokens
appdcli access-key controller <key>
appdcli access-key eum <key>
appdcli access-key mcp
The Controller and EUM commands require the new key as an argument. The MCP command displays the current Model Context Protocol API token and asks whether to rotate it. If you rotate the token, the command displays the new token and services pick it up automatically.
Manage the Controller
| Syntax | Description |
|---|---|
appdcli controller restart |
Restart the Controller. |
appdcli controller sync-passwords |
Synchronize Controller passwords from encrypted secrets. Use this command only for non-hybrid Controller deployments. |
appdcli controller list-java [--jre-home <directory>] |
List detected Java home directories or inspect a custom JRE directory. |
appdcli controller actions-list |
List custom actions. |
appdcli controller actions-sync |
Reset and synchronize custom actions after manual changes. |
appdcli controller actions-verify [--directory <directory>] |
Verify custom-action XML files and directory mappings. |
appdcli controller actions-run [action] [--all] [--print-xml] [--print-actions] |
Run custom actions, display the custom-action XML, or display action names. |
appdcli controller actions-add <directory> [script] [--bulk] [--no-indent] |
Add one action or use --bulk to add several. The --no-indent option leaves custom.xml unformatted. |
appdcli controller actions-delete [action] [--all] |
Delete one custom action or all custom actions. |
Collect a support bundle
appdcli support-bundle
The command collects diagnostic information across cluster nodes as the appduser SSH user and requests a password for each node.
Secure Application commands
Pass diagnostic, configuration, data-feed, and test-agent commands to Cisco Secure Application.
appdcli secureapp <command> [arguments]
Available commands
| Command | Description |
|---|---|
| checkAgentAuth | Verify agent authentication by using the agent account key. |
| checkApi | Check the Secure Application API. |
| checkAuthToken | Verify that the Controller can create authentication tokens for the admin user. |
| checkDeps | Check Secure Application dependencies before installation. |
| checkHybridControllerTls | Check the hybrid Controller TLS connection for the Secure Application client. |
| checkHybridMysqlTls | Check the hybrid MySQL TLS connection for the Secure Application client. |
| checkIngressSAN | Check ingress-certificate SANs used for agent and user authentication. |
| debugReport | Collect logs and Kubernetes resources, excluding secrets, for offline debugging. |
| getSecureApplications | Display the default Secure Application enablement setting. |
| health | Run dependency checks and additional diagnostic tests. |
| insecureApplications | Turn off Secure Application by default for applications. |
| licenseCheck | Check that the license contains Secure Application Units. |
| numAgentReports | Display the number of processed Agent Reports. |
| restartFeedProcessing | Restart data-feed processing to make newly uploaded data available sooner. |
| secureApplications | Enable Secure Application by default for applications. |
| setDownloadPortalCredentials | Set credentials for automatic daily data-feed downloads. |
| setFeedKey | Set the license key for an uploaded air-gapped data feed. |
| showConfig | Display the observed Secure Application configuration. |
| startTestAgent | Start the test-agent Java application with active APM and Secure Application agents. |
| stopTestAgent | Stop the test-agent Java application. |
| uploadFeed | Upload an air-gapped data feed from the local file system. |
| versions | Display version information for troubleshooting. |
Command examples
appdcli secureapp setDownloadPortalCredentials <username>
appdcli secureapp setFeedKey <feed-key-path-or-->
appdcli secureapp uploadFeed <feed-file>
For setFeedKey, specify a file path or use - to read the key from standard input. The Secure Application utility handles password entry for setDownloadPortalCredentials.
appdcli start secureapp.
Troubleshoot Virtual Appliance CLI messages
Interpret expected messages from licensing and Secure Application commands.
A Virtual Appliance CLI command reports an error or uses unexpected certificate wording.
The message can describe an optional component that is not installed or a known wording defect.
- If Controller license processing reports Deployment 'onprem-proxy-server' not found in namespace 'cisco-secureapp'. Check Hybrid Mode. and Secure Application is not installed, ignore the message.
- If checkDeps reports controller endpoint not found in hybrid mode, ignore the message.
- In Virtual Appliance 25.10, checkHybridMysqlTls can report Failed ingress cert.... Interpret the message as Failed MySQL cert.