Prometheus error: "Error on ingesting out-of-order samples"
Ошибка Prometheus "Error on ingesting out-of-order samples" возникает, когда система мониторинга Prometheus сталкивается с попыткой записать данные с временными метками, которые находятся в неправильном порядке. Эта ошибка может нарушить корректную работу сбора метрик и их обработку. В данной статье мы разберём причины возникновения этой ошибки и предложим решения для её устранения, опираясь на фактические данные и проверенные методы.
Причины ошибки "Error on ingesting out-of-order samples" в Prometheus
Основная причина этой ошибки заключается в том, что Prometheus ожидает, что образцы данных (samples) будут поступать с временными метками в правильной последовательности. Однако если данные приходят "задом наперёд" или с опозданием, Prometheus выдает ошибку "Error on ingesting out-of-order samples". Вот основные причины возникновения этой ошибки:
- Неправильные метки времени в экспортёре: Некоторые экспортёры могут генерировать метрики с неправильными временными метками, что приводит к ошибке при их попытке сохранить.
- Проблемы с сетью: Если метрики доставляются с задержками из-за сетевых проблем, это может привести к несогласованности временных меток.
- Многократное использование одних и тех же меток: Если одни и те же метрики пересылаются с разными временными метками, это также может вызвать ошибку.
- Проблемы с временными зонами: Различия в настройках часовых поясов на экспортёрах или серверах могут вызвать проблему с временными метками.
Решение проблемы "Error on ingesting out-of-order samples"
Для устранения ошибки важно выявить точную причину её появления. Рассмотрим несколько способов устранения проблемы.
1. Проверка экспортёров и временных меток
Первым шагом является проверка экспортёров, которые отправляют метрики в Prometheus. Убедитесь, что они генерируют правильные временные метки и что все системы синхронизированы по времени. Для этого можно использовать команду ntpq -p
для проверки синхронизации времени на серверах:
ntpq -p
Также можно добавить флаг --storage.tsdb.allow-overlapping-blocks
в конфигурацию Prometheus для временного решения проблемы. Однако это не устраняет корневую причину и может привести к накоплению ошибок.
2. Проверка сетевых задержек
Иногда причиной ошибки становятся сетевые задержки, когда метрики от экспортёров поступают с опозданием. Проверьте стабильность сети между экспортёрами и Prometheus, используя ping
и traceroute
:
ping your-exporter-ip
traceroute your-exporter-ip
Если задержки высоки, оптимизируйте сеть или настройте Prometheus на увеличение времени ожидания метрик.
3. Проверка повторного сбора метрик
Иногда ошибку вызывает повторный сбор одних и тех же метрик с разными временными метками. Убедитесь, что один и тот же экспортёр не отправляет метрики с дублирующимися метками времени. Можно использовать фильтрацию дубликатов с помощью настроек в Prometheus.
4. Настройка временных зон
Если разные системы используют разные временные зоны, это может вызвать проблему с временными метками. Убедитесь, что все серверы и экспортёры настроены на использование одной и той же часовой зоны. Команда date
покажет текущие настройки времени:
date
Если временные зоны различаются, синхронизируйте их с помощью timedatectl
:
sudo timedatectl set-timezone UTC
Пример конфигурации для устранения ошибки
Рассмотрим пример конфигурации экспортёра, в котором правильно настроены временные метки:
global:
scrape_interval: 15s
scrape_timeout: 10s
evaluation_interval: 15s
scrape_configs:
- job_name: 'exporter'
static_configs:
- targets: ['localhost:9100']
metric_relabel_configs:
- source_labels: [__name__]
regex: '.*'
action: 'keep'
Здесь мы настраиваем частоту сбора метрик, а также добавляем конфигурацию для фильтрации дублирующихся метрик. Это может помочь избежать проблемы с "out-of-order samples".
Заключение
Ошибка "Error on ingesting out-of-order samples" в Prometheus может быть одной из многих, с которыми сталкиваются специалисты DevOps. Если вы работаете с инфраструктурой, связанной с мониторингом, важно понимать и другие распространённые ошибки. Например, стоит ознакомиться с решением ошибок в Jenkins, связанных с потерей соединения, что тоже может влиять на качество мониторинга и автоматизации.