### Description

The health API response can become a few MBs (2-3MB if 50K indices are affected).

In less extreme situations the response can be in the 10s/100s of KB. 

It might be worthwhile looking into chunking its response (this might provide clients with a better experience too)
server/src/internalClusterTest/java/org/elasticsearch/discovery/StableMasterDisruptionIT.java
* It is possible that the first node that became master got re-elected repeatedly. And since it was in a simulated GC when the
         * other node(s) were master, it only saw itself as master. So we want to check with another node.
         */
        Client client = internalCluster().client(randomFrom(nodeNamesExceptFirstMaster));
        assertMasterStability(client, HealthStatus.YELLOW, containsString(expectedMasterStabilitySymptomSubstring));
    }
    public void testRepeatedNullMasterRecognizedAsGreenIfMasterDoesNotKnowItIsUnstable() throws Exception {
        /*
         * In this test we have a single master-eligible node. We pause it repeatedly (simulating a long GC pause for example) so that
         * other nodes decide it is no longer the master. However since there is no other master-eligible node, another node is never
         * elected master. And the master node never recognizes that it had a problem. So when we run the master stability check on one
         * of the data nodes, it will see that there is a problem (the master has gone null repeatedly), but when it checks with the
         * master, the master says everything is fine. So we expect a GREEN status.
         */
        final List<String> masterNodes = internalCluster().startMasterOnlyNodes(
            1,
            Settings.builder()
                .put(LeaderChecker.LEADER_CHECK_TIMEOUT_SETTING.getKey(), "1s")
                .put(Coordinator.PUBLISH_TIMEOUT_SETTING.getKey(), "1s")
                .put(CoordinationDiagnosticsService.NO_MASTER_TRANSITIONS_THRESHOLD_SETTING.getKey(), 1)
                .build()
        );
        int nullTransitionsThreshold = 1;
        final List<String> dataNodes = internalCluster().startDataOnlyNodes(
            2,
            Settings.builder()
                .put(LeaderChecker.LEADER_CHECK_TIMEOUT_SETTING.getKey(), "1s")
                .put(Coordinator.PUBLISH_TIMEOUT_SETTING.getKey(), "1s")
                .put(CoordinationDiagnosticsService.NO_MASTER_TRANSITIONS_THRESHOLD_SETTING.getKey(), nullTransitionsThreshold)
                .put(CoordinationDiagnosticsService.NODE_HAS_MASTER_LOOKUP_TIMEFRAME_SETTING.getKey(), new TimeValue(60, TimeUnit.SECONDS))