Обе службы предоставляют конечные точки работоспособности, которые можно использовать для проверки их состояния с удаленного сервера.Там нет необходимости открывать удаленное подключение оболочки.Фактически, было бы невозможно контролировать большие фермы серверов, если бы приходилось использовать SSH для каждой из них.
В простейшем случае, игнорируя проблемы с сетью, можно просто попасть в конечные точки работоспособности, чтобы проверить состояние обеих служб.Примерная реализация может выглядеть следующим образом:
public async Task<bool> CheckBoth()
{
var client = new HttpClient
{
Timeout = TimeSpan.FromSeconds(30)
};
const string grafanaHealthUrl = "https://myGrafanaURL/api/health";
const string influxPingUrl = "https://myInfluxURL/ping";
var (grafanaOK, grafanaError) = await CheckAsync(client, grafanaHealthUrl,
HttpStatusCode.OK, "Grafana error");
var (influxOK, influxError) = await CheckAsync(client, influxPingUrl,
HttpStatusCode.NoContent,"InfluxDB error");
if (!influxOK || !grafanaOK)
{
//Do something with the errors
return false;
}
return true;
}
public async Task<(bool ok, string result)> CheckAsync(HttpClient client,
string healthUrl,
HttpStatusCode expected,
string errorMessage)
{
try
{
var status = await client.GetAsync(healthUrl);
if (status.StatusCode != expected)
{
//Failure message, get it and log it
var statusBody = await status.Content.ReadAsStringAsync();
//Possibly log it ....
return (ok: false, result: $"{errorMessage}: {statusBody}");
}
}
catch (TaskCanceledException)
{
return (ok: false, result: $"{errorMessage}: Timeout");
}
return (ok: true, "");
}
Возможно, лучшим решением будет использование Azure Monitor для периодической проверки URL-адресов работоспособности и отправки оповещения, если они не работают.