2
votes

We are trying to collect some reports about how our API is used by customers. We use Azure API Management, and I can see that in API Management portal such data exist, I can see what I need to know going to portal in Admin>Activity section. Like how many calls individual user made for particular API, and I can filter it by date.

Question: How to get this data out of the system. Preferable using some API to have continues export. But, even manually?

2
I've used Stream Analytics before to export data from storage account in to sql database for example: docs.microsoft.com/en-us/azure/application-insights/…Milen

2 Answers

3
votes

The API to get request level analytics is GET https://management.azure.com/subscriptions/subid/resourceGroups/rg1/providers/Microsoft.ApiManagement/service/apimService1/reports/byRequest?$filter=timestamp ge datetime'2017-06-01T00:00:00' and timestamp le datetime'2017-06-04T00:00:00'&api-version=2017-03-01

The response includes the ApiId, OperationId, UserId, his subscriptionId to the Product etc, which might be beneficial to you.

{
    "value": [
     {
      "apiId": "/apis/5931a75ae4bbd512a88c680b",
      "operationId": "/apis/5931a75ae4bbd512a88c680b/operations/-",
      "productId": "/products/-",
      "userId": "/users/1",
      "method": "GET",
      "url": "https://apimService1.azure-api.net/echo/resource?param1=sample",
      "ipAddress": "207.xx.155.xx",
      "responseCode": 404,
      "responseSize": 405,
      "timestamp": "2017-06-03T00:17:00.1649134Z",
      "cache": "none",
      "apiTime": 221.1544,
      "serviceTime": 0,
        "apiRegion": "East Asia",
      "subscriptionId": "/subscriptions/5600b59475ff190048070002",
        "requestId": "63e7119c-26aa-433c-96d7-f6f3267ff52f",
      "requestSize": 0
      }]
  }

Check this out Reports_ByRequest

Also, check the Azure monitor integration

2
votes

For those who are looking for aggregate usage by user (perhaps for monetization) - there is a "byUser" endpoint as well. The request is structured like below:

https://{api-service-name}.management.azure-api.net/subscriptions/{subscription}/resourceGroups/{resource-group}/providers/Microsoft.ApiManagement/service/{api-service-name}/reports/byUser?$filter=timestamp ge datetime'2019-12-01T00:00:00' and timestamp le datetime'2019-12-04T00:00:00'&api-version=2017-03-01

The documentation says to make a request to "https://management.azure-api.net/[...]" but I had to prepend the resource name like in the request above.

And the response:

{
  "value": [
    {
      "name": "Administrator",
      "userId": "/users/1",
      "callCountSuccess": 13,
      "callCountBlocked": 1,
      "callCountFailed": 0,
      "callCountOther": 0,
      "callCountTotal": 14,
      "bandwidth": 11019,
      "cacheHitCount": 0,
      "cacheMissCount": 0,
      "apiTimeAvg": 1015.7607923076923,
      "apiTimeMin": 330.3206,
      "apiTimeMax": 1819.2173,
      "serviceTimeAvg": 957.094776923077,
      "serviceTimeMin": 215.24,
      "serviceTimeMax": 1697.3612
    },
    {
      "name": "Samir Solanki",
      "userId": "/users/56eaec62baf08b06e46d27fd",
      "callCountSuccess": 0,
      "callCountBlocked": 0,
      "callCountFailed": 0,
      "callCountOther": 0,
      "callCountTotal": 0,
      "bandwidth": 0,
      "cacheHitCount": 0,
      "cacheMissCount": 0,
      "apiTimeAvg": 0,
      "apiTimeMin": 0,
      "apiTimeMax": 0,
      "serviceTimeAvg": 0,
      "serviceTimeMin": 0,
      "serviceTimeMax": 0
    },
    {
      "name": "Anonymous",
      "userId": "/users/54c800b332965a0035030000",
      "callCountSuccess": 0,
      "callCountBlocked": 0,
      "callCountFailed": 0,
      "callCountOther": 0,
      "callCountTotal": 0,
      "bandwidth": 0,
      "cacheHitCount": 0,
      "cacheMissCount": 0,
      "apiTimeAvg": 0,
      "apiTimeMin": 0,
      "apiTimeMax": 0,
      "serviceTimeAvg": 0,
      "serviceTimeMin": 0,
      "serviceTimeMax": 0
    }
  ],
  "count": 3,
  "nextLink": ""
}

If you need to filter by type of request or API, you can do that as well - List by User