Start here. This is the direct spoken answer to practice first.
Overview
A custom health check is useful only when its result changes a real routing or operator decision.
I write a custom HealthIndicator when the application's own state or a critical dependency is not already represented and operators need that signal. The check returns a meaningful status with small, safe details and belongs in the appropriate health group. It should be fast, bounded by a short timeout, and avoid changing data.