Liveliness and responsiveness
One of the simpler methods for monitoring the performance of a PingAccess deployment is determining whether the PingAccess server is available and responsive. To help you identify the status of a server, PingAccess provides a heartbeat request endpoint.
Using the heartbeat endpoint
When the PingAccess server is running, sending a request to the /pa/heartbeat.ping endpoint (or /<Application Context Root>/pa/heartbeat.ping if you have the Use context root as reserved resource base path checkbox enabled on your PingAccess application) should return an 200 OK message.
If the request times out or takes a long time to complete, the server might be overloaded or experiencing other difficulties.
We recommend that you develop a baseline for the desired response time by testing the heartbeat endpoint of your deployment at various times. This endpoint can be useful when load balancing a cluster of PingAccess server instances. Some load balancers can alter the number of requests that are sent to a particular server based on the response code received, or the responsiveness of requests that are made to the heartbeat endpoint.
Modifying the heartbeat message
You can modify the output of the heartbeat to provide performance-related information, such as CPU and memory usage, along with response times. The response metrics can help you make better auto-scaling decisions. The map size metrics can help you recognize performance issues. Learn more in Customizing the heartbeat message.
Example
The following example demonstrates the JSON response data returned after changing the heartbeat.page.json template file to show the memory, CPU, and response time.
|
This example contains PingAccess server metrics available from the heartbeat endpoint. You can find more information about these metrics in the Server metrics table. |
Example JSON response data
{
"items": [
{
"response.statistics.window.seconds": "5",
"response.statistics.count": "1",
"response.time.statistics.90.percentile": "129",
"response.time.statistics.mean": "129",
"response.time.statistics.max":"129",
"response.time.statistics.min": "129",
"response.concurrency.statistics.90.percentile": "1",
"response.concurrency.statistics.mean": "1",
"response.concurrency.statistics.max": "1",
"response.concurrency.statistics.min": "1",
"cpu.load": "15.53",
"total.jvm.memory": "500.695 MB",
"free.jvm.memory": "215.339 MB",
"used.jvm.memory": "285.356 MB",
"total.physical.system.memory": "17.18 GB",
"total.free.physical.system.memory": "278.45 MB",
"total.used.physical.system.memory": "16.901 GB",
"number.of.cpus": "8",
"hostname": "jdasilva-r",
"open.client.connections": "1",
"number.of.applications": "11",
"number.of.virtual.hosts": "6",
"last.refresh.time": "1969-12-31T18:00:00.000Z"
}
]
}
Server metrics table
The following table describes all the PingAccess server metrics available from the heartbeat endpoint.
|
In the following table, for server metrics that end in You can find more information on how to edit this value in step 4 of Customizing the heartbeat message. |
Server metrics
| Server metrics | Description |
|---|---|
response.statistics.window.seconds |
The time interval, in seconds, for the statistics report. This is an echo of the |
response.statistics.count |
The number of items considered in the heartbeat report for the time and concurrency statistics. |
response.time.statistics.90.percentile |
The 90th percentile response time, in milliseconds, during the statistics window. For example, if this value is 168, then 90% of the report samples had response times below 168 milliseconds. |
response.time.statistics.mean |
The mean time, in milliseconds, that the PingAccess server took to respond during the statistics window. |
response.time.statistics.max |
The longest time, in milliseconds, that the PingAccess server took to respond during the statistics window. |
response.time.statistics.min |
The shortest time, in milliseconds, that the PingAccess server took to respond during the statistics window. |
response.concurrency.statistics.90.percentile |
The 90th percentile response concurrency during the statistics window. For example, if this value is 124, then 90% of the report samples had response concurrency values below 124. |
response.concurrency.statistics.mean |
The mean number of HTTP requests that the PingAccess server processed concurrently during the statistics window. |
response.concurrency.statistics.max |
The maximum number of HTTP requests that the PingAccess server processed concurrently during the statistics window. |
response.concurrency.statistics.min |
The minimum number of HTTP requests that the PingAccess server processed concurrently during the statistics window. |
cpu.load |
The load on the PingAccess server’s cores as a percentage of total capacity. |
total.jvm.memory |
The total memory of the Java Virtual Machine (JVM). |
free.jvm.memory |
The free memory of the JVM. |
used.jvm.memory |
The used memory of the JVM. |
total.physical.system.memory |
The total system memory. |
total.free.physical.system.memory |
The free system memory. |
total.used.physical.system.memory |
The used system memory. |
number.of.cpus |
The number of cores on the PingAccess server. |
hostname |
The host name of the system running PingAccess. |
open.client.connections |
The number of clients connected to PingAccess. |
number.of.applications |
The number of configured applications in PingAccess. |
number.of.virtual.hosts |
The number of configured virtual hosts in PingAccess. |
last.refresh.time |
Returns the time that the PingAccess configuration was last refreshed, in ISO 8601 date format. |
|
As indicated in the table, the values of some metrics are calculated over a configurable time window. The default statistics window is zero seconds. To customize the statistics window period, change the value of the |
Logging response times
By default, the audit logs record the processing time for each transaction. You can enable audit logging to identify the speed at which PingAccess processes web and API application transactions.
|
Depending on your logging configuration, audit logging might not log any transactions. |
Example
The following example shows an entry from the default audit log, specifically the included processing times:
2019-12-15T17:23:12,192|GRmozOujPDDFct8RbtnfJw|tid:wUu9F0vDd9pZPKe4Oc5Ym_-RFCc..9r72.v8c0Y2CUA5qSpvcxKHgd7QoCp|
81 ms | 50 ms | 0 ms| servapp.ext.wal-ping.com [] /SimpleWebApi /*:3000| joe| Cookie| 127.0.0.1| GET| /SimpleWebApi/web/web.jsp| 200| | | Web-API| Root Resource| /*
Processing times are as follows:
-
Total round trip: 81 ms.
Learn more in the
AUDIT.roundTripMSaudit log element. -
Proxy round trip: 50 ms.
Learn more in the
AUDIT.proxyRoundTripMSaudit log element. -
UserInfo round trip: 0 ms.
The total number of milliseconds PingAccess spent making a backchannel call to the OIDC UserInfo endpoint and waiting for a response. A value of 0 ms indicates that a call wasn’t made. Calls might be omitted on subsequent log entries.
You can find more information about logging in Log configuration and the elements of a log entry in Security audit logging.