Как получить использование памяти для каждой цели

#prometheus #grafana

Вопрос:

Я работал вместе с Прометеем и Графаной, где я пытаюсь объединить их обоих вместе. Моя проблема в настоящее время заключается в том, что мой экспортер узлов в настоящее время перенаправляет на порт 9100, что я смог сделать:

Весь

Однако это просто суммировало бы весь статус компьютера, но я хочу сделать то, что я хотел бы получить использование оперативной памяти для каждой цели:

 # Sample config for Prometheus.

global:
  scrape_interval:     1s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
  evaluation_interval: 1s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).

  # Attach these labels to any time series or alerts when communicating with
  # external systems (federation, remote storage, Alertmanager).
  external_labels:
      monitor: 'example'

# Alertmanager configuration
alerting:
  alertmanagers:
  - static_configs:
    - targets: ['localhost:9093']

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
  # - "first_rules.yml"
  # - "second_rules.yml"

# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  
  - job_name: node
    # If prometheus-node-exporter is installed, grab stats about the local
    # machine by default.
    static_configs:
      - targets: [
                  'localhost:8000',
                  'localhost:8001',
                  'localhost:8002',
                  'localhost:8003',
                  'localhost:8004',
                  'localhost:8005',
                  'localhost:8006',
                  'localhost:8007',
                  'localhost:8008',
                  'localhost:8009',
                  'localhost:8010',
                  'localhost:8011',
                  'localhost:8012',
                  'localhost:8013',
                  'localhost:8014',
                  'localhost:8015',
                  'localhost:8016',
                  'localhost:8002',
                  'localhost:8017',
                  'localhost:8018',
                  'localhost:8019',
                  'localhost:8020',
                  'localhost:8021',
                  'localhost:8022',
                  'localhost:8023',
                  'localhost:8024',
                  'localhost:8025',
                  'localhost:8026',
                  'localhost:8027',
                  'localhost:8028',
                  'localhost:8029',
                  'localhost:8030',
                  'localhost:8030',
                  'localhost:8031',
                  'localhost:8032',
                  'localhost:8033',
                  'localhost:8034',
                  'localhost:8035',
                  'localhost:8036',
                  'localhost:8037',
                  'localhost:8038',
                  'localhost:8039',
                  'localhost:8040',
                  'localhost:9100'
                ]
 

и теперь я застрял там, где я не знаю, как и возможно ли вообще получить использование оперативной памяти, которое используется разными портами?

Результат, который я хотел бы сделать, это:

Выход

Редактировать:

Как запустить один экспортер узлов для каждого узла и использовать метку экземпляра для различения различных узлов/компьютеров?

Комментарии:

1. Ваша конфигурация очистки ссылается на несколько экспортеров узлов, работающих на одном компьютере (локальный хост). Вы должны указать имена хостов/ip-адреса для каждого из компьютеров, которые вы хотите отслеживать, иначе вы будете дублировать показатели, поскольку вы несколько раз выполняете очистку для одного компьютера. Существует метка экземпляра, которую вы можете использовать для фильтрации/группировки визуализаций, чтобы предоставить вам показатели для каждого узла/компьютера, за которым вы наблюдаете.

2. Привет @BrandonMcClure — Верно, но как бы это можно было сделать, если бы я мог спросить? Если это вообще возможно сделать ??

3. вы спрашиваете, возможно ли иметь несколько node_exporters, работающих на одном экземпляре (узле/компьютере), и получать некоторое подмножество показателей от каждого, ответ отрицательный. Вы должны запускать только 1 node_exporter для каждого узла и использовать метку экземпляра, чтобы различать различные узлы/компьютеры. Я думаю, что вам было бы полезно отредактировать свой вопрос, указав, чего конкретно вы пытаетесь достичь, запустив несколько node_exporters на одном компьютере.

4. Привет @BrandonMcClure Теперь я обновил свой вопрос в самом низу. Я не был уверен, как это работает, пока ты не объяснил. Но я не уверен, как я могу добавить метку экземпляра для каждого порта. В принципе, если это имеет смысл… У меня есть, например, 5 сценариев py, которые я запускаю, которые мы можем вызвать main1.py main2.py mainN.py — каждый файл py имеет свой собственный порт при запуске сценария (порт 8000, 8001, 8002…), и я хочу иметь возможность получать данные об ИСПОЛЬЗОВАНИИ оперативной памяти/процессора для каждого сценария, а не общее количество.

Ответ №1:

Сохранение этой части для исторических целей: По умолчанию вашим метрическим рядам при очистке присваиваются метки. Минимум-это a job и an instance . Например, если у вас есть ряд показателей, вы можете выбрать ряд из одной из ваших целей, поскольку это относится к метрикам node_memory_MemAvailable_bytes node_memory_MemAvailable_bytes{instance="localhost:9100"} любого типа. Примечание: Если на вашем сервере запущено несколько node_exporter, вы не увидите другой информации.

Редактировать:

Заявленная проблема заключается в том, что @ProtractorNewbie хочет иметь возможность экспортировать загрузку процессора с одного сервера. В идеале они хотели использовать node_exporter.

Сегодня не существует способа предоставления node_exporter информации о процессе за процессом.

Тем не менее, можно было бы использовать collectd с cgroups write_prometheus настроенными и включенными плагинами и.

Тогда вам потребуется, чтобы каждая из этих служб работала как службы systemd.

Данные, которые вы хотели бы использовать, будут выглядеть так:

 collectd_cgroups_cpu_total{cgroups="myservice.service",type="user",instance="myinstancename"} 0 1632740881417
 

Оттуда вы можете выполнить любую из типичных операций prometheus.

Комментарии:

1. Привет! итак, пример, если я установил в своем python подключение к порту 8000 prometheus. Вы имеете в виду, что если я изменю экземпляр на 8000, то он покажет процессор/оперативную память, специфичную только для этого порта?

2. Если ответ «да», то, похоже, он не работает, так как он не возвращает мне никаких данных :/

3. Теперь я также обновил свой вопрос, см. в самом низу 🙂

4. Я вижу, что это скорее вопрос о том, как раскрыть использование процессора каждым процессом, запущенным на сервере.

5. @ProtractorNewbie Я обновил свой ответ, чтобы более точно отразить ситуацию.