Getting Started
Cisco Cloud Observability exposes various APIs for customizing and extending its features.
Base URI
Every API request begins with this base URI:
Copyhttps://{tenantName}.observe.appdynamics.com/cloud/v1
Authentication
The Cisco Cloud Observability Connections API uses Open Authentication 2.0 (OAuth2) token-based authentication. Refer to Authentication for details on how to generate an OAuth token.
Cisco AppDynamics API requests adhere to a standard OAuth2 request format. You need a Service Principal and a valid JSON Web Token (JWT) to use this API. Service Principals are identities, represented as code, used by created applications, services, and automation tools to access specific resources. See Authentication.
Connections API
The Cisco Cloud Observability Connections API endpoints are listed in the following sections. To analyze the response and troubleshoot any problems, see Errors and Troubleshooting.
Get Connections
List All Connections
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections'
List AWS Connections
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections?filter=type%20eq%20%22aws%22'
List Azure Connections
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections?filter=type%20eq%20%azure%22'
Filter Connections
https://{tenantName}.observe.appdynamics.com/cloud/v1/connections
Two fields can be used to filter the connections:
type
— which is the cloud provider type of connection. ex: aws, azuredisplayName
— name of the connection
There are three ways to filter connections:
eq—equals
sw—starts with
co—contains
The minimum length of the search string must be 3 characters.
Cisco AppDynamics supports compound querying with a word (currently, no other logical operators are supported)
If you do not specify any filter, all the connections are returned.
List Connections Filtered by displayName Using Equals
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections?filter=%20displayName%20eq%20%22aws-sim-monitoring%22'
List Connections Filtered by displayName Using contains
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections?filter=%20displayName%20co%20%22azure%22'
List Connections Filtered by displayName Using startsWith
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections?filter=displayName%20sw%20%22azure%22'
Get a Connection by Connection ID
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}'
Create Connections
Create AWS Access Key Connection
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections' \
--data-raw '{
"displayName": "access-key-test",
"description": "Description for this AWS access key connection without assigned configurationId",
"type": "aws",
"details": {
"accessKeyId": "{access key ID}",
"secretAccessKey": "{secret access key}",
"accessType": "access_key"
}
}'
Create AWS Role Delegation Connection
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections' \
--data-raw '{
"displayName": "role-delegation-key-test",
"description": "Description for this AWS role delegation connection without assigned configurationId",
"type": "aws",
"details": {
"accountId": "{aws account id}",
"accessType": "role_delegation"
}
}'
Create Azure Connection
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections' \
--data-raw '{
"type": "azure",
"displayName": "Azure connection",
"description": "azure test",
"details": {
"clientId": "{client Id}",
"clientSecret": "{client secret}",
"tenantId": "{tenant Id}",
"subscriptionId": "{subscription Id}"
}
}'
Create Connection with Existing ConfigurationId
You must update the configuration ID of the connection to start data collection. Use the configurationId
created in Create Configurations.
By default, the connection is in the ACTIVE state if the state is not specified.
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections' \
--data-raw '{
"type": "azure",
"displayName": "Azure connection",
"description": "azure test",
"details": {
"clientId": "{client Id}",
"clientSecret": "{client secret}",
"tenantId": "{tenant Id}",
"subscriptionId": "{subscription Id}"
},
"configurationId": "{configuration Id}"
}'
Create Connection in INACTIVE State
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections' \
--data-raw '{
"type": "azure",
"displayName": "Azure connection",
"description": "azure test",
"details": {
"clientId": "{client Id}",
"clientSecret": "{client secret}",
"tenantId": "{tenant Id}",
"subscriptionId": "{subscription Id}"
},
"configurationId": "{configuration Id}",
"state": "INACTIVE"
}'
Update Connections
Editable and Immutable Fields Table
This table shows editable and immutable fields of the PATCH connections request:
Connection type | Field | Editable? | Notes |
---|---|---|---|
AWS Access Key | Connection Name | YES | |
Description | YES | ||
Access key | YES | AuthN: Validate with already persisted accountId for the connection | |
Secret | YES | AuthN: Validate with already persisted accountId for the connection | |
Type | NO | ||
Access Type | NO | ||
AWS Role Delegation | Connection Name | YES | |
Description | YES | ||
Account ID | NO | ||
Role Name | YES | AuthN | |
External ID | NO | ||
Type | NO | ||
Access Type | NO | ||
Azure | Connection Name | YES | |
Description | YES | ||
ClientId | YES | AuthN | |
ClientSecret | YES | AuthN | |
TenantId | NO | ||
Subscription ID | NO | ||
Type | NO |
Note: You must update the configurations ID of the connection to start data collection.
Any combination of editable fields can be given in the PATCH request.
Update AWS Access Key Connection
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "aws roleD connection",
"description": "description",
"details": {
"roleName" : "{aws role name}"
}
}'
Update AWS Role Delegation Connection
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/48a70cef-b04c-4cd0-9393-8ebd9c9244a7' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "aws roleD connection",
"description": "description",
"details": {
"roleName" : "roleConfigured"
}
}'
Update Azure Connection
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "Azure connection",
"description": "azure test",
"details": {
"clientId": "{client Id}",
"clientSecret": "{client secret}",
"tenantId": "{tenant Id}",
"subscriptionId": "{subscription Id}"
},
"configurationId": "{configuration Id}"
}'
Enable Connection
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"state":"ACTIVE"
}'
Disable Connection
Use these API endpoints to get a list of cloud services supported by Cloud Native Application Observability.
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"state":"INACTIVE"
}'
Configure the Connection
You must update the configuration ID of the connection to enable data collection. Use the configuration ID created in Create Configurations: Create AWS Configuration
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"configurationId":"{configuration Id}"
}'
Delete Connections
Delete a Connection by Connection ID
Copycurl --location -g --request DELETE 'https://{tenantName}.observe.appdynamics.com/cloud/v1/connections/{connection Id}' \
--header 'Content-Type: application/json'
Note When you delete a connection, the corresponding configuration (if associated) and not used by any other connection also gets deleted.
Configurations API
The configuration API endpoints are listed in the following sections:
Get Configurations
List All Configurations
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations'
List AWS Configurations
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations?filter=type%20eq%20%22aws%22'
List Azure Configurations
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations?filter=type%20eq%20%22azure%22'
Filter Configurations
Copyhttps://{tenantName}.observe.appdynamics.com/cloud/v1/configurations
Two fields can be used to filter the connections:
type
— which is the cloud provider type of connection. For example, AWS and Azure.displayName
— name of the connection
There are three ways to filter connections:
eq—equals
sw—starts with
co—contains
The minimum length of the search string must be 3 characters.
Cloud Native Application Observability supports compound querying with a word (currently, no other logical operators are supported)
If you do not specify any filter, all the connections are returned.
List Configurations Filtered by displayName with Equals
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations?filter=%20displayName%20eq%20%22example%20test%22'
List Configurations Filtered by displayName with Contains
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations?filter=%20displayName%20co%20%22example%20test%22'
List Configurations Filtered by displayName with StartsWith
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations?filter=displayName%20sw%20%22example%22'
The minimum length of the search string must be 3 characters.
Cloud Native Application Observability supports compound querying with a word (currently, no other logical operators are supported)
If you do not specify any filter, all the connections are returned.
Get a Configuration by Configuration ID
https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/0147f343-583c-4635-9028-1ff64693c672
Copycurl --location -g --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}' \
--header 'Content-Type: application/json' \
Create Configurations
Create AWS Configuration
https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "aws configuration test",
"description": "",
"type": "aws",
"details": {
"regions": [
"us-east-1",
"us-east-2"
],
"polling": {
"interval": 5,
"unit": "minute"
},
"services": [
{
"name": "ec2",
"polling": {
"interval": 5,
"unit": "minute"
}
}
]
}
}'
Create Azure Configuration
Copycurl --location -g --request POST 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations' \
--header 'Content-Type: application/json' \
--data-raw '
{ "displayName": "azure-configuration-test", "description": "A description for this connection/configuration", "details": { "polling": { "interval": 5, "unit": "minute" }, "services": [ { "name": "vm", "polling": { "interval": 5, "unit": "minute" }, "tagFilter": "tags(service)" } ], "regions": [ "eastus" ], "resourceGroups": [], "tagFilter": "tags(env)" } }'
Update Configurations
Update a Configuration by Configuration ID
The type
field is immutable in the configuration payload.
https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}
Update AWS Configuration
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "aws config test",
"description": "",
"details": {
"regions": [
"us-east-1",
"us-west-2"
],
"polling": {
"interval": 5,
"unit": "minute"
},
"importTags": {
"enabled": true,
"excludedKeys": ["tag1"]
},
"services": [
{
"name": "elb",
"polling": {
"interval": 5,
"unit": "minute"
}
}
]
}
}'
Update Azure Configuration
Copycurl --location -g --request PATCH 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}' \
--header 'Content-Type: application/json' \
--data-raw '{
"displayName": "azure-configuration-test",
"description": "A description for this connection/configuration",
"details": {
"polling": {
"interval": 5,
"unit": "minute"
},
"services": [
{
"name": "vm",
"polling": {
"interval": 5,
"unit": "minute"
},
"importTags": { "enabled": true, "excludedKeys": ["tag1"] },
}
],
"regions": [
"eastus"
],
"resourceGroups": []
}
}'
Delete Configurations
Delete a Configuration by Configuration ID
https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}
Copycurl --location -g --request DELETE 'https://{tenantName}.observe.appdynamics.com/cloud/v1/configurations/{configuration Id}'
Resources API
The Resource API endpoints are listed in the following sections:
GET Regions
Get AWS Regions
https://{tenantName}.observe.appdynamics.com/cloud/v1/regions?type=aws
Copycurl --location --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/regions?type=aws' \
--header 'Authorization: Bearer token-generated in auth step'
Get Azure Regions
https://{tenantName}.observe.appdynamics.com/cloud/v1/regions?type=azure
Copycurl --location --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/regions?type=azure' \
--header 'Authorization: Bearer token-generated in auth step'
GET Services: Get All Supported Hosting Services
Get AWS Services
https://{tenantName}.observe.appdynamics.com/cloud/v1/services?type=aws
Copycurl --location --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/services?type=aws' \
--header 'Authorization: Bearer token-generated in auth step'
Get Azure Services
https://{tenantName}.observe.appdynamics.com/cloud/v1/services?type=azure
Copycurl --location --request GET 'https://{tenantName}.observe.appdynamics.com/cloud/v1/services?type=azure' \
--header 'Authorization: Bearer token-generated in auth step'