Skip to content

Commit 1a71640

Browse files
Merge pull request #294080 from dlepow/trscript
[APIM] Script for tracing through REST API
2 parents cdeb086 + b15256a commit 1a71640

File tree

1 file changed

+76
-9
lines changed

1 file changed

+76
-9
lines changed

articles/api-management/api-management-howto-api-inspector.md

Lines changed: 76 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ Follow these steps to trace an API request in the test console in the portal. Th
7474

7575
The following high level steps are required to enable tracing for a request to API Management when using `curl`, a REST client such as Visual Studio Code with the REST Client extension, or a client app. Currently these steps must be followed using the [API Management REST API](/rest/api/apimanagement):
7676

77-
1. Obtain a token credential for tracing.
77+
1. Obtain a debug token for tracing.
7878
1. Add the token value in an `Apim-Debug-Authorization` request header to the API Management gateway.
7979
1. Obtain a trace ID in the `Apim-Trace-Id` response header.
8080
1. Retrieve the trace corresponding to the trace ID.
@@ -85,7 +85,7 @@ Detailed steps follow.
8585
> * These steps require API Management REST API version 2023-05-01-preview or later. You must be assigned the Contributor or higher role on the API Management instance to call the REST API.
8686
> * For information about authenticating to the REST API, see [Azure REST API reference](/rest/api/azure).
8787
88-
1. **Obtain a token credential** - Call the API Management gateway's [List debug credentials](/rest/api/apimanagement/gateway/list-debug-credentials) API. In the URI, enter "managed" for the instance's managed gateway in the cloud, or the gateway ID for a self-hosted gateway. For example, to obtain trace credentials for the instance's managed gateway, use a request similar to the following:
88+
1. **Obtain a debug token** - Call the API Management gateway's [List debug credentials](/rest/api/apimanagement/gateway/list-debug-credentials) API. In the URI, enter "managed" for the instance's managed gateway in the cloud, or the gateway ID for a self-hosted gateway. For example, to obtain trace credentials for the instance's managed gateway, use a request similar to the following:
8989

9090
```http
9191
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/gateways/managed/listDebugCredentials?api-version=2023-05-01-preview
@@ -96,12 +96,22 @@ Detailed steps follow.
9696
```json
9797
{
9898
"credentialsExpireAfter": PT1H,
99-
"apiId": ""/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiName}",
99+
"apiId": ""/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ApiManagement/service/{serviceName}/apis/{apiId}",
100100
"purposes": ["tracing"]
101101
}
102102
```
103+
104+
> [!NOTE]
105+
> The `apiId` can only be pulled from the full resource ID, not the name displayed in the portal.
106+
107+
Get apiId:
108+
109+
110+
```azurecli
111+
az apim api list --resource-group <resource-group> --service-name <service-name> -o table
112+
```
103113
104-
The token credential is returned in the response, similar to the following:
114+
The debug credential is returned in the response, similar to the following:
105115
106116
```json
107117
{
@@ -112,18 +122,20 @@ Detailed steps follow.
112122
1. **Add the token value in a request header** - To enable tracing for a request to the API Management gateway, send the token value in an `Apim-Debug-Authorization` header. For example, to trace a call to the Petstore API that you imported in a previous tutorial, you might use a request similar to the following:
113123
114124
```bash
115-
curl -v https://apim-hello-world.azure-api.net/pet/1 HTTP/1.1 -H "Ocp-Apim-Subscription-Key: <subscription-key>" -H "Apim-Debug-Authorization: aid=api-name&......."
125+
curl -v https://apim-hello-world.azure-api.net/pet/1 HTTP/1.1 \
126+
-H "Ocp-Apim-Subscription-Key: <subscription-key>" \
127+
-H "Apim-Debug-Authorization: aid=api-name&......."
116128
```
117129
118-
1. Depending on the token, the response contains one of the following headers:
119-
* If the token is valid, the response includes an `Apim-Trace-Id` header whose value is the trace ID, similar to the following:
130+
1. **Evaluate the response** - The response can contain one of the following headers depending on the state of the debug token:
131+
* If the debug token is valid, the response includes an `Apim-Trace-Id` header whose value is the trace ID, similar to the following:
120132
121133
```http
122134
Apim-Trace-Id: 0123456789abcdef....
123135
```
124136
125-
* If the token is expired, the response includes an `Apim-Debug-Authorization-Expired` header with information about expiration date.
126-
* If the token was obtained for a different API, the response includes an `Apim-Debug-Authorization-WrongAPI` header with an error message.
137+
* If the debug token is expired, the response includes an `Apim-Debug-Authorization-Expired` header with information about expiration date.
138+
* If the debug token was obtained for a different API, the response includes an `Apim-Debug-Authorization-WrongAPI` header with an error message.
127139
128140
1. **Retrieve the trace** - Pass the trace ID obtained in the previous step to the gateway's [List trace](/rest/api/apimanagement/gateway/list-trace) API. For example, to retrieve the trace for the managed gateway, use a request similar to the following:
129141
@@ -142,6 +154,61 @@ Detailed steps follow.
142154
The response body contains the trace data for the previous API request to the gateway. The trace is similar to the trace you can see by tracing a call in the portal's test console.
143155
144156
157+
### Example `.http` file for VS Code REST Client extension
158+
159+
To help automate these steps with the [Visual Studio Code REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) extension, you can use the following example `.http` file:
160+
161+
```http
162+
@subscriptionId = // Your subscription ID
163+
@resourceGroup = // Your resource group
164+
@apimName = // Your API Management service name
165+
@clientId = // Client ID from an app registration for authentication
166+
@clientSecret = // Client secret from app registration
167+
@externalHost = // The host name of the App Gateway or the fully qualified gateway URL
168+
@subscriptionKey = // API Management subscription key
169+
@apiEndPoint = // API URL
170+
@requestBody = // Data to send
171+
@tenantId = // Tenant ID
172+
173+
POST https://login.microsoftonline.com/{{tenandId}}/oauth2/token
174+
content-type: application/x-www-form-urlencoded
175+
176+
grant_type=client_credentials&client_id={{clientId}}&client_secret={{clientSecret}}&resource=https%3A%2F%2Fmanagement.azure.com%2F
177+
178+
###
179+
@authToken = {{login.response.body.$.access_token}}
180+
###
181+
# @name listDebugCredentials
182+
POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.ApiManagement/service/{{apimName}}/gateways/managed/listDebugCredentials?api-version=2023-05-01-preview
183+
Authorization: Bearer {{authToken}}
184+
Content-Type: application/json
185+
{
186+
"credentialsExpireAfter": "PT1H",
187+
"apiId": "/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.ApiManagement/service/{{apimName}}/apis/{{apiId}}",
188+
"purposes": ["tracing"]
189+
}
190+
191+
###
192+
@debugToken = {{listDebugCredentials.response.body.$.token}}
193+
194+
###
195+
# @name callApi
196+
curl -k -H "Apim-Debug-Authorization: {{debugToken}}" -H 'Host: {{externalHost}}' -H 'Ocp-Apim-Subscription-Key: {{subscriptionKey}}' -H 'Content-Type: application/json' '{{apiEndPoint}}' -d '{{requestBody}}'
197+
198+
###
199+
@traceId = {{callApi.response.headers.Apim-Trace-Id}}
200+
201+
###
202+
# @name getTrace
203+
POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resourceGroup}}/providers/Microsoft.ApiManagement/service/{{apimName}}/gateways/managed/listTrace?api-version=2024-06-01-preview
204+
Authorization: Bearer {{authToken}}
205+
Content-Type: application/json
206+
207+
{
208+
"traceId": "{{traceId}}"
209+
}
210+
```
211+
145212
For information about customizing trace information, see the [trace](trace-policy.md) policy.
146213

147214
## Next steps

0 commit comments

Comments
 (0)