Some customers are confused why the Number of Requests measure does not take into account all web requests of an Agent. So let me summarize how the Number of Requests measure is calculated:
Consider following example:
The web server (monitored by the agent dtwsagent[Apache 2.2]) is performing a web request to an external resource (balancer://mycluster/orange.jsf). In this case, the Number of Requests for the agent dtwsagent[Apache 2.2] is 1.
Consider following extended example:
Now, the server-side of the request is captured by AppMon as well. You may expect that the measure Number of Requests is incremented for both the dtwsagent and the CustomerFrontend agent. However, this is not the case. To prevent a wrong overall count, only the server-side of the request is taken into account. That is, for the shown PurePath the Number of Requests is 0 for the dtwsagent[Apache 2.2] and 1 for the CustomerFrontend_easyTravel.
So by adding an agent to the previously unmonitored Java process, we changed the Number of Requests for the Web Server agent!
In this example, the AppMon agent was removed from the Apache. Thus, the PurePath now starts with the web request to the Java process. The Number of Requests for CustomerFrontend_easyTravel remains 1.
Server-side web requests always increase the Number of Requests for the agent capturing the request.
Whether a client-side web request increments the Number of Requests for the agent monitoring the request depends on whether the server-side is monitored by AppMon. If the server-side is monitored by AppMon, the number is not incremented. If the remote side is not monitored by AppMon, the Number of Requests is incremented.
I am one of the customers with questions around this. I have an ticket open with support on this very issue (SUPDT-36129). But I'd like to take up your particular scenario. As you have described it is not my understanding. I have an application that has 1 Apache agent and 6 load balanced Tomcat instances behind it. They are all instrumented with AppMon version 6.5. It looks like the Apache instance counts all the requests, and Tomcat also counts roughly 1/6 of the requests on each instance.
Would this seem to contradict some of the assertions above?
The big question I am trying to solve - not in this case where it seems to work just fine - is how do we determine how much load a tier in the application is experiencing. This get complicated by lots of factors, some of which you may be alluding too. Another big one in our environment is the split PurePaths we see that get introduced due to improper handling of Apache Camel framework requests.
I'll post a couple of charts for this scenario, but I'd also like to understand the best practices approach to the question of how do we determine load at each tier.
Thanks for bringing this up. I'm sure many people will benefit from the discussion.
Hello Dan, Thanks for your feedback. I'm currently investigating your SUPDT. I will add a detailed description why you do not see any web request for CR_RDC_API_PERF_Akana_SVCGW_WebMobile_Book_A1 on the ticket. BTW: I added a third scenario to my question that also applies to the PurePaths of your session.
Hi @Stefan M.
How would this work when splitting the measure by Application?
Let me explain:
We have been working on a very long lasting support case SUPDT-33991 about this. Basically a customer has seen a change in the way Number of Requests works after 5.6. They have a number of Java applications (let's call them front end apps) that call other applications (backend apps). They split Number of requests by application.
In 6.3 they always see "Number of Requests" gets incremented for the frontend apps and hardly ever for the backend apps (as they don't get called directly and only from the front end apps). According to them, what they saw in 5.6 was that the number of requests was increased for both apps so they could use the metric to measure the number of requests the backend apps were getting. Now they can only see the frontend apps' requests
So for our scenario (number 2): Number of Requests is only incremented once and if you split it by application the request will get attributed to the first front end app?
Do you know if there is any way to measure the number of requests on the server-side without having to create a measure that counts requests for the entry URLs of every back end application (that would be pretty manual)
Many thanks in advance
I think we are mixing up several use cases here. Let me try to sort things out:
Use Case 1: Count overall number of web requests
... to answers questions like: "How many web requests do we have per day?"
Create a new custom chart in AppMon, right click and select "Add Series...", select "Number of Requests" switch splitting to "No Splitting (Draw only total)", click on "Add"
The original post from @Stefan M. with scenario 1-3 perfectly explains how the values are calculated.
Independent from the number of monitored tiers (rich client, browser, web server, application servers, etc.) one web request will always be count as one web request.
Use Case 2: Count number of web request per tier
... to answer questions like: "Is the load evenly separated over my tomcat instances?"
Create a new custom chart in AppMon, right click and select "Add Series...", select again "Number of Requests" but now switch splitting to "Agent", click on "Add".
You will see now the number of web requests per agent/tier. How these values are calculated is best illustrated by the example, contributed by @Dan S..
The confusing thing now is when you add both metrics into one chart and compare the total number of web requests (from use case 1) with the number of web requests per agent/tier (from use case 2).
You have one web request that is handled by an Apache web server and forwarded to a single Tomcat instance.
We have in total one web request (use case 1) but at the same time we have one web request for the Apache web server agent/tier and one web request for the Tomcat agent/tier.
So, although the sum over both tiers would be two, the total value is one. This may look like an error, but you are also comparing values for two different use cases.
Use Case 3: Count number of web request by logical tier
I think the post of @Fran Garcia H.. is about this use case.
An "Agent" represents a process like an Apache web server or a Tomcat application server. As long as your tiers (e.g. front end, back end) are represented by processes, splitting by "Agent" is your choice. But what if your tiers are not tied to specific processes? What if your front end and back end tiers are logical tier and are all running in Tomcat instances? How would you count the number of requests on your front end or back end tiers?
In this case you have two possibilities: Applications or Business Transactions. The right choice depends on whether you want to count one transaction once or multiple times:
A PurePath can only be assigned to one Application. How an application is identified, can be configured, but it is always the first, detected application that is assigned to the PurePath. So if you have several types of front end tier (e.g. one for B2B and one for consumers) you can use Applications to split the number of requests.
But if you want to count requests not only for the first tier on the transaction but for every tier, the transaction is passing, Business Transactions are your choice. While a PurePath can only have one Application it can have multiple values for one and the same Business Transaction. Application detection either uses web application identifiers, host names or patterns (e.g for URLs). All this can also be used as splitting result for a Business Transaction.