Отслеживать состояние сервера и запущенных на нём процессов очень важно чтобы иметь возможность вовремя оптимизировать настройки, исправить ошибки или реагировать на повышенную нагрузку. Существует множество систем мониторинга для Linux различной сложности. В этой статье речь пойдёт про Prometheus.
Эта система мониторинга состоящая из нескольких компонентов, написанных на языке программирования Golang. Основной компонент Prometheus — это база данных для хранения метрик. Ещё есть компоненты *_exporter для сбора данных с различных сервисов и компонент alertmanager для отправки уведомлений. Кроме того, для отображения метрик в удобном виде принято использовать Grafana. Давайте же рассмотрим как выполняется установка и настройка Prometheus на примере Ubuntu 20.04.
Установка и настройка Prometheus
1. Установка Prometheus
Вы можете установить Prometheus из официальных репозиториев в Ubuntu. Вы можете посмотреть какие пакеты prometheus доступны можно такой командой:
sudo apt search prometheus
Для установки выполните команду:
sudo apt install prometheus
Однако в репозиториях содержится уже старая версия программы. Если вы хотите самую свежую версию, то придется скачать её из официального сайта. Поскольку программа написана на Golang, то и распространяется она в виде одного исполняемого файла. Поэтому установить её не сложно, достаточно скачать архив, распаковать и скопировать исполняемый файл в папку /usr/local/bin, также надо будет скопировать несколько исполняемых файлов.
Сначала скачайте пакет Prometheus с официальной страницы GitHub. Для Linux нужен пакет с исполняемыми файлами linux-amd64:
Загруженный документ надо распаковать. Для этого можно воспользоваться утилитой tar:
tar xvf ~/Загрузки/prometheus-2.26.0.linux-amd64.tar.gz
Затем скопируйте исполняемые файлы prometheus и promtool в папку /usr/local/bin:
sudo cp ~/Загрузки/prometheus-2.26.0.linux-amd64/prometheus /usr/local/bin
sudo cp ~/Загрузки/prometheus-2.26.0.linux-amd64/promtool /usr/local/bin
Для конфигурационных файлов необходимо создать папку /etc/prometheus:
sudo mkdir /etc/prometheus
Затем скопируйте туда такие папки с конфигурационными файлами:
sudo cp -r ~/Загрузки/prometheus-2.26.0.linux-amd64/consoles /etc/prometheus
sudo cp -r ~/Загрузки/prometheus-2.26.0.linux-amd64/console_libraries /etc/promethes
В них содержатся файлы для работы веб-интерфейса программы. Кроме того, нужно создать конфигурационный файл /etc/prometheus/prometheus.yml со следующим содержимым:
sudo vi /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
— job_name: ‘prometheus’
scrape_interval: 5s
static_configs:
— targets: [‘localhost:9090’]
Здесь сказано, что по умолчанию интервал сбора данных составляет 15 секунд, а также добавлена задача по сборку данных с самого Prometheus. Никаких данных о состоянии сервера там не будет, только параметры работы программы.
Для запуска программы понадобится пользователь prometheus:
sudo useradd --no-create-home --shell /bin/false prometheus
Осталось только создать файл systemd службы для удобного запуска prometheus. Для этого выполните команду:
sudo systemctl edit --full -force prometheus.service
2. Запуск Prometheus
После этого можно запустить Prometheus и проверить его работу. Для этого выполните:
sudo systemctl start prometheus
Затем для того чтобы убедится что всё запустилось выполните:
sudo systemctl status prometheus
Обратите внимание на строчку Active. Её значение должно быть active (running). Если там что-то другое, значит программа не запустилась, и вы можете посмотреть лог ниже чтобы понять причину.
3. Доступ к веб-интерфейсу
Если программа запущена, вы можете получить доступ к веб-интерфейсу в браузере. Откройте порт 9090 на сервере, куда вы устанавливали Prometheus:
Чтобы убедится, что сбор данных для сервиса prometheus работает откройте меню Status -> Targets. Здесь должна отображаться одна цель prometheus:
Спустя некоторое время можно попытаться построить график из собранных данных. Для этого вернитесь на главную страницу и в строке Expression наберите go_memstats_frees_total. Затем перейдите на вкладку Graph:
Будет отображен график этого показателя. С помощью поля Expression можно смотреть какие метрики уже собираются и просматривать их значения. Метрика go_memstats_frees_total стандартная для каждого экспортера данных и обычно для отображения на графиках не используется.
4. Установка Grafana
Смотреть графики Prometheus в его веб-интерфейсе не удобно и не практично. Там вы можете только убедится, что всё собирается верно. Для просмотра графиков же следует использовать Grafana. Для её установки надо сначала установить несколько компонентов:
sudo apt install -y apt-transport-https
sudo apt install -y software-properties-common
Затем добавьте ключ репозитория в систему:
wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
И добавьте сам репозиторий:
echo "deb https://packages.grafana.com/enterprise/deb stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
После этого обновите список пакетов в репозиториях и установите Grafana:
sudo apt update
sudo apt install grafana
5. Настройка Grafana для Prometheus
По умолчанию Grafana доступна на порту 3000. Логин и пароль при первом входе: admin и admin соответственно. Я не буду расписывать первоначальную настройку. Об этом читайте здесь. Когда войдете в интерфейс программы, откройте Configuration -> Data Sources и нажмите кнопку Add Data Source:
В открывшемся окне выберите тип Data Source — Prometheus:
На шаге настройки подключения необходимо в поле URL ввести адрес сервера, на котором доступен Prometheus и его порт. Если Grafana находится на той же машине, что и Prometheus можно использовать localhost, а порт по умолчанию 9090:
После этого нажмите Save and Test и вы должны увидеть что тест прошёл успешно.
После этого можно переходить к созданию досок.
6. Импорт доски Prometheus в Grafana
Доску для метрик, собираемых по умолчанию сервером Prometheus можно взять здесь. На этой странице вам нужен только идентификатор 3362, который находится под надписью Get this dashboard:
Эта доска специально разработана для экспортера Prometheus и отображает с него данные. Для её добавления в интерфейсе Grafana откройте Dashboards -> Manage -> Import и введите идентификатор доски:
Затем нажмите кнопку Load и на следующей странице введите имя доски и выберите ранее созданный источник данных (Data source). В этом примере он называется Prometheus:
После нажатия на кнопку Import перед вами откроется доска с метриками, её можно уже настроить так, как вам необходимо:
7. Установка Node Exporter
Данные в Prometheus поступают из так называемых экспортёров, программ, которые делают различные метрики доступными по HTTP адресу /metrics. Сервер Prometheus регулярно опрашивает такие экспортёры и собирает с них данные. Экспортеры существуют для различных служб и сервисов, например, для Nginx, MySQL, PHP-FPM, Apache ну и естественно экспортёр общих сведений о сервере. Такой экспортёр называется Node_exporter. Он тоже написан на Golang как и большинство экспортёров для Prometheus. Аналогично основному компоненту его можно установить из официальных репозиториев Ubuntu:
sudo apt install prometheus-node-exporter
Или можно получить последнюю версию из страницы на GitHub. После загрузки распакуйте её:
tar -xvf ~/Загрузки/node_exporter-1.1.2.tar.gz
Затем скопируйте исполняемый файл программы в /usr/local/bin:
cp ~/Загрузки/node_exporter-1.1.2/node_exporter /usr/local/bin
Далее создайте пользователя, от имени которого будете запускать программу:
sudo useradd --no-create-home --shell /bin/false node_exporter
И создайте юнит файл systemd для её запуска:
sudo systemctl edit --full --force node_exporter.service
Шаг 8. Настройка node_exporter
Далее необходимо запустить node_exporter. Для этого выполните такую команду:
sudo systemctl start node_exporter
Затем проверьте состояние сервиса:
sudo systemctl status node_exporter
Как и в случае с Prometheus состояние должно быть active (running):
А в логах вы можете найти на каком порту ожидает подключений этот экспортёр. Именно в этих логах необходимо смотреть работает ли экспортёр хорошо или с ним что то не так.
Ещё один способ убедится что экспортёр возвращает все необходимые метрики открыть URL /metrics на порту, где экспортёр ожидает подключений. Для node_exporter по умолчанию используется порт 9100, о чём и сообщается в логе:
Как видите, кроме стандартных метрик с приставкой go* экспортируются и довольно много метрик начинающихся на node. Значит всё работает.
Шаг 9. Добавление node_exporter в prometheus
Дальше нужно сообщить prometheus что необходимо собирать данные с этого экспортёра. Под каждого экспортёра в конфигурационном файле необходимо создавать подраздел в scrape_configs со следующим содержимым:
— job_name: ‘имя_задачи’
scrape_interval: интервал_сбора_метрик
static_configs:
— targets: [‘адрес:порт’]
В данном случае полный конфигурационный файл prometheus будет выглядеть вот так:
sudo vi /etc/prometheus/prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
— job_name: ‘prometheus’
scrape_interval: 5s
static_configs:
— targets: [‘localhost:9090’]
— job_name: ‘prometheus_node’
scrape_interval: 5s
static_configs:
— targets: [‘localhost:9100’]
Для формата yaml отступы имеют очень важное значение, поэтому следите чтобы с ними было всё хорошо. В данном примере node_exporter находится на том же компьютере, что и prometheus поэтому можно указать localhost. Такой экспортёр надо установить на все машины, которые надо отслеживать с помощью программы. Для каждой надо создать свою job. После завершения настройки перезапустите Prometheus:
systemctl restart prometheus
Теперь можно проверить в Prometheus, что данные передаются:
Шаг 10. Импорт доски для Node Exporter
Аналогично метрикам от сервера Prometheus можно выводить в Grafana метрики любого другого экспортёра. Для большинства из них уже созданы шаблоны досок. Доску для node_exporter можно найти здесь. Откройте Dashboards -> Manage -> Import и введите идентификатор доски 1860:
На следующей странице введите название доски и выберите источник данных снова Prometheus:
После нажатия кнопки Import перед вами появится доска, и здесь уже данные намного интереснее, чем на предыдущей:
Такие доски можно добавить для различных служб. Теперь вы можете осуществлять мониторинг Prometheus или продолжить настройку установив дополнительные экспортёры.
Выводы
В этой небольшой статье мы рассмотрели как выполняется установка Prometheus Grafana в Ubuntu 20.04. Как видите, программа довольно проста в настройке, намного проще по сравнению со связкой Collectd + IfluxDB и возможностей здесь намного больше. А какой системой мониторинга пользуетесь вы? Напишите в комментариях!