Consultar APIs do EventStore para eventos de cluster
Este artigo aborda como consultar as APIs do EventStore que estão disponíveis no Service Fabric versão 6.2 e posterior - se você quiser saber mais sobre o serviço EventStore, consulte a visão geral do serviço EventStore. Atualmente, o serviço EventStore só pode acessar dados dos últimos 7 dias (isso se baseia na política de retenção de dados de diagnóstico do cluster).
Nota
As APIs do EventStore são GA a partir da versão 6.4 do Service Fabric apenas para clusters do Windows em execução no Azure.
As APIs do EventStore podem ser acessadas diretamente por meio de um ponto de extremidade REST ou programaticamente. Dependendo da consulta, existem vários parâmetros que são necessários para reunir os dados corretos. Esses parâmetros geralmente incluem:
api-version
: a versão das APIs da EventStore que você está usandoStartTimeUtc
: define o início do período que você está interessado em verEndTimeUtc
: fim do período
Além desses parâmetros, há parâmetros opcionais disponíveis também, como:
timeout
: substituir o tempo limite padrão de 60 segundos para executar a operação de solicitaçãoeventstypesfilter
: dá-lhe a opção de filtrar por tipos de eventos específicosExcludeAnalysisEvents
: não retorne eventos de 'Análise'. Por padrão, as consultas da EventStore retornarão com eventos de "análise" sempre que possível. Os eventos de análise são eventos de canal operacional mais avançados que contêm contexto ou informações adicionais além de um evento regular do Service Fabric e fornecem mais profundidade.SkipCorrelationLookup
: não procure potenciais eventos correlacionados no cluster. Por padrão, o EventStore tentará correlacionar eventos em um cluster e vincular seus eventos quando possível.
Cada entidade em um cluster pode ser consultas para eventos. Você também pode consultar eventos para todas as entidades do tipo. Por exemplo, você pode consultar eventos para um nó específico ou para todos os nós em seu cluster. O conjunto atual de entidades para as quais você pode consultar eventos é (com a forma como a consulta seria estruturada):
- Agrupamento:
/EventsStore/Cluster/Events
- Nós:
/EventsStore/Nodes/Events
- Nó:
/EventsStore/Nodes/<NodeName>/$/Events
- Aplicações:
/EventsStore/Applications/Events
- Aplicação:
/EventsStore/Applications/<AppName>/$/Events
- Serviços:
/EventsStore/Services/Events
- Serviço:
/EventsStore/Services/<ServiceName>/$/Events
- Divisórias:
/EventsStore/Partitions/Events
- Partição:
/EventsStore/Partitions/<PartitionID>/$/Events
- Réplicas:
/EventsStore/Partitions/<PartitionID>/$/Replicas/Events
- Réplica:
/EventsStore/Partitions/<PartitionID>/$/Replicas/<ReplicaID>/$/Events
Nota
Ao fazer referência a um nome de aplicativo ou serviço, a consulta não precisa incluir o prefixo "fabric:/". Além disso, se os nomes do aplicativo ou serviço tiverem um "/", alterne-o para um "~" para manter a consulta funcionando. Por exemplo, se seu aplicativo aparecer como "fabric:/App1/FrontendApp", suas consultas específicas do aplicativo serão estruturadas como /EventsStore/Applications/App1~FrontendApp/$/Events
.
Além disso, os relatórios de integridade para serviços hoje aparecem no aplicativo correspondente, para que você consulte DeployedServiceHealthReportCreated
eventos para a entidade de aplicativo correta.
Consultar o EventStore por meio de pontos de extremidade da API REST
Você pode consultar o EventStore diretamente por meio de um ponto de extremidade REST, fazendo GET
solicitações para: <your cluster address>/EventsStore/<entity>/Events/
.
Por exemplo, para consultar todos os eventos de Cluster entre 2018-04-03T18:00:00Z
e 2018-04-04T18:00:00Z
, sua solicitação teria a seguinte aparência:
Method: GET
URL: http://mycluster:19080/EventsStore/Cluster/Events?api-version=6.4&StartTimeUtc=2018-04-03T18:00:00Z&EndTimeUtc=2018-04-04T18:00:00Z
Isso pode retornar nenhum evento ou a lista de eventos retornados em json:
Response: 200
Body:
[
{
"Kind": "ClusterUpgradeStart",
"CurrentClusterVersion": "0.0.0.0:",
"TargetClusterVersion": "6.2:1.0",
"UpgradeType": "Rolling",
"RollingUpgradeMode": "UnmonitoredAuto",
"FailureAction": "Manual",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:18:59.4313064Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeDomainComplete",
"TargetClusterVersion": "6.2:1.0",
"UpgradeState": "RollingForward",
"UpgradeDomains": "(0 1 2)",
"UpgradeDomainElapsedTimeInMs": "78.5288",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:19:59.5729953Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeDomainComplete",
"TargetClusterVersion": "6.2:1.0",
"UpgradeState": "RollingForward",
"UpgradeDomains": "(3 4)",
"UpgradeDomainElapsedTimeInMs": "0",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:20:59.6271949Z",
"HasCorrelatedEvents": false
},
{
"Kind": "ClusterUpgradeComplete",
"TargetClusterVersion": "6.2:1.0",
"OverallUpgradeElapsedTimeInMs": "120196.5212",
"EventInstanceId": "090add3c-8f56-4d35-8d57-a855745b6064",
"TimeStamp": "2018-04-03T20:20:59.8134457Z",
"HasCorrelatedEvents": false
}
]
Aqui podemos ver que entre 2018-04-03T18:00:00Z
e 2018-04-04T18:00:00Z
, este cluster completou com sucesso sua primeira atualização quando foi levantado pela primeira vez, de "CurrentClusterVersion": "0.0.0.0:"
para "TargetClusterVersion": "6.2:1.0"
, em "OverallUpgradeElapsedTimeInMs": "120196.5212"
.
Consultar o EventStore programaticamente
Você também pode consultar o EventStore programaticamente, por meio da biblioteca de cliente do Service Fabric.
Depois de configurar o Cliente do Service Fabric, você pode consultar eventos acessando a EventStore da seguinte forma: sfhttpClient.EventStore.<request>
Aqui está um exemplo de solicitação para todos os eventos de cluster entre 2018-04-03T18:00:00Z
e 2018-04-04T18:00:00Z
, por meio da GetClusterEventListAsync
função.
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl, settings);
var clstrEvents = sfhttpClient.EventsStore.GetClusterEventListAsync(
"2018-04-03T18:00:00Z",
"2018-04-04T18:00:00Z")
.GetAwaiter()
.GetResult()
.ToList();
Aqui está outro exemplo que consulta a integridade do cluster e todos os eventos de nó em setembro de 2018 e os imprime.
const int timeoutSecs = 60;
var clusterUrl = new Uri(@"http://localhost:19080"); // This example is for a Local cluster
var sfhttpClient = ServiceFabricClientFactory.Create(clusterUrl);
var clusterHealth = sfhttpClient.Cluster.GetClusterHealthAsync().GetAwaiter().GetResult();
Console.WriteLine("Cluster Health: {0}", clusterHealth.AggregatedHealthState.Value.ToString());
Console.WriteLine("Querying for node events...");
var nodesEvents = sfhttpClient.EventsStore.GetNodesEventListAsync(
"2018-09-01T00:00:00Z",
"2018-09-30T23:59:59Z",
timeoutSecs,
"NodeDown,NodeUp")
.GetAwaiter()
.GetResult()
.ToList();
Console.WriteLine("Result Count: {0}", nodesEvents.Count());
foreach (var nodeEvent in nodesEvents)
{
Console.Write("Node event happened at {0}, Node name: {1} ", nodeEvent.TimeStamp, nodeEvent.NodeName);
if (nodeEvent is NodeDownEvent)
{
var nodeDownEvent = nodeEvent as NodeDownEvent;
Console.WriteLine("(Node is down, and it was last up at {0})", nodeDownEvent.LastNodeUpAt);
}
else if (nodeEvent is NodeUpEvent)
{
var nodeUpEvent = nodeEvent as NodeUpEvent;
Console.WriteLine("(Node is up, and it was last down at {0})", nodeUpEvent.LastNodeDownAt);
}
}
Exemplos de cenários e consultas
Aqui estão alguns exemplos de como você pode chamar as APIs REST do Repositório de Eventos para entender o status do cluster.
Atualizações de cluster:
Para ver a última vez que o cluster foi bem-sucedido ou tentou ser atualizado na semana passada, você pode consultar as APIs para atualizações concluídas recentemente para o cluster, consultando os eventos "ClusterUpgradeCompleted" no EventStore: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=ClusterUpgradeCompleted
Problemas de atualização de cluster:
Da mesma forma, se houver problemas com uma atualização recente do cluster, você poderá consultar todos os eventos da entidade do cluster. Você verá vários eventos, incluindo o início das atualizações e cada UD para a qual a atualização foi implementada com êxito. Você também verá eventos para o ponto em que a reversão começou e eventos de integridade correspondentes. Aqui está a consulta que você usaria para isso: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Alterações no status do nó:
Para ver as alterações de status do nó nos últimos dias - quando os nós subiram ou desceram, ou foram ativados ou desativados (pela plataforma, pelo serviço de caos ou pela entrada do usuário) - use a seguinte consulta: https://mycluster.cloudapp.azure.com:19080/EventsStore/Nodes/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Eventos da aplicação:
Você também pode acompanhar suas implantações e atualizações recentes de aplicativos. Use a seguinte consulta para ver todos os eventos do aplicativo em seu cluster: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z
Histórico de saúde de um aplicativo:
Além de ver apenas os eventos do ciclo de vida do aplicativo, você também pode querer ver dados históricos sobre a integridade de um aplicativo específico. Você pode fazer isso especificando o nome do aplicativo para o qual deseja coletar os dados. Use esta consulta para obter todos os eventos de integridade do aplicativo: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/myApp/$/Events?api-version=6.4&starttimeutc=2018-03-24T17:01:51Z&endtimeutc=2018-03-29T17:02:51Z&EventsTypesFilter=ApplicationNewHealthReport
.
Se você quiser incluir eventos de integridade que podem ter expirado (já passou o tempo de vida (TTL)), adicione ,ApplicationHealthReportExpired
ao final da consulta para filtrar dois tipos de eventos.
Saúde histórica para todos os serviços em "myApp":
Atualmente, os eventos de relatório de integridade para serviços aparecem como DeployedServicePackageNewHealthReport
eventos na entidade de aplicativo correspondente. Para ver como seus serviços têm se saído para "App1", use a seguinte consulta: https://mycluster.cloudapp.azure.com:19080/EventsStore/Applications/myapp/$/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=DeployedServicePackageNewHealthReport
Reconfiguração da partição:
Para ver todos os movimentos de partição que aconteceram no cluster, consulte o PartitionReconfigured
evento. Isso pode ajudá-lo a descobrir quais cargas de trabalho foram executadas em qual nó em momentos específicos, ao diagnosticar problemas em seu cluster. Aqui está uma consulta de exemplo que faz isso: https://mycluster.cloudapp.azure.com:19080/EventsStore/Partitions/Events?api-version=6.4&starttimeutc=2018-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=PartitionReconfigured
Serviço de caos:
Há um evento para quando o serviço Chaos é iniciado ou interrompido que é exposto no nível do cluster. Para ver seu uso recente do serviço Chaos, use a seguinte consulta: https://mycluster.cloudapp.azure.com:19080/EventsStore/Cluster/Events?api-version=6.4&starttimeutc=2017-04-22T17:01:51Z&endtimeutc=2018-04-29T17:02:51Z&EventsTypesFilter=ChaosStarted,ChaosStopped