Skip to content
Daniel Carbone edited this page Nov 6, 2026 · 1 revision

Health

$consul->Health wraps Consul's Health API.

Finding healthy service instances

[$entries, $qm, $err] = $consul->Health->Service(service: 'web', passingOnly: true);

foreach ($entries as $entry) {
    // ServiceEntry: ->Node (Node), ->Service (AgentService), ->Checks (HealthChecks)
    $addr = '' !== $entry->Service->Address ? $entry->Service->Address : $entry->Node->Address;
    echo "{$entry->Node->Node} {$addr}:{$entry->Service->Port} " . $entry->Checks->AggregatedStatus() . "\n";
}

Filter by tag with tag: 'v1', or use ServiceMultipleTags(service: 'web', tags: ['v1', 'primary']). Connect / ConnectMultipleTags return Connect-capable instances (sidecars or native).

Checks

Node, Checks and State return a HealthChecks collection. You can iterate it, count it, and call AggregatedStatus() on it:

use DCarbone\PHPConsulAPI\Consul;

[$checks, $qm, $err] = $consul->Health->Node(node: 'my-node');
echo $checks->AggregatedStatus(); // passing | warning | critical | maintenance

foreach ($checks as $check) {
    echo "{$check->CheckID} {$check->Status}\n";
}

[$critical, $qm, $err] = $consul->Health->State(state: Consul::HealthCritical);
[$svcChecks, $qm, $err] = $consul->Health->Checks(service: 'web');

State accepts Consul::HealthAny, HealthPassing, HealthWarning, HealthCritical and HealthMaint.

Ingress

Ingress keeps an overloaded signature for backwards compatibility: Ingress(service, tagOrPassingOnly, passingOnlyOrOpts, opts). Named arguments make it clearer:

[$entries, $qm, $err] = $consul->Health->Ingress(service: 'web', tagOrPassingOnly: true);

Or use IngressMultipleTags(service: 'web', tags: [...], passingOnly: true).

All of these support blocking queries; see Query and Write Options and Responses and Errors.

Clone this wiki locally