Как объединить реализацию мониторинга Prometheus с несколькими задачами Celery? - PullRequest
0 голосов
/ 06 мая 2020

У меня есть установка, в которой я запускаю несколько (3) рабочих сельдерея, и у меня есть 8 разных задач: - сельдерей - высокочастотное задание: задача 1, задача 2 - низкочастотные задания: задачи 3-8, каждое в своих кубернетах стручок

Я хочу реализовать мониторинг с помощью prometheus. Для этого я использую библиотеку prometheus_client .

from celery import Celery, signals
from prometheus_client import start_http_server as start_prometheus_http_server

REDIS_HOST = os.environ.get("REDIS_HOST", "localhost")
BROKER_URL = f"redis://{REDIS_HOST}:6379/0"
app = Celery("tasks", broker=BROKER_URL)

app.conf.task_routes = {
    "hifreq.main": {"queue": "main_queue"},
    "hifreq.final": {"queue": "final_queue"},
    "lowfreq.*": {"queue": "lowfreq_queue"},
}

@signals.celeryd_after_setup.connect
def setup_direct_queue(sender, instance, **kwargs):
    start_prometheus_http_server(9090)

@app.task(name="hifreq.main")
def long_running_task():
    data_loading()

DATA_LOADING_TIME = Summary(
    "data_loading_seconds",
    "Time spent loading the data",
)

@DATA_LOADING_TIME.time()
def data_loading():
    pass

Это запускает сервер Prometheus (я думаю, он запускает по одному на каждого рабочего). Я показал его через вход / службу, так что я могу связаться с сервером, и когда я перехожу к модулю, в котором запущен рабочий 'hifreq', я получаю:

# HELP python_gc_objects_collected_total Objects collected during gc
# TYPE python_gc_objects_collected_total counter
python_gc_objects_collected_total{generation="0"} 5828.0
python_gc_objects_collected_total{generation="1"} 1643.0
python_gc_objects_collected_total{generation="2"} 294.0
# HELP python_gc_objects_uncollectable_total Uncollectable object found during GC
# TYPE python_gc_objects_uncollectable_total counter
python_gc_objects_uncollectable_total{generation="0"} 0.0
python_gc_objects_uncollectable_total{generation="1"} 0.0
python_gc_objects_uncollectable_total{generation="2"} 0.0
# HELP python_gc_collections_total Number of times this generation was collected
# TYPE python_gc_collections_total counter
python_gc_collections_total{generation="0"} 152.0
python_gc_collections_total{generation="1"} 13.0
python_gc_collections_total{generation="2"} 2.0
# HELP python_info Python platform information
# TYPE python_info gauge
python_info{implementation="CPython",major="3",minor="6",patchlevel="9",version="3.6.9"} 1.0
# HELP process_virtual_memory_bytes Virtual memory size in bytes.
# TYPE process_virtual_memory_bytes gauge
process_virtual_memory_bytes 3.19164416e+08
# HELP process_resident_memory_bytes Resident memory size in bytes.
# TYPE process_resident_memory_bytes gauge
process_resident_memory_bytes 4.4453888e+07
# HELP process_start_time_seconds Start time of the process since unix epoch in seconds.
# TYPE process_start_time_seconds gauge
process_start_time_seconds 1.58876788561e+09
# HELP process_cpu_seconds_total Total user and system CPU time spent in seconds.
# TYPE process_cpu_seconds_total counter
process_cpu_seconds_total 2.1
# HELP process_open_fds Number of open file descriptors.
# TYPE process_open_fds gauge
process_open_fds 30.0
# HELP process_max_fds Maximum number of open file descriptors.
# TYPE process_max_fds gauge
process_max_fds 1.048576e+06

, которые являются значениями по умолчанию Python метрики, но не ожидаемые data_loading_seconds метри c, которые я определил сам. Я подозреваю, что что-то не так с несколькими воркерами, каждый из которых имеет свой собственный сервер, но я не совсем уверен, что именно происходит. Любая помощь приветствуется!

...