You are here

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Рассмотрим разворачивание полноценного мониторинга с помощью "Prometheus, Grafana и Node Exporter". Для этого будем использовать Debian и Docker-compose. Начнем с теории.

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Prometheus: это открытая time series СУБД, разработанная в компании SoundCloud на языке Go. Она хранит ваши метрики. Prometheus сам тянет метрики с заданного множества сервисов по средствам pull. Минимальная конфигурация системы мониторинга Prometheus состоит из сервера Prometheus и отслеживаемого приложения, достаточно только указать по какому адресу необходимо запрашивать метрики. Prometheus имеет свой собственный веб-интерфейс, но он немного скудный. В нашей связке мы будем использовать Grafana, так как его рекомендуют сами разработчики Prometheus.

Grafana: это веб-фронтенд к разным time series СУБД (мы будем использовать совместно с Prometheus). Данный инструмент позволяет рисовать и создавать красивые графики под ваши предпочтения.

Node Exporter: сервис позволяющий экспортировать информацию понятную Prometheus. Таких Exporter'ов большое множество, мы используем этот.

И так, мы определились с перечнем программ. Для понимания поясняем: "Prometheus + Grafana" будут стоять на текущем сервере, куда мы будем собирать информацию. Node Exporter мы поставим на удаленный сервер, откуда будем принимать данные. Приступим.

Описывать процесс установки Docker и Docker-compose не будем, так как это уже есть в нашей статье:
Docker: установка, настройка, image, container, docker-compose

Мы будем использовать Docker-compose (для удобства запуска нескольких контейнеров одновременно).

Структура шаблона описана на официальном сайте: https://docs.docker.com/compose/

  1. version: '3'
  2. services:
  3. web:
  4. build: .
  5. ports:
  6. - "5000:5000"
  7. volumes:
  8. - .:/code
  9. - logvolume01:/var/log
  10. links:
  11. - redis
  12. redis:
  13. image: redis
  14. volumes:
  15. logvolume01: {}

1. Устанавливаем Node Exporter: запуск, проверка

Приступим. Сначала установим Node Exporter на удаленном сервере. Заходим на наш удаленный сервер и создаем директорию под Docker-compose. Мы выбрали домашний каталог пользователя:

  1. mkdir exporter
  2. cd exporter

Перед тем как создать compose файл, нужно уточнить версию Docker и Docker-compose, после чего по таблице соответствия выбрать версию создаваемого файла по адресу:
https://docs.docker.com/compose/compose-file/

В нашем случае, это "3.6". Создаем сам файл Docker-compose:

  1. sudo nano docker-compose.yml

Заполняем:

  1. version: '3.6'
  2. services:
  3. node-exporter:
  4. image: "prom/node-exporter"
  5. container_name: "node-exporter"
  6. volumes:
  7. - /proc:/host/proc:ro
  8. - /sys:/host/sys:ro
  9. - /:/rootfs:ro
  10. command:
  11. - '--path.procfs=/host/proc'
  12. - '--path.sysfs=/host/sys'
  13. - '--collector.filesystem.ignored-mount-points=^/(sys|proc|dev|host|etc|rootfs/var/lib/docker/containers|rootfs/var/lib/docker/overlay2|rootfs/run/docker/netns|rootfs/var/lib/docker/aufs)($$|/)'
  14. network_mode: host
  15. ports:
  16. - 9100:9100
  17. restart: always

Подробнее:

  • "3.6" - версия взятая из таблицы совместимости
  • "services:" - объявление секции с сервисами которые мы будем запускать
  • "node-exporter:" - имя
  • "image:" - образ который будет использован
  • "container_name:" - имя контейнера
  • "volumes:" - монтирует каталог проекта, или файл ("ro" - read only, только чтение).
  • "command:" - команда, которую нужно запустить после создания образа
  • "network_mode:" - ...network_mode растространяется именно на запущенный контейнер.
  • "ports:" - связывает 9100 порт контейнера с 9100 портом на хосте
  • "restart:" - повторный запуск, если контейнер упал

Отдельно нужно пояснить по "procfs и sysfs": экспортер – часть программного обеспечения, которая переводит метрики из сторонней системы в метрический формат, понятняй Prometheus. Node Exporter экспортирует метрики ОС на сервер Prometheus, который получает и хранит их в базе данных временных рядов. Вы монтируете тома хост-системы и передаете пару флагов службе Node Exporter, чтобы помочь обнаружить информацию о хост-системе, используя точки монтирования procfs и sysfs. procfs и sysfs – файловые системы в Unix-подобных операционных системах, которые показывают в иерархической файловой структуре и каталогах информацию о процессах и другую системную информацию, такую как хранилище и т. д. Структура варьируется от дистрибутива к дистрибутиву. Вы монтируете эти каталоги хоста в виде volumes в сервис Node Exporter, чтобы Node Exporter мог видеть системную информацию узла и вы могли передавать некоторые флаги командной строки со значением местоположения этих каталогов в контейнер Node Exporter.

Сохраняем наш файл и запускаем:

  1. docker-compose up -d
  2. Recreating node-exporter ... done

Проверяем результат:
через браузер заходим на IP сервера и добавляем порт ":9100". В нашем случае: http://192.168.0.11:9100/. Должны получить следующее:

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Переходим в Metrics:
Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Все работает! С этого сервера пока отключаемся.

2. Устанавливаем Prometheus и Grafana: запуск и проверка

По аналогии выше, создаем на текущем сервере с которого будем подключаться к node-exporter следующий каталог:

  1. mkdir docker_prom_graf
  2. cd docker_prom_graf

В директории docker_prom_graf создаем каталог:

  1. sudo mkdir prometheus
  2. cd prometheus
  3. mkdir conf
  4. cd conf

В директории conf, создаем файл конфигурации prometheus.yml:

  1. sudo nano prometheus.yml

Внутри прописываем следующее:

  1. scrape_configs:
  2. - job_name: 'prometheus'
  3. scrape_interval: 5s
  4. static_configs:
  5. - targets: ['192.168.0.12:9090']
  6. - job_name: 'node_exporter'
  7. scrape_interval: 5s
  8. static_configs:
  9. - targets: ['192.168.0.11:9100']

* Тут все интуитивно понятно: сервер откуда брать метрики, сервер который принимает метрики. Время опроса.

Возвращаемся в директорию выше docker_prom_graf, и создаем compose файл:

  1. sudo nano docker-compose.yml

Заполняем:

  1. version: "3.6"
  2. services:
  3. prometheus:
  4. image: prom/prometheus:latest
  5. container_name: prometheus
  6. volumes:
  7. - ./prometheus/conf:/etc/prometheus
  8. - ./prometheus/data:/prometheus
  9. command:
  10. - --config.file=/etc/prometheus/prometheus.yml
  11. - --storage.tsdb.path=/prometheus
  12. - --storage.tsdb.retention=200h
  13. restart: always
  14. ports:
  15. - 9090:9090
  16.  
  17. grafana:
  18. image: grafana/grafana:latest
  19. container_name: grafana
  20. restart: always
  21. ports:
  22. - 3000:3000

* В разделе volumes делаем проброс на наши каталоги. Флаг --storage.tsdb.retention=200h важен, так как он чистит TSDB каждые 15 дней, что экономит дисковое пространство

Структура каталога docker_prom_graf выглядит так:

  1. tree
  2. .
  3. ├── docker-compose.yml
  4. └── prometheus
  5. ├── conf
  6.   └── prometheus.yml

Запускаем docker-compose.yml:

  1. docker-compose up -d

Для проверки, заходим на адрес: 192.168.0.12:9090

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Проверяем работу Grafana: 192.168.0.12:3000

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Для входа используем логин и пароль "admin". Система попросит создать новый пароль, создаем. Далее будет интуитивно понятный опрос, выбираем "Add data source" - "Prometheus" (заполняем). Далее выбираем Dashboards. Можно создать с нуля, но мы перешли по ссылке: https://grafana.com/grafana/dashboards и взяли подходящий вариант от туда.

Мониторинг сервисов: Prometheus, Grafana и Node Exporter

Всем спасибо за внимание!

Источник: http://linuxsql.ru