You've tagged fastly
so I'm presuming Fastly is the CDN you're using.
I'm responding specifically to the question:
I want to check the service has healthy backends. Checking the status/health of the Traefik instance itself is not enough.
Although I would expect Traefik to handle health check monitoring of its own backends, you could setup a health check for those backends within the CDN.
Here is an example, where I define two backends:
- Traefik Backend (e.g. Backend A, Backend B etc)
- Traefik Proxy (e.g. Traefik 1, Traffic 2 etc)

You also can see in the above image that I've added a health check to "Traefik Backend".
Below is some custom VCL that sets "Traefik Proxy" as the backend the CDN should send all incoming requests onto. It then checks if "Traefik Backend" is healthy, and if it isn't, then you can write whatever custom VCL is necessary to indicate that to the "Traefik Proxy" backend.
sub vcl_recv {
#FASTLY recv
// If there are multiple backends, then Fastly
// will determine the backend dynamically.
// So I set it explicitly to the Traefik proxy.
set req.backend = F_Traefik_Proxy;
// If the backend, that the Traefik proxy is calling, is unhealthy,
// then do something else.
if (!backend.F_Traefik_Backend.healthy) {
// e.g. set a header for the Traefik proxy
}
return(lookup);
}
Here are some references that might be useful to you: