Как настроить prometheus.yml для очистки только запущенных контейнеров для узла-экспортера

У меня проблема с grafana / prometheus, когда я использовал node-exporter для сбора ресурсов хоста с узлов роя докеров.

Я тестировал только один узел роя. Когда я использовал запрос
label_values(node_uname_info{job="node-exporter"}, instance) в переменных Grafana. Результат вернул старый IP-адрес остановленных контейнеров и IP-адрес запущенного контейнера. Я хочу, чтобы он возвращал только ip запущенного контейнера. Вы можете увидеть изображение ниже, оно все время показывает IP-адреса контейнеров, экспортированных из узла.

введите описание изображения здесь

Но на самом деле один контейнер работает с ip 10.0.1.12:9100. Остальные IP-адреса были старыми IP-адресами контейнеров экспортеров узлов, которые запускались и останавливались. Вот временной ряд, в котором были созданы эти contianer. введите описание изображения здесь

Я думаю, что мы можем настроить метод очистки в prometheus.yml с помощью #relabel_config, но я с ним не знаком. Вот метод очистки, который я получил от https://github.com/stefanprodan/swarmprom.

  - job_name: 'node-exporter'
    dns_sd_configs:
    - names:
      - 'tasks.node-exporter'
      type: 'A'
      port: 9100

Вы знаете, как отфильтровать только запущенные контейнеры, добавив атрибут в prometheus.yml. Большое вам спасибо за ваше внимание.


person tandathuynh148    schedule 08.03.2021    source источник
comment
Можете ли вы привести n примеров метрик, которые вы получаете от Prometheus, как вы их получаете сейчас и чего ожидаете?   -  person Jens Baitinger    schedule 08.03.2021
comment
Вы имеете в виду IP-адрес остановленного узла вместо остановленного контейнера? Узел-экспортер позволяет вам получать метрики о вашем узле. Ваш запрос Grafana возвращает IP-адрес вашего хоста. Если вам нужны показатели контейнеров, вам нужно использовать cadvisor   -  person Marc ABOUCHACRA    schedule 08.03.2021
comment
Привет @MarcABOUCHACRA, я добавил изображение выше. Не могли бы вы взглянуть на это еще раз? Я имею ввиду ip контейнера   -  person tandathuynh148    schedule 08.03.2021
comment
Хм ... Полагаю, вы запускаете узел-экспортер как докер-контейнер? Потому что, как я уже сказал, экспортер узлов - это узел, а не контейнеры. Но запуск его как контейнера докеров (который устарел) может быть причиной вашей проблемы.   -  person Marc ABOUCHACRA    schedule 08.03.2021
comment
Поэтому вместо этого я должен запускать экспортер узлов локально в каждом узле.   -  person tandathuynh148    schedule 08.03.2021
comment
Да, это рекомендуемое использование (см. документацию). Но это не говорит нам, почему вы все еще видите старый IP, это, вероятно, связано с этот ТАК вопрос, но это может быть что угодно. Нам нужна дополнительная информация о настройках вашего контейнера, чтобы помочь вам   -  person Marc ABOUCHACRA    schedule 08.03.2021
comment
вопрос в том, интересует ли вас только последний (работающий экземпляр) или вас интересуют все экземпляры, но просто не хотите выбирать экземпляры. И все время работает только один экземпляр или одновременно работает несколько экземпляров?   -  person Jens Baitinger    schedule 08.03.2021
comment
Во-первых, наблюдаемое поведение полностью корректно, раньше у контейнера был другой IP-адрес.   -  person Jens Baitinger    schedule 08.03.2021
comment
@MarcABOUCHACRA, я думаю, что видел старый ip, потому что журналы метрик уже были сохранены в некоторых местах в контейнере прометея или графане (я не уверен на данный момент)   -  person tandathuynh148    schedule 08.03.2021
comment
@JensBaitinger Я думаю, что лучше видеть ресурс все время, а не отдельно и не разбивать каждый раз, когда контейнер останавливается.   -  person tandathuynh148    schedule 08.03.2021


Ответы (1)


Основываясь на последнем комментарии, вы можете изменять запросы по следующему шаблону:

min ignoring (instance) (<query without instance>)

поэтому (пример) запрос

rate(cpu_time_seconds{instance="$instance", otherLabel="otherValue"}[5m])

становится

min without (instance) (rate(cpu_time_seconds{otherLabel="otherValue"}[5m])

Функция агрегирования здесь относительно неактуальна, так как у вас есть только одно значение за раз.

Дополнительно вы можете удалить переменную instance с панели управления

person Jens Baitinger    schedule 08.03.2021