для прометеуса?
за основу был взять prometheus_client (https://github.com/prometheus/client_python)
по примерам из инета сделал экспортер примерно таким образом:
class CustomCollector(object):
def __init__(self):
pass
def collect(self):
g = GaugeMetricFamily("MemoryUsage", 'Help text', labels=['instance'])
g.add_metric(["instance01.us.west.local"], 20)
yield g
if __name__ == '__main__':
start_http_server(8000)
REGISTRY.register(CustomCollector())
while True:
time.sleep(1)
запустил, все работает, запустил скрейпинг непрерывно на тест, выяснилось, что есть утечка памяти, после 2000 скрейпов потребление RAM выросло с 13 до 20 Мб, запустил 20000 скрейпов, сейчас в процессе, потребление RAM уже 60Мб
в коде prometheus_client внутри метода add_metric вызывается append: https://github.com/prometheus/client_python/blob/c49e55a244acde7d4879b7fba2a130019656fb35/prometheus_client/metrics_core.py#L126
то есть внутри класса хранится вся история сбора метрик (вместо того, чтобы перезаписывания)
кто-нибудь сталкивался с таким?
надо реестр каждый раз заново создавать
Обсуждают сегодня