Software AG Products 10.5 | Configuring API Gateway | API Gateway Configuration | API Gateway Cluster Configuration | Configuring an API Gateway Cluster | API Gateway Availability and Health Status
 
API Gateway Availability and Health Status
You can monitor the availability and health status of API Gateway using the Availability REST API. The Availability API is used to report the overall health of the API Gateway.
The REST API is not deployed by default but can be defined by importing the Swagger file APIGatewayAvailability.json from the folder located at SAG_Root/IntegrationServer/instances/default/packages/WmAPIGateway/resources/apigatewayservices. For details, see API Gateway Availability.
You can check API Gateway health using the HTTP requests against http://localhost:5555/gateway/availability. This REST call also verifies the exposure and availability of the API Gateway REST API. You must have the View administration configurations privileges to invoke the Availability API to view the availability and health status of API Gateway.
Each health check request displays a status field as the first entry. The status can have the values green, yellow or red describing the overall status of the components to check. This means that when any of the components signals a problem, then the status is set to red.
The REST API provides the following resources and methods:
*GET /gateway/availability/admin
The request retrieves the availability and health status of the API Gateway administration service (UI, Dashboards).
Request: GET http://localhost:5555/gateway/availability/admin
The overall admin status is assessed based on the UI ports (the port can be HTTP or HTTPS) status as follows:
*When the HTTP and the HTTPS ports are accessible, the overall status is green.
*When both ports or one of the ports is inaccessible, the overall status is red.
*When both ports are configured and one of the ports is inaccessible, the overall status is yellow.
*When there is a SSL handshake failure while checking the HTTPS port, the overall status is yellow.
The overall admin status is assessed based on the Kibana status as follows:
*When Kibana's port is accessible, the overall status is green.
*When Kibana's port is inaccessible, the overall status is red.
*When Kibana's communication with Elasticsearch is not established, the overall status is red.
A sample HTTP response looks as follows:
{
"status": "red",
"ui": {
"status": "green",
"response_time_ms": "316"
},
"kibana": {
"error": "HttpResponse: 503 (Service Unavailable): Kibana server is not ready yet",
"status": "red"
}
}
The sample HTTP response shows a red status since Kibana is not available.
*GET /gateway/availability/engine
The request retrieves the availability and health status of the API Gateway to process API invocations and requests (ElasticSearch cluster, IS and Terracotta).
Request: GET http://localhost:5555/gateway/availability/engine
The overall status is assessed based on the Elasticsearch status as follows:
*When the internal status of Elasticsearch signals green or yellow, the overall status is green.
*When the internal status of Elasticsearch signals red, the overall status is red.
*When Elasticsearch port is inaccessible, the overall status is red.
The overall status is assessed based on the IS status as follows:
*When one of the resource types memory, diskspace, and servicethread do not signal up, then the overall engine status is set to red.
Request: GET http://localhost:5555/gateway/availability/engine
A sample HTTP response looks as follows:
{
"status": "green",
"elasticsearch": {
"cluster_name": "SAG_EventDataStore",
"status": "green",
"number_of_nodes": "3",
"number_of_data_nodes": "3",
"timed_out": "false",
"active_shards": "236",
"initializing_shards": "0",
"unassigned_shards": "0",
"task_max_waiting_in_queue_millis": "0",
"port_9240": "ok",
"response_time_ms": "29"
},
"is": {
"status": "green",
"diskspace": {
"status": "up",
"free": "8249233408",
"inuse": "2476650496",
"threshold": "1072588390",
"total": "10725883904"
},
"memory": {
"status": "up",
"freemem": "252558496",
"maxmem": "954728448",
"threshold": "55679385",
"totalmem": "556793856"
},
"servicethread": {
"status": "up",
"avail": "71",
"inuse": "4",
"max": "75",
"threshold": "7"
},
"response_time_ms": "315"
},
"cluster": {
"status": "green",
"isClusterAware": "false",
"message": "Non-Clustered node",
"response_time_ms": "16"
}
}
The overall status is green since all components work as expected.
*GET /gateway/availability/externalServices
The request retrieves the availability of external services accessed by API Gateway. The external services include destinations and external accounts. The checked external accounts include Service registries and Integration Servers.
The status field of externalServices displays the values green or yellow, if at least one of the destination resources is not available. In case of a problem, the error field displays the details of the problem encountered.
Request: GET http://localhost:5555/gateway/availability/externalServices
HTTP response looks as follows:
{
"status": "yellow",
"destinations": [
{
"type": "centrasite",
"name": "centrasite",
"status": "yellow",
"error": "Port 53307 not active",
"response_time_ms": "1006"
},
{
"type": "centrasite",
"name": "centrasite_snmp",
"status": "yellow",
"error": "Port 8181 not active",
"response_time_ms": "1005"
},
{
"type": "api_portal",
"name": "api_portal",
"status": "not configured",
"response_time_ms": "9"
},
{
"type": "snmp",
"name": "snmp",
"status": "yellow",
"error": "Port 8189 not active",
"response_time_ms": "1004"
},
{
"type": "email",
"name": "email",
"status": "green",
"response_time_ms": "9"
},
{
"type": "elasticsearch",
"name": "elasticsearch",
"status": "not configured",
"response_time_ms": "0"
}
],
"external_accounts": [
{
"type": "service_registry",
"name": "ServiceConsulDefault",
"status": "green",
"response_time_ms": "12"
},
{
"type": "service_registry",
"name": "EurekaDefault",
"status": "yellow",
"error": "Error: HttpResponse: 500 (Connect to http://daefermion3:9092 failed): ",
"response_time_ms": "1026"
}
]
}
The sample response shows the status of all external services including those that are not configured. As the CentraSite destination is not properly configured, as shown in the sample response, this turns the overall status to yellow.
*GET /gateway/availability/all
The request retrieves the availability of the administration service of the policy enforcement engine and of the external services accessed by API Gateway.
Request: GET http://localhost:5555/gateway/availability/all
HTTP response looks as follows:
{
"status": "red",
"ui": {
"status": "green",
"response_time_ms": "4"
},
"kibana": {
"error": "HttpResponse: 503 (Service Unavailable): Kibana server is not ready yet",
"status": "red"
},
"elasticsearch": {
"cluster_name": "SAG_EventDataStore",
"status": "green",
"number_of_nodes": "3",
"number_of_data_nodes": "3",
"timed_out": "false",
"active_shards": "236",
"initializing_shards": "0",
"unassigned_shards": "0",
"task_max_waiting_in_queue_millis": "0",
"port_9240": "ok",
"response_time_ms": "7"
},
"is": {
"status": "green",
"diskspace": {
"status": "up",
"free": "8249327616",
"inuse": "2476556288",
"threshold": "1072588390",
"total": "10725883904"
},
"memory": {
"status": "up",
"freemem": "232997664",
"maxmem": "954728448",
"threshold": "57094963",
"totalmem": "570949632"
},
"servicethread": {
"status": "up",
"avail": "71",
"inuse": "4",
"max": "75",
"threshold": "7"
},
"response_time_ms": "127"
},
"cluster": {
"status": "green",
"isClusterAware": "false",
"message": "Non-Clustered node",
"response_time_ms": "16"
},
"destinations": [
{
"type": "centrasite",
"name": "centrasite",
"status": "yellow",
"error": "Port 53307 not active",
"response_time_ms": "1006"
},
{
"type": "centrasite",
"name": "centrasite_snmp",
"status": "yellow",
"error": "Port 8181 not active",
"response_time_ms": "1005"
},
{
"type": "api_portal",
"name": "api_portal",
"status": "not configured",
"response_time_ms": "9"
},
{
"type": "snmp",
"name": "snmp",
"status": "yellow",
"error": "Port 8189 not active",
"response_time_ms": "1004"
},
{
"type": "email",
"name": "email",
"status": "green",
"response_time_ms": "9"
},
{
"type": "elasticsearch",
"name": "elasticsearch",
"status": "not configured",
"response_time_ms": "0"
}
],
"external_accounts": [
{
"type": "service_registry",
"name": "ServiceConsulDefault",
"status": "green",
"response_time_ms": "12"
},
{
"type": "service_registry",
"name": "EurekaDefault",
"status": "yellow",
"error": "Error: HttpResponse: 500 (Connect to http://daefermion3:9092 failed): ",
"response_time_ms": "1026"
}
]
}
Note: 
*To perform the following API Gateway Availability REST calls you must have the View Administration Configuration privileges.
*GET /gateway/availability/externalServices
*GET /gateway/availability/all
*To perform the following API Gateway Availability REST calls you must be a valid API Gateway user.
*GET /gateway/availability/admin
*GET /gateway/availability/engine
You can use the existing health check request GET http://localhost:5555/rest/apigateway/health, without any authentication being set, to retrieve the health of API Gateway that monitors the availability and health status of Kubernetes and Docker containers . This returns a HTTP 200 response without additional data.