Прометей не собирает данные для счетчика

Prometheus не может собирать данные для счетчика при вызове инкремента из консоли ipython или задач сельдерея. Счетчик работает для запроса API, но вне запроса API не работал, как если бы я пробовал его из консоли Ipython, из задач сельдерея для увеличения счетчика.

Прометей тоже не бросил никаких исключений.

# Using Sanic python framework (async) and python 3.6.
Here are the library Details:
sanic==0.7.0
ipython
prometheus-client==0.5.0
python 3.6.5

Вот конфигурация, которую я использую в приложении Sanic Python для настройки Prometheus:

class MetricsHandler(HTTPMethodView):
    """prometheus metrics exporter"""

    async def get(self, request, *args, **kwargs):
        registry = None
        if 'prometheus_multiproc_dir' in os.environ:
            registry = core.REGISTRY
        else:
            registry = CollectorRegistry()
            multiprocess.MultiProcessCollector(registry)
        data = generate_latest(registry)
        return raw(data, content_type=CONTENT_TYPE_LATEST)

# ipython console example:
In [1]: Prom_Count = Counter('Prom_Counter', 'prom counter', ['func', 'count'])
In [2]: Prom_Count.labels("test", "count").inc()

prometheus_multiproc_dir enviroment varibale is also set.

Раньше мы использовали библиотеку sanic-prometheus:

prometheus-client==0.2.0
sanic-prometheus==0.1.4
wrapt==1.10.11

Заранее спасибо.


person logsv    schedule 21.12.2018    source источник


Ответы (1)


Подумайте о том, чтобы сделать это:

def get_registry():
    if 'prometheus_multiproc_dir' in os.environ:
        registry = CollectorRegistry()
        multiprocess.MultiProcessCollector(registry)
    else:
        registry = REGISTRY
    return registry

А затем передать реестр Counter конструктору:

Prom_Count = Counter('Prom_Counter', 'prom counter', ['func', 'count'], registry=get_registry())

Однажды я столкнулся с такой проблемой, и у меня это сработало

person py_dude    schedule 21.12.2018
comment
он работал в консоли ipython, но не работал в задачах сельдерея. - person logsv; 21.12.2018
comment
Проблема, с которой я столкнулся в celery_tasks, заключалась в том, что сервер, работающий в экземпляре сельдерея, не отвечал на вызов API / metrics. Если вы можете увидеть счетчик с помощью вызова collect (), а данные недоступны в вызове API / metrics, скорее всего, проблема в этом. - person Arjunsingh; 29.03.2019
comment
@Arjunsingh ты когда-нибудь догадывался об этом? Я могу получить конечную точку метрик, обслуживаемую вместе с Celery, но мои настраиваемые счетчики никогда не обновляются. - person dacox; 17.11.2020
comment
@dacox Я не помню точную проблему, но я помню, что у нее была проблема с регистрацией или путем к файлу. - person Arjunsingh; 23.11.2020