Diagnóstico JournaledGrain
Monitorar erros de conexão
Por design, os provedores de consistência de log são resilientes sob erros de conexão (incluindo conexões com armazenamento e conexões entre clusters). Mas apenas tolerar erros não é suficiente, pois os aplicativos geralmente precisam monitorar tais problemas e levá-los ao conhecimento de um operador se forem sérios.
As subclasses JournaledGrain podem substituir os seguintes métodos para receber notificações quando houver erros de conexão observados e quando esses erros forem resolvidos:
protected override void OnConnectionIssue(
ConnectionIssue issue)
{
/// handle the observed error described by issue
}
protected override void OnConnectionIssueResolved(
ConnectionIssue issue)
{
/// handle the resolution of a previously reported issue
}
ConnectionIssue é uma classe abstrata, com vários campos comuns descrevendo o problema, incluindo quantas vezes ele foi observado desde a última vez que a conexão foi bem-sucedida. O tipo real de problema de conexão é definido por subclasses. Os problemas de conexão são categorizados em tipos, como PrimaryOperationFailed ou NotificationFailed, e às vezes têm chaves extras (como RemoteCluster) que restringem ainda mais a categoria.
Se a mesma categoria de problema acontecer várias vezes (por exemplo, continuamos recebendo um NotificationFailed
que visa o mesmo RemoteCluster
), ele é relatado cada vez por OnConnectionIssue . Uma vez que esta categoria de problema é resolvida (por exemplo, somos finalmente bem-sucedidos com o envio de uma notificação para este RemoteCluster
), então OnConnectionIssueResolved é chamado uma vez, com o mesmo issue
objeto que foi relatado pela última vez pela OnConnectionIssue
. Problemas de conexão e sua resolução, para categorias independentes, são relatados de forma independente.
Estatísticas simples
Atualmente, oferecemos suporte simples para estatísticas básicas (no futuro, provavelmente substituiremos isso por um mecanismo de telemetria mais padrão). A coleta de estatísticas pode ser habilitada ou desabilitada para um JournaledGrain chamando:
void EnableStatsCollection()
void DisableStatsCollection()
As estatísticas podem ser obtidas ligando para:
LogConsistencyStatistics GetStats()