Measuring average response time from downstream Restful API's - azure

We have a Web API written in ASP.Net core 3.1 which calls 5 different downstream RESTful API's.
P50 of our API is greater than 5 seconds which is huge. This Web API is hosted as an Azure App Service and logs are shipped on Azure App Insights.
We would like to know what are the best tools or framework's or any another way in Azure monitoring or kql query which can be used to measure average response time or throughput of those 5 different downstream RESTful API's. We would like to identify which downstream API is downgrading the overall Web API performance
We have tried Azure App insights. It gives time taken by individual request but haven't found anything which can help measure average response time of downstream API's

Downstream rest api calls are recorded as dependencies of type HTTP in application insights. You can correlate them with the api request using the operation_Id.
Try a query like this:
requests
| project timestamp, url, requestDuration = duration, operation_Id
| join kind=inner (dependencies | where ['type'] == "HTTP" | project dependencytimestamp = timestamp, operation_Id, dependencyDuration = duration, dependencyUrl = data) on operation_Id
| project timestamp, operation_Id, url, requestDuration, dependencytimestamp, dependencyUrl, dependencyDuration

Related

Is there a management API for Standard Logic Apps?

There is a Logic Apps management API (https://learn.microsoft.com/en-us/rest/api/logic/workflows)
As far as I understood you cannot use the service to access Standard Logic Apps. Is there a work around? Basically I need to retrieve a few days of action outputs of my running workflow. TIA
Basically I need to retrieve a few days of action outputs of my running workflow.
Like mentioned by #Thomas, One of the workarounds is to enable application insights from your logic apps and then retrieve the action outputs of your workflow in log analytics using KQL.
In Application Insights, I'm using the below query to get the information about each and every action where its state is in Running.
traces
| where cloud_RoleName == "<Your_LogicApp_Name>"
| where message contains "Running"
| where operation_Name != ""

Monitoring multiple instance App Service Plan

I scale out an App Service Plan to 2 instances. So how to monitor each instance individually. Metrics board has no option for this, only show average of both.
I know it's a bit old thread but wanted to provide an update if you are still looking for a response on it.
I believe your requirement is currently not a supported feature so I would recommend to raise a feature request in this Azure feedback forum / UserVoice. In general, Azure feature team would check feasibility of the feature request, prioritize against existing feature backlog, add in roadmap as appropriate and would announce and/or update the related Azure document once a feature request is addressed.
We can see how many instances are created and destroyed in a certain time, for each App Service, through App Insights with a kusto query:
requests
| project cloud_RoleName, cloud_RoleInstance
| order by cloud_RoleName desc
| summarize Count=dcount(cloud_RoleInstance) by cloud_RoleName, cloud_RoleInstance
Instances per App Service:

Query logs through multiple Azure Application Insights

I'm working on a Azure project which has several Azure functions app. One function app is linked to one Application Insights. So we have as much as functions app as Applications Insights.
These functions app will talk between them, and some processes can pass by multiple functions app. On the Azure function, I add logs with a custom EntityID and this EntityID is the same between all function apps.
Now my question is : How I can retrieve all the logs with the same EntityID on all the Applications Insights ?
Like :
traces
| where operation_Name == "TestLogManagement"
| where customDimensions.EventId == 888
but on several Applications Insights.
I know that we can regroup multiple Applications Insights by a Tag but no way to retrieve my logs after I created it.
app('app1').traces
| union app('app2').traces
| where * contains "42"
| summarize count() by appId
Please have a look here:
Unify multiple Azure Monitor Application Insights resources
You can also do this in workbooks in azure monitor, so you don't need to encode app names in the query, you can just write the query you want and pick multiple instances of either AI resources or LA workspaces

Application Insights Rate Limit Exceeded - Check Origin Of Requests

We are using Application Insights in our application for monitoring purposes.
Today we received a message, that we exceeded the rate limit of 86,400 requests per day (https://dev.applicationinsights.io/documentation/Authorization/Rate-limits).
To analyze the cause of the problem I would like to know the origin of those requests. Is it possible to do this either in the azure portal or any other way?
You can examine requests/dependencies/other documents in Application Insights Analytics and check from their content who sent them.
union *
| order by timestamp
| take 1000

Using Azure Application Insights REST API (https://dev.applicationinsights.io) to read custom events/metrics

Our service writes a lot of custom events and metrics to App Insights.
Using the AI portal we can make complex queries and see nice charts, but I would like to access the data from outside the portal.
The Azure Application Insights REST API page (https://dev.applicationinsights.io) claims that those API can be used to perform such task, but I am unable to make them work - again I want to query custom events and metrics, not the standard ones.
Does anyone have any examples?
Here is for example one our queries:
customEvents
| where name startswith "Monitor.Xxxxxxx"
| summarize count() by bin(timestamp, 1min)
| order by timestamp desc
It turned out I was using the wrong AppId/Key; once I plugged the correct ones I am able to use the API Explorer.

Resources