Questo è difficile da attuare a causa della definizione di ciò che è salutare
Hai risposto alla tua domanda qui. La definizione di un controllo sanitario varierà, perché ciò che è sano varia. Dipende anche da cosa sta emettendo il controllo sanitario.
Una buona domanda da porsi è "dal punto di vista del richiedente, il servizio controllato funziona come previsto?" Se questo sei tu, puoi definirlo. Se si tratta di un altro team / servizio, è necessario identificare quali sono gli standard / le specifiche per i controlli di salute.
Probabilmente in una grande organizzazione, avrai una sorta di standard per ciò che dovrebbe fare un controllo sanitario. Trova una soluzione.
Nello specifico qui, l'esempio della tua webapp significa che non dovrebbe tornare sano perché la webapp non è sana. Ma forse la tua definizione di "sano" includerebbe questo come "ok". Questo fa parte della discussione sui requisiti sopra (di nuovo, anche se è solo il tuo codice).
La mia raccomandazione, supponendo che non sia specificata altrove, sarebbe quella di avere una sorta di codice di stato associato a diversi errori. Quando si interroga la webapp, potrebbe restituire un errore che dice "il servizio dipendente è morto" e quindi il client (o qualunque cosa stia eseguendo il controllo di salute) può sapere il motivo per cui il client è morto.
Per le domande modificate:
È sufficiente considerare sano il servizio se il sistema di orchestrazione segnala che l'attività è in esecuzione?
No, solo perché un processo è in esecuzione non significa che non sia bloccato, totalmente non funzionale o con una grande varietà di altre possibilità.
O dovremmo eseguire manualmente il ping di ciascun servizio?
Questo potrebbe funzionare, a seconda dell'ambito della funzionalità dell'applicazione. Se la verifica del servizio risponde a "sei vivo?" ping quindi questo potrebbe essere tutto ciò che è richiesto. Ma se il servizio potrebbe essere facilmente "vivo e reattivo ma non funzionante", forse è necessario controllare anche altre cose.
O dovrebbe andare oltre e cercare di garantire che l'app Web faccia quello che dovrebbe fare, come mostrare una pagina web?
Il controllo sanitario deve garantire che la funzionalità richiesta prevista funzioni come previsto.
Se la tua app torna "sana" e non può fare ciò che deve fare, potresti anche sbarazzarti dell'intero controllo di salute in quanto fornirà falsi positivi (per non parlare di confondere il diavolo delle persone che cercano di eseguire il debug del problema - 'hey il nostro server web mostra sano, perché non possiamo vedere la pagina? ').
Healthcheck deve anche verificare che anche alcuni servizi dipendenti siano in esecuzione? Come un database o il sistema di orchestrazione stesso. O è la responsabilità di un altro controllo sanitario?
Questo dipende in qualche modo. Se il tuo servizio dipende da un altro servizio, la natura di tale interazione dovrebbe riflettersi nelle chiamate API / rete inviate ad esso nella tua app e incorporate nel controllo sanitario.
Ad esempio, un server web che legge da un database deve disporre di informazioni sullo stato del database in esso incorporato o l'app Web si arresterà in modo anomalo se le chiamate API non riescono. È possibile modificare banalmente queste chiamate per essere incorporate nel controllo della salute.
Tuttavia, se il tuo servizio sta inviando eventi ai consumatori che ascoltano, senza alcuna convalida, è meno importante per la funzionalità della tua app che i consumatori siano vivi. "Sano" alla tua app sta inviando i messaggi, non li sta effettivamente ricevendo.
Fondamentalmente, se il tuo servizio deve parlare con altri servizi e verificarne comunque lo stato, ha senso almeno un livello base di controllo in questo per il controllo dello stato del tuo servizio. Ciò dovrebbe avere senso concettualmente, dato quello che ho appena detto, poiché l'applicazione lo gestirà già (o arresta in modo casuale, immagino).
E, infine, se uno dei servizi dipendenti è morto e successivamente l'app Web non riesce, l'app Web dovrebbe riportare una cattiva salute o è buona salute, perché non è colpa delle app web?
Questa è sostanzialmente una risposta sopra. La mia raccomandazione sarebbe di fare in modo che il tuo healthcheck restituisca un codice / messaggio / qualunque cosa fornisca queste informazioni. Entrambe le informazioni sono importanti: che il servizio dipendente di cui il tuo servizio ha bisogno è morto e che il tuo servizio non funzionerà come previsto di conseguenza.