Start here. This is the direct spoken answer to practice first.
Why this question matters
Health checks decide whether traffic reaches the app. A check that is too weak hides failures; a check that is too strict causes false outages.
I would separate liveness from readiness. Liveness answers whether the process is alive and not stuck. Readiness answers whether this instance can serve traffic. Startup or warmup checks can verify configuration, routes, and required initialization before an instance receives users. Not every dependency belongs in every health check.