Как следить за выполнением задания из сельдерея с помощью Прометея - PullRequest
0 голосов
/ 27 января 2020

Я пытаюсь использовать Prometheus для мониторинга задач Celery, для которых я новичок, и у меня проблема с увеличением счетчика. Это просто не увеличивается, если я пытаюсь сделать это внутри Celery.task

Например,

from celery import Celery
from prometheus_client import Counter

app = Celery('tasks', broker='redis://localhost')
TASKS = Counter('tasks', 'Count of tasks')


@app.task
def add(x, y):
    TASKS.inc(1)
    return x + y

Когда я посещаю конечную точку, чтобы увидеть, какие метрики выставлены, я вижу tasks_total, но его значение не изменяется независимо от того, сколько add задач было выполнено. Тем не менее, когда я пытаюсь увеличить тот же счетчик от обычной функции, это работает.

Например,

def dummy_add(x, y):
    TASKS.inc()
    return x + y

Не могли бы вы объяснить мне, что я делаю неправильно?

1 Ответ

1 голос
/ 27 января 2020

По умолчанию Celery использует пул процессов для рабочих. Это не go хорошо с клиентом Prometheus Python, и вы должны использовать его многопроцессорный режим .

Возможно, вы захотите использовать одного из существующих экспортеров Celery (например, это ), которые используют другой подход. Они просто запускают свой собственный процесс и слушают события от рабочих, таким образом преодолевая упомянутые выше недостатки.

...