Integrate health checks
Edit on GitHubA health checks allows you to identify whether application services are functioning properly by sending GET requests to application endpoints.
In the table below you can find all the Spryker services that you can run health checks for. The services are grouped by the applications they belong to.
ZED | YVES | GLUE |
---|---|---|
Search | Search | Search |
Storage | Storage | Storage |
Database | ZedRequest | ZedRequest |
Session | Session |
Endpoints
By default, all the application endpoints are closed for security reasons. You can check it by opening http://application.mysprykershop.com/health-check
in a browser or sending a GET curl request to receive the status code 403.
To enable the endpoints, add the following to /config/Shared/config_default.php
:
use Spryker\Shared\HealthCheck\HealthCheckConstants;
$config[HealthCheckConstants::HEALTH_CHECK_ENABLED] = true;
Running Application Health Checks
To run a health check, either open the URL of an application endpoint in a browser or send a curl GET request. The pattern is http://application.mysprykershop.com/health-check
. For example, http://zed.mysprykershop.com/health-check
.
Depending on the application status, you will see:
- status code 200 and the list of application services with the
available
status; - status code 503 and the list of application services where at least one service has the
unavailable
status.
Running Application Service Health Checks
When an application service is unavailable, you might want to apply a fix and run a health check for that particular service. To do that, you can specify the application service(s) you want to run a health check for in the request URL. The pattern is http://application.mysprykershop.com/health-check?services={service},{service}
. For example, https://glue.mysprykershop.com/health-check?services=storage
.
Integration
Prerequisites
Install the required features:
NAME | VERSION |
---|---|
Spryker Core |
1) Install the required modules
Run the following command to install the required modules:
composer require spryker-feature/spryker-core: "^" --update-with-dependencies
Make sure that the following modules have been installed:
MODULE | EXPECTED DIRECTORY |
---|---|
HealthCheck | vendor/spryker/health-check |
HealthCheckExtension | vendor/spryker/health-check-extension |
2) Set up configuration
- Extend ACL configuration settings:
// ACL: Allow or disallow of urls for Zed Admin GUI for ALL users
$config[AclConstants::ACL_DEFAULT_RULES] = [
...,
[
'bundle' => 'health-check',
'controller' => 'index',
'action' => 'index',
'type' => 'allow',
],
];
// ACL: Allow or disallow of urls for Zed Admin GUI
$config[AclConstants::ACL_USER_RULE_WHITELIST] = [
...,
[
'bundle' => 'health-check',
'controller' => 'index',
'action' => 'index',
'type' => 'allow',
],
];
- Adjust
\Pyz\Zed\Auth\AuthConfig.php
to ignore authentication of Zed application health check requests:
<?php
namespace Pyz\Zed\Auth;
use Spryker\Zed\Auth\AuthConfig as SprykerAuthConfig;
class AuthConfig extends SprykerAuthConfig
{
/**
* @return array
*/
public function getIgnorable()
{
$this->addIgnorable('health-check', 'index', 'index');
...
return parent::getIgnorable();
}
}
3) Set up Behavior
- Register the following plugins for
Zed
application:
PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
---|---|---|---|
SessionHealthCheckPlugin | Performs a health check for the Session service. | None | Spryker\Zed\Session\Communication\Plugin\HealthCheck |
KeyValueStoreHealthCheckPlugin | Performs a health check for the Storage service. | None | Spryker\Zed\Storage\Communication\Plugin\HealthCheck |
SearchHealthCheckPlugin | Performs a health check for the Search service. | None | Spryker\Zed\Search\Communication\Plugin\HealthCheck |
DatabaseHealthCheckPlugin | Performs a health check for the Propel service. | None | `Spryker\Zed\Propel\Communication\Plugin\HealthCheck |
<?php
namespace Pyz\Zed\HealthCheck;
use Spryker\Zed\HealthCheck\HealthCheckDependencyProvider as SprykerHealthCheckDependencyProvider;
use Spryker\Zed\Propel\Communication\Plugin\HealthCheck\DatabaseHealthCheckPlugin;
use Spryker\Zed\Search\Communication\Plugin\HealthCheck\SearchHealthCheckPlugin;
use Spryker\Zed\Session\Communication\Plugin\HealthCheck\SessionHealthCheckPlugin;
use Spryker\Zed\Storage\Communication\Plugin\HealthCheck\KeyValueStoreHealthCheckPlugin;
class HealthCheckDependencyProvider extends SprykerHealthCheckDependencyProvider
{
/**
* @return \Spryker\Shared\HealthCheckExtension\Dependency\Plugin\HealthCheckPluginInterface[]
*/
protected function getHealthCheckPlugins(): array
{
return [
new SessionHealthCheckPlugin(),
new KeyValueStoreHealthCheckPlugin(),
new SearchHealthCheckPlugin(),
new DatabaseHealthCheckPlugin(),
];
}
}
- Register the following plugins for
Yves
application:
PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
---|---|---|---|
SessionHealthCheckPlugin | Performs a health check for the Session service. | None | Spryker\Yves\Session\Plugin\HealthCheck |
KeyValueStoreHealthCheckPlugin | Performs a health check for the Storage service. | None | Spryker\Yves\Storage\Plugin\HealthCheck |
SearchHealthCheckPlugin | Performs a health check for the Search service. | None | Spryker\Yves\Search\Plugin\HealthCheck |
ZedRequestHealthCheckPlugin | Performs a health check for the ZedRequest service. | None | Spryker\Yves\ZedRequest\Plugin\HealthCheck |
<?php
namespace Pyz\Yves\HealthCheck;
use Spryker\Yves\HealthCheck\HealthCheckDependencyProvider as SprykerHealthCheckDependencyProvider;
use Spryker\Yves\Search\Plugin\HealthCheck\SearchHealthCheckPlugin;
use Spryker\Yves\Session\Plugin\HealthCheck\SessionHealthCheckPlugin;
use Spryker\Yves\Storage\Plugin\HealthCheck\KeyValueStoreHealthCheckPlugin;
use Spryker\Yves\ZedRequest\Plugin\HealthCheck\ZedRequestHealthCheckPlugin;
class HealthCheckDependencyProvider extends SprykerHealthCheckDependencyProvider
{
/**
* @return \Spryker\Shared\HealthCheckExtension\Dependency\Plugin\HealthCheckPluginInterface[]
*/
protected function getHealthCheckPlugins(): array
{
return [
new SessionHealthCheckPlugin(),
new SearchHealthCheckPlugin(),
new KeyValueStoreHealthCheckPlugin(),
new ZedRequestHealthCheckPlugin(),
];
}
}
- Register the following plugins for
Glue
application:
PLUGIN | SPECIFICATION | PREREQUISITES | NAMESPACE |
---|---|---|---|
KeyValueStoreHealthCheckPlugin | Performs a health check for the Storage service. | None | Spryker\Glue\Storage\Plugin\HealthCheck |
SearchHealthCheckPlugin | Performs a health check for the Search service. | None | Spryker\Glue\Search\Plugin\HealthCheck |
ZedRequestHealthCheckPlugin | Performs a health check for the ZedRequest service. | None | Spryker\Glue\ZedRequest\Plugin\HealthCheck |
<?php
namespace Pyz\Glue\HealthCheck;
use Spryker\Glue\HealthCheck\HealthCheckDependencyProvider as SprykerHealthCheckDependencyProvider;
use Spryker\Glue\Search\Plugin\HealthCheck\SearchHealthCheckPlugin;
use Spryker\Glue\Storage\Plugin\HealthCheck\KeyValueStoreHealthCheckPlugin;
use Spryker\Glue\ZedRequest\Plugin\HealthCheck\ZedRequestHealthCheckPlugin;
class HealthCheckDependencyProvider extends SprykerHealthCheckDependencyProvider
{
/**
* @return \Spryker\Shared\HealthCheckExtension\Dependency\Plugin\HealthCheckPluginInterface[]
*/
protected function getHealthCheckPlugins(): array
{
return [
new SearchHealthCheckPlugin(),
new KeyValueStoreHealthCheckPlugin(),
new ZedRequestHealthCheckPlugin(),
];
}
}
4) Set up transfer objects
Run the following command to apply transfer changes:
vendor/bin/console transfer:generate
Make sure that the following changes took place in transfer objects:
TRANSFER | TYPE | EVENT | NAMESPACE |
---|---|---|---|
HealthCheckRequestTransfer | class | created | src\Generated\Shared\Transfer\HealthCheckRequestTransfer |
HealthCheckResponseTransfer | class | created | src\Generated\Shared\Transfer\HealthCheckResponseTransfer |
HealthCheckServiceResponseTransfer | class | created | src\Generated\Shared\Transfer\HealthCheckServiceResponseTransfer |
Thank you!
For submitting the form