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, связанных с потерей соединения, что тоже может влиять на качество мониторинга и автоматизации.