Рассмотрим разворачивание полноценного мониторинга с помощью "Prometheus, Grafana и Node Exporter". Для этого будем использовать Debian и Docker-compose. Начнем с теории.
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/
version: '3' services: web: build: . ports: - "5000:5000" volumes: - .:/code - logvolume01:/var/log links: - redis redis: image: redis volumes: logvolume01: {}
1. Устанавливаем Node Exporter: запуск, проверка
Приступим. Сначала установим Node Exporter на удаленном сервере. Заходим на наш удаленный сервер и создаем директорию под Docker-compose. Мы выбрали домашний каталог пользователя:
mkdir exporter cd exporter
Перед тем как создать compose файл, нужно уточнить версию Docker и Docker-compose, после чего по таблице соответствия выбрать версию создаваемого файла по адресу:
https://docs.docker.com/compose/compose-file/
В нашем случае, это "3.6". Создаем сам файл Docker-compose:
sudo nano docker-compose.yml
Заполняем:
version: '3.6' services: node-exporter: image: "prom/node-exporter" container_name: "node-exporter" volumes: - /proc:/host/proc:ro - /sys:/host/sys:ro - /:/rootfs:ro command: - '--path.procfs=/host/proc' - '--path.sysfs=/host/sys' - '--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)($$|/)' network_mode: host ports: - 9100:9100 restart: always
Подробнее:
Отдельно нужно пояснить по "procfs и sysfs": экспортер – часть программного обеспечения, которая переводит метрики из сторонней системы в метрический формат, понятняй Prometheus. Node Exporter экспортирует метрики ОС на сервер Prometheus, который получает и хранит их в базе данных временных рядов. Вы монтируете тома хост-системы и передаете пару флагов службе Node Exporter, чтобы помочь обнаружить информацию о хост-системе, используя точки монтирования procfs и sysfs. procfs и sysfs – файловые системы в Unix-подобных операционных системах, которые показывают в иерархической файловой структуре и каталогах информацию о процессах и другую системную информацию, такую как хранилище и т. д. Структура варьируется от дистрибутива к дистрибутиву. Вы монтируете эти каталоги хоста в виде volumes в сервис Node Exporter, чтобы Node Exporter мог видеть системную информацию узла и вы могли передавать некоторые флаги командной строки со значением местоположения этих каталогов в контейнер Node Exporter.
Сохраняем наш файл и запускаем:
docker-compose up -d Recreating node-exporter ... done
Проверяем результат:
через браузер заходим на IP сервера и добавляем порт ":9100". В нашем случае: http://192.168.0.11:9100/. Должны получить следующее:
Все работает! С этого сервера пока отключаемся.
2. Устанавливаем Prometheus и Grafana: запуск и проверка
По аналогии выше, создаем на текущем сервере с которого будем подключаться к node-exporter следующий каталог:
mkdir docker_prom_graf cd docker_prom_graf
В директории docker_prom_graf создаем каталог:
sudo mkdir prometheus cd prometheus mkdir conf cd conf
В директории conf, создаем файл конфигурации prometheus.yml:
sudo nano prometheus.yml
Внутри прописываем следующее:
scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['192.168.0.12:9090'] - job_name: 'node_exporter' scrape_interval: 5s static_configs: - targets: ['192.168.0.11:9100']
* Тут все интуитивно понятно: сервер откуда брать метрики, сервер который принимает метрики. Время опроса.
Возвращаемся в директорию выше docker_prom_graf, и создаем compose файл:
sudo nano docker-compose.yml
Заполняем:
version: "3.6" services: prometheus: image: prom/prometheus:latest container_name: prometheus volumes: - ./prometheus/conf:/etc/prometheus - ./prometheus/data:/prometheus command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.path=/prometheus - --storage.tsdb.retention=200h restart: always ports: - 9090:9090 grafana: image: grafana/grafana:latest container_name: grafana restart: always ports: - 3000:3000
* В разделе volumes делаем проброс на наши каталоги. Флаг --storage.tsdb.retention=200h важен, так как он чистит TSDB каждые 15 дней, что экономит дисковое пространство
Структура каталога docker_prom_graf выглядит так:
tree . ├── docker-compose.yml └── prometheus ├── conf └── prometheus.yml
Запускаем docker-compose.yml:
docker-compose up -d
Для проверки, заходим на адрес: 192.168.0.12:9090
Проверяем работу Grafana: 192.168.0.12:3000
Для входа используем логин и пароль "admin". Система попросит создать новый пароль, создаем. Далее будет интуитивно понятный опрос, выбираем "Add data source" - "Prometheus" (заполняем). Далее выбираем Dashboards. Можно создать с нуля, но мы перешли по ссылке: https://grafana.com/grafana/dashboards и взяли подходящий вариант от туда.
Всем спасибо за внимание!
Источник: http://linuxsql.ru