Healthchecks

This is the reference for loadbalancer healthchecks to containers.

By default, a container configures an instance of VipStatusHandler to serve /status.html. This responds with status code 200 and text OK if content clusters are UP. See VipStatus.java for details.

Applications with multiple content clusters should implement custom handlers for healthchecks, if the built-in logic is inadequate for the usage. Also refer to federation for how to manage data sources.

Override using a status file

Use container.core.vip-status to make VipStatusHandler use a file for health status:

<container>
    <config name="container.core.vip-status">
        <accessdisk>true</accessdisk>
        <statusfile>/full-path-to/status-response.html</statusfile>
    </config>
If the file exists, its contents will be served on /status.html, otherwise an error message will be generated (it is hence independent from the path in the URI). To remove a container from service, delete or rename the file to serve.

Alternative / multiple paths

VipStatusHandler only looks at a single file path by default. As it is independent from the URI path, it is possible to configure multiple handler instances to serve alternative or custom messages - example:

<handler id="vipFreshness" class="com.yahoo.container.handler.VipStatusHandler">
    <binding>http://*:*/docproc/freshness-data.xml</binding>
    <config name="container.core.vip-status">
        <accessdisk>true</accessdisk>
        <statusfile>/full-path-to/freshness-data.xml</statusfile>
    </config>
</handler>
<handler id="vipClustering" class="com.yahoo.container.handler.VipStatusHandler">
    <binding>http://*:*/docproc/ClusteringDocproc.status</binding>
    <config name="container.core.vip-status">
        <accessdisk>true</accessdisk>
        <statusfile>/full-path-to/ClusteringDocproc.status</statusfile>
    </config>
</handler>
The paths /docproc/freshness-data.xml and /docproc/ClusteringDocproc.status serves the files located at /full-path-to/freshness-data.xml and /full-path-to/ClusteringDocproc.status, respectively. As the handler instances are independent, a container can be taken out of one type of rotation without affecting another.