Отслеживать состояние сервера и запущенных на нём процессов очень важно чтобы иметь возможность вовремя оптимизировать настройки, исправить ошибки или реагировать на повышенную нагрузку. Существует множество систем мониторинга для 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/prometheus
В них содержатся файлы для работы веб-интерфейса программы. Кроме того, нужно создать конфигурационный файл /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
Затем добавьте ключ репозитория в систему:
curl -s https://packages.grafana.com/gpg.key | sudo gpg --no-default-keyring --keyring gnupg-ring:/etc/apt/trusted.gpg.d/grafana_key.gpg --import
И добавьте сам репозиторий:
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 и возможностей здесь намного больше. А какой системой мониторинга пользуетесь вы? Напишите в комментариях!
в сюстемд юнит я бы добавил ещё строчку:
ExecReload=/bin/kill -HUP $MAINPID
для перечитывания конфига без рестарта прома
а в параметры запуска ключик с временем хранения метрик:
--storage.tsdb.retention=30d
есть ошибка.
Файл конфига - /etc/prometheus/prometheus.yaml
А в файле юнита мы указываем - /etc/prometheus/prometheus.yml
Разные расширения. При запуске службы будет ошибка
Кривой начальный конфиг prometheus.yml. Ибался 20 минут...
Нужно вот так:
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
Что делать, если видишь это:
HTTP Error Bad Gateway
при первоначальной настройке связки с прометеусом?
sudo systemctl edit --full -force prometheus.service ошибочна, нужно
sudo systemctl edit --full --force prometheus.service
установить последнюю версию grafana
Блин да как так
Иду по инструкции шаг за шагом, всё делаю как надо, но ошибка за ошибкой
Почему всё не может работать хоть сколько-то нормально
Вероятно опечатка в пути /etc/promethes
sudo cp -r ~/Загрузки/prometheus-2.26.0.linux-amd64/console_libraries /etc/promethes
scrape_configs должен бытть на одном уровне с global
https://github.com/prometheus/prometheus/blob/release-2.19/config/testdata/conf.good.yml
prometheus сервис с настройками выше не стартует
ts=2022-06-01T10:57:32.885Z caller=query_logger.go:112 level=error component=activeQueryTracker msg="Failed to create directory for logging active queries"
ts=2022-06-01T10:57:32.885Z caller=query_logger.go:90 level=error component=activeQueryTracker msg="Error opening query log file"
file=/var/lib/prometheus/queries.active err="open /var/lib/prometheus/queries.active: no such file or directory"
Кажется этого не хватает
mkdir /var/lib/prometheus
chown -R prometheus:prometheus /var/lib/prometheus
И борда не та.
3662 вместо 3362
https://grafana.com/grafana/dashboards/3662-prometheus-2-0-overview/
статья о том как заебаться
читайте комменты. лучше сразу мой и проходите дальше
конфиг корявый блядь
папку по инструкии в либ не создают а она нужна
права на нее нужны
автор. сам разверни по своим шагам