wróc
Zdjęcie do: GCP Metryki Pub/Sub
ikona kalendarz 2023-02-27 12:00:00

GCP Metryki Pub/Sub

 Korzystając z SDK Google możemy w łatwy sposób pobrać metryki dla Pub/Sub.Aby pobrać metryki dla projektu skorzystamy z biblioteki Google.Cloud.Monitoring.V3. Pozwala ona pobrać metryki dla większości serwisów oferowanych przez GCP. Nas w tym przypadku interesować będą metryki dla Pub/Suba. Spis metryk które możemy pobrać znajduje się w oficjalnej dokumentacji: https://cloud.google.com/monitoring/api/metrics_gcp#gcp-pubsubRozpoczynamy od instalacji biblioteki, które umożliwi pobranie metryk:API dla jednego zapytania obsługuje pobranie tylko jednej metryki. Nie możemy zatem w jednym zapytaniu pobrać np. czasu najstarszej wiadomości jak i ilości wiadomości oczekujących na subskrypcji.  var metricServiceClient = await MetricServiceClient.CreateAsync(); var request = new ListTimeSeriesRequest { ProjectName = new ProjectName("project_id"), Filter = "metric.type = \"pubsub.googleapis.com/subscription/oldest_unacked_message_age\"", Interval = new TimeInterval { StartTime = Timestamp.FromDateTime(DateTime.UtcNow.AddMinutes(-10)), EndTime = Timestamp.FromDateTime(DateTime.UtcNow) }, View = ListTimeSeriesRequest.Types.TimeSeriesView.Full }; var results = metricServiceClient.ListTimeSeriesAsync(request); await foreach (var result in results) { Console.WriteLine(result.Resource.Labels["subscription_id"]); foreach (var point in result.Points) { Console.Write(point.Interval.StartTime); switch (point.Value.ValueCase) { case TypedValue.ValueOneofCase.BoolValue: Console.WriteLine(point.Value.BoolValue); break; case TypedValue.ValueOneofCase.Int64Value: Console.WriteLine(point.Value.Int64Value); break; case TypedValue.ValueOneofCase.DoubleValue: Console.WriteLine(point.Value.DoubleValue); break; case TypedValue.ValueOneofCase.StringValue: Console.WriteLine(point.Value.StringValue); break; case TypedValue.ValueOneofCase.DistributionValue: Console.WriteLine(point.Value.DistributionValue); break; default: throw new ArgumentOutOfRangeException(); } } Console.WriteLine(new string('-', 50)); } Wynik po wykonaniu kodu:Otrzymany wynik zgodnie z dokumentacją podany jest w sekundach. A teraz przykład jak odfiltrować subskrypcję po jej nazwie (subscription_id). request = new ListTimeSeriesRequest { ProjectName = new ProjectName("project_id"), Filter = "metric.type = \"pubsub.googleapis.com/subscription/num_undelivered_messages\" AND (resource.label.subscription_id = starts_with(\"aaa.\") OR resource.label.subscription_id = starts_with(\"bbb.\"))", Interval = new TimeInterval { StartTime = Timestamp.FromDateTime(DateTime.UtcNow.AddMinutes(-1)), EndTime = Timestamp.FromDateTime(DateTime.UtcNow) }, View = ListTimeSeriesRequest.Types.TimeSeriesView.Full }; Oczywiście jeżeli nie chcemy wykonywać operacji typu like możemy od razu podać nazwę subskrypcji.Pobrać możemy dowolną metrykę z oficjalnej specyfikacji. Metryki mogą być agregowane w różne okienka czasowe (minutowe, lub dłuższe). Za pomocą parametru Interval kontrolujemy przedział czasowy otrzymanych wyników. 
Przejdź do pełnego artykułu
ikona autor Autor
Programowanie w .NET
Blog o tematyce związanej z platformą .NET i szeroko pojętym programowaniem. Znajdziesz tu informacje nt. platformy .NET, języka C#, wiadomości o wzorcach projektowych oraz tworzeniu poprawnej architektury oprogramowania.
Przejdź do strony

Wykorzystujemy pliki cookies. Szczegóły znajdziesz w polityce prywatności