Как я могу получить количество недоставленных сообщений (метрика API), присутствующих в Pubsub, с помощью клиентской библиотеки Python?

Я использую Pubsub в качестве инструмента механизма очередей и хочу знать количество сообщений, находящихся в теме Pubsub. С той же целью я решил использовать метрику API Google pubsub.googleapis.com/subscription/num_undelivered_messages, но я не могу понять, как этого можно добиться с помощью клиентской библиотеки Python Monitoring_v3.

from google.cloud import monitoring_v3
import time,os
os.environ["GOOGLE_APPLICATION_CREDENTIALS"]="/key.json"

client = monitoring_v3.MetricServiceClient()
project = 'project_name'
project_name = client.project_path(project)
metric_type = "pubsub.googleapis.com/subscription/num_undelivered_messages"

Не могли бы вы рассказать мне, как действовать дальше и запросить эту метрику API Google с именем num_undelivered_messages?


person john mich    schedule 10.04.2019    source источник
comment
Я использую клиентскую библиотеку Google Cloud, которая упоминается в следующей ссылке для мониторинга Stackdriver cloud. google.com/monitoring/docs/reference/libraries   -  person john mich    schedule 10.04.2019


Ответы (2)


Это работает для меня, но я не уверен, что это намерение создателя.

from google.cloud import monitoring_v3
from google.cloud.monitoring_v3 import query

project = "..."
client = monitoring_v3.MetricServiceClient()
result = query.Query(
    client,
    project,
    'pubsub.googleapis.com/subscription/num_undelivered_messages',
    minutes=1).as_dataframe()
person figlio perduto    schedule 14.06.2019
comment
Не подскажете, как отфильтровать по конкретной подписке? - person Neeraj; 02.12.2019
comment
вы можете отфильтровать позже, так как result - это словарь с ключом для имени подписки - person figlio perduto; 05.12.2019

Возможно, вам потребуется запустить код таким образом для конкретной подписки:

from google.cloud import monitoring_v3
from google.cloud.monitoring_v3 import query

project = "my-project"
client = monitoring_v3.MetricServiceClient()
result = query.Query(client,project,'pubsub.googleapis.com/subscription/num_undelivered_messages', minutes=60).as_dataframe()

print(result['pubsub_subscription'][project]['subscription_name'][0])
person Steeve    schedule 04.12.2019
comment
Спасибо :) так будут ли сообщения 60-минутной давности? - person john mich; 28.02.2020