Данные kube-state-metrics, собранные Prometheus вне кластера, были отвержены.

Вопрос или проблема

По историческим причинам мой Prometheus развернут вне кластера k8s. У меня несколько кластеров k8s, и каждый кластер развертывает kube-state-metrics. Я использую static_configs для сбора данных по метрикам из разных кластеров. Конфигурация выглядит следующим образом:

scrape_configs:
- job_name: global-kube-state-metrics
  honor_labels: true
  honor_timestamps: true
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  follow_redirects: true
  enable_http2: true
  static_configs:
    - targets:
      - 10.29.14.212:30897
      labels:
        cluster: global

Другой:

scrape_configs:
- job_name: k8s-18-86-kube-state-metrics
  honor_labels: true
  honor_timestamps: true
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics
  scheme: http
  follow_redirects: true
  enable_http2: true
  static_configs:
    - targets:
      - 10.29.18.87:31770
      labels:
        cluster: k8s-18-86

Я добавляю метку cluster к каждому кластеру для различения.

Но мой Prometheus отбрасывает некоторые данные, вот так:

ts=2024-10-11T03:14:31.016Z caller=scrape.go:1738 level=warn component="scrape manager" scrape_pool=global-kube-state-metrics target=http://10.29.14.212:30897/metrics msg="Ошибка при загрузке образцов с разными значениями, но с одинаковой меткой времени" num_dropped=1
ts=2024-10-11T03:15:01.015Z caller=scrape.go:1738 level=warn component="scrape manager" scrape_pool=global-kube-state-metrics target=http://10.29.14.212:30897/metrics msg="Ошибка при загрузке образцов с разными значениями, но с одинаковой меткой времени" num_dropped=1

Может кто-то помочь мне проверить проблему или подсказать, как скорректировать конфигурацию?

Ответ или решение

Проблема, с которой вы столкнулись, связана с тем, что Prometheus не может инжектировать метрики с одинаковыми временными метками, но разными значениями. Это поведение описано в документации Prometheus и иллюстрируется сообщением об ошибке, которое вы видите:

Error on ingesting samples with different value but same timestamp

Причины возникновения этой ошибки могут быть разными, и я предложу несколько шагов для диагностики и решения проблемы.

Шаги для диагностики и решения

  1. Проверьте метрики, которые вы собираете:

    • Убедитесь, что экземпляр kube-state-metrics, установленный в вашем кластере, не создает метрики с одинаковыми временными метками и разными значениями.
    • Посмотрите на ваши метрики через /metrics на каждом из целевых адресов (например, http://10.29.14.212:30897/metrics). Сравните их, чтобы определить, есть ли конфликты или метрики с одинаковыми временными метками.
  2. Используйте уникальные метрики:

    • Убедитесь, что каждая метрика имеет уникальный набор меток. Если у вас множество подов, особенно при изменении конфигурации в кластере, возможно, следует изменить логику именования или метки, чтобы избежать дублирования.
  3. Проверка конфигураций скрапинга:

    • Убедитесь, что каждая конфигурация scrape имеет свои уникальные job_name и, при необходимости, проверьте, не конфигурация ли вашего Prometheus неправильно копирует данные с разных целевых адресов.
  4. Обработайте временные метки:

    • Рассмотрите внедрение временных меток в свои метрики, если они этого еще не делают. Это может помочь избежать конфликта.
  5. Измените настройки scrape_interval:

    • Попробуйте увеличить scrape_interval для ваших задач. Возможно, изменение интервала уменьшит вероятность получения метрик с одинаковыми временными метками, особенно если ваши экземпляры метрик обновляются с некоторой задержкой.
  6. Использование регистраторов/диспетчеров:

    • Если вы собираете метрики из разных источников, рассмотрите возможность использования регистраторов или диспетчеров метрик, чтобы аккумулировать и обрабатывать данные до их передачи в Prometheus.

Пример обновленной конфигурации

Обновленная конфигурация для вашего файла prometheus.yml может выглядеть следующим образом:

scrape_configs:
- job_name: global-kube-state-metrics
  honor_labels: true
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics
  static_configs:
    - targets:
      - 10.29.14.212:30897
      labels:
        cluster: global

- job_name: k8s-18-86-kube-state-metrics
  honor_labels: true
  scrape_interval: 30s
  scrape_timeout: 10s
  metrics_path: /metrics
  static_configs:
    - targets:
      - 10.29.18.87:31770
      labels:
        cluster: k8s-18-86

Обратите внимание, что если изменения не помогли, вам может потребоваться более глубокий анализ или помощь сообщества. Вы также можете рассмотреть возможность обращения к документации kube-state-metrics или Prometheus для получения дополнительных указаний.

Я надеюсь, что эти советы помогут вам решить проблему с инжектированием метрик в Prometheus.

Оцените материал
Добавить комментарий

Капча загружается...