В данный момент я использую стек Prometheus + Thanos для сбора метрик, и это … нормально … но он чрезмерно требует памяти. Также он склонен давать сбои и использовать всю память (OOM), если отправляются более сложные запросы, вместо того чтобы просто дольше их обрабатывать.
VictoriaMetrics намного эффективнее использует память, чем Prometheus, поэтому мне хотелось бы рассмотреть возможность его замены. Но мне нужно выполнять федеративные запросы по нескольким хранилищам и выгружать метрики с обратным просмотром в объектное хранилище. Эти задачи в настоящее время выполняются Thanos Receive, который собирает данные из побочных процессов Prometheus, передает их в Thanos Store и доступен через Thanos Query.
Неясно, будет ли эта модель хорошо работать с VictoriaMetrics – совместим ли TSDB VM с Thanos Sidecar. Также есть вопросы, касающиеся диалекта PromQL.
Но VM, похоже, не поддерживает федеративные запросы с фан-аутом или использование объектного хранилища, так что я не могу просто заменить Thanos.
Есть ли разумный и поддерживаемый способ интеграции VictoriaMetrics и Thanos, чтобы Thanos занимался хранением резервных копий и фан-аутом, но VictoriaMetrics использовался вместо Prometheus для сборки данных, выполнения запросов с горячими данными, обработки правил записи и т.д.?
Если нет, есть ли какие-либо советы по тому, как заставить Prometheus выполнять более сложные запросы без использования оперативной памяти, приближающейся к бесконечности? Я пришел из PostgreSQL, где более сложные запросы просто медленнее, так как движок выполнения RDBMS использует временные файлы и сортировку по ленте и различные другие стратегии выполнения для обработки наборов данных, намного превышающих доступную оперативную память. Prometheus … кажется, просто требует больше оперативной памяти.
Ответ
Существующая архитектура, основанная на стеке Prometheus и Thanos, может быть заменена на VictoriaMetrics и Thanos. Это может значительно снизить потребление памяти, а также улучшить производительность при выполнении запросов. Однако вам необходимо будет выполнить некоторые шаги для адаптации вашей системы.
Вот подход, который можно рассмотреть для интеграции VictoriaMetrics и Thanos:
-
Использование VictoriaMetrics для сбора данных:
VictoriaMetrics может работать в режиме, аналогичном Prometheus, для сбора метрик. Вы можете настроить VictoriaMetrics для выполнения периодических запросов к вашим целевым системам и сбора данных. Убедитесь, что вы используете правильные настройки для оптимального использования памяти и производительности. -
Интеграция с Thanos:
VictoriaMetrics совместима с Thanos, но вам нужно будет использовать конфигурацию, которая позволяет объединить их. ВикторияMetric не поддерживает Thanos Sidecar напрямую, зато вы можете использовать Thanos Receive для приема метрик из VictoriaMetrics.-
Настройка Thanos Receive: Настройте Thanos Receive, чтобы получать данные от VictoriaMetrics. Это можно настроить с использованием HTTP API VictoriaMetrics для получения метрик.
- Конфигурация Thanos Store: Убедитесь, что ваши метрики правильно сохраняются в Thanos Store, чтобы они могли быть доступны для запросов.
-
-
Retention и управление запасами:
Thanos может осуществлять управление долгосрочным хранением и выносить неактивные данные в объектные хранилища (например, S3). Вы можете настроить Thanos для автоматического перемещения устаревших данных в облачное хранилище, что сведет к минимуму потребление ресурсов вашего основного кластера. -
Федеративные запросы:
Для реализации федеративных запросов, если вы используете несколько экземпляров VictoriaMetrics, вы можете использовать Thanos Query, чтобы объединить результаты из нескольких источников. Thanos будет выступать в роли управляющего звена, позволяя вам выполнять запросы к данным, хранящимся в разных экземплярах VictoriaMetrics. -
Снижение нагрузки на Prometheus:
Если вы решите оставить Prometheus для некоторых задач, то важно оптимизировать его конфигурацию. Попробуйте следующие меры:- Убедитесь, что использование
recording rules
минимально и целенаправленно. Это поможет сократить нагрузку на Prometheus. - Используйте
subquery
в PromQL для выполнения более сложных запросов, не нагружая память. - Настройте
query timeout
и другие лимиты на уровне Prometheus, чтобы избежать ситуации, когда он использует слишком много ресурсов.
- Убедитесь, что использование
- Мониторинг и оптимизация:
После настройки мониторьте использование ресурсов и производительность вашей системы. Используйте инструменты мониторинга для выявления узких мест и ненужной нагрузки на память.
Все эти решения должны помочь вам создать более эффективную архитектуру для сбора, хранения и обработки метрик, максимально используя возможности VictoriaMetrics и Thanos, минимизируя при этом потребление памяти и улучшая производительность.