Установка Prometheus в Ubuntu 16.04

Prometheus – это производительная система мониторинга с открытым исходным кодом. Она предлагает многомерную модель данных, гибкий язык запросов и разнообразные возможности визуализации с помощью таких инструментов, как Grafana.

По умолчанию Prometheus только экспортирует метрики своего сервера (например, количество полученных запросов, потребление памяти и т. п.). Но функционал Prometheus можно значительно расширить с помощью экспортеров и вспомогательных программ, которые генерируют дополнительные метрики.

Экспортеры – как официальные, поддерживаемые командой Prometheus, так и поддерживаемые сообществом – собирают информацию обо всем: от инфраструктуры, базы данных и веб-серверов до систем обмена сообщениями, API-интерфейсов и т. п.

Некоторые из наиболее популярных экспортеров:

  • node_exporter собирает метрики инфраструктуры, включая использование CPU, памяти и диска, а также статистику ввода/вывода и сети (например, количество байтов, считанных с диска или среднюю загрузку сервера).
  • blackbox_exporter генерирует метрики, полученные из протоколов, таких как HTTP и HTTPS, для определения доступности конечной точки, времени отклика и т. п.
  • mysqld_exporter собирает метрики, связанные с сервером MySQL, такие как количество выполненных запросов, среднее время отклика и состояние репликации кластера.
  • rabbitmq_exporter выводит метрики о системе обмена сообщениями RabbitMQ, включая количество опубликованных сообщений, количество готовых к отправке сообщений и размер всех сообщений в очереди.
  • nginx-vts-exporter собирает метрику о веб-сервере Nginx с использованием модуля Nginx VTS, включая количество открытых подключений, количество отправленных ответов (сгруппированных по кодам ответов) и общий размер отправленных или полученных запросов в байтах.

Вы можете найти более полный список официальных экспортеров и экспортеров сообщества на веб-сайте Prometheus.

Данный мануал поможет установить, настроить и защитить Prometheus и Node Exporter, а также сгенерировать метрики, которые облегчат мониторинг производительности сервера.

Требования

1: Создание пользователей сервиса

В целях безопасности сначала нужно создать две учетные записи пользователей, prometheus и node_exporter. Эти учетные записи нужно использовать на протяжении всего мануала, чтобы изолировать права на основные файлы и каталоги Prometheus.

Используйте опции —no-create-home и —shell /bin/false, чтобы эти пользователи не могли входить на сервер.

sudo useradd --no-create-home --shell /bin/false prometheus
sudo useradd --no-create-home --shell /bin/false node_exporter

2: Загрузка Prometheus

Теперь загрузите и распакуйте текущую стабильную версию Prometheus в свой домашний каталог. Вы можете найти последние бинарные файлы вместе с их контрольными суммами на сайте Prometheus.

cd ~
curl -LO https://github.com/prometheus/prometheus/releases/download/v1.7.1/prometheus-1.7.1.linux-amd64.tar.gz

С помощью команды sha256sum сгенерируйте контрольную сумму загруженных файлов.

sha256sum prometheus-1.7.1.linux-amd64.tar.gz

Сравните результат этой команды с контрольной суммой на странице загрузки Prometheus, чтобы убедиться, что загруженный файл является подлинным и не был поврежден.

4779d5cf08c50ed368a57b102ab3895e5e830d6b355ca4bfecf718a034a164e0 prometheus-1.7.1.linux-amd64.tar.gz

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

Теперь распакуйте загруженный архив.

tar xvf prometheus-1.7.1.linux-amd64.tar.gz

Это создаст каталог prometheus-1.7.1.linux-amd64 с двумя бинарными файлами (prometheus и promtool), лицензией и несколькими образцами файлов.

Скопируйте бинарные файлы в каталог /usr/local/bin.

sudo cp prometheus-1.7.1.linux-amd64/prometheus /usr/local/bin/
sudo cp prometheus-1.7.1.linux-amd64/promtool /usr/local/bin/

Передайте права на двоичные файлы пользователю prometheus, созданному в разделе 1.

sudo chown prometheus:prometheus /usr/local/bin/prometheus
sudo chown prometheus:prometheus /usr/local/bin/promtool

Остальные файлы можно удалить:

rm -rf prometheus-1.7.1.linux-amd64.tar.gz prometheus-1.7.1.linux-amd64

3: Настройка Prometheus

Следуя стандартным соглашениям Linux, создайте каталог в /etc для конфигурационных файлов Prometheus и каталог в /var/lib для других данных.

sudo mkdir /etc/prometheus
sudo mkdir /var/lib/prometheus

Передайте права на каталоги пользователю prometheus:

sudo chown prometheus:prometheus /etc/prometheus
sudo chown prometheus:prometheus /var/lib/prometheus

В каталоге /etc/prometheus создайте файл конфигурации prometheus.yml. На данный момент этот файл будет содержать достаточно информации для запуска Prometheus.

sudo nano /etc/prometheus/prometheus.yml

Важно! Конфигурационный файл Prometheus использует формат YAML, который строго запрещает табы и требует двух пробелов для отступов. Prometheus не удастся запустить, если конфигурационный файл некорректно отформатирован.

В глобальных настройках (раздел global) задайте интервал по умолчанию для сбора метрик. Обратите внимание, что Prometheus будет применять эти настройки для каждого экспортера, если только глобальные переменные не переопределяются индивидуальными настройками отдельного экспортера.

global:
scrape_interval: 15s

Согласно этому значению scrape_interval Prometheus будет собирать метрики своих экспортеров каждые 15 секунд, что достаточно для большинства экспортеров.

Теперь добавьте Prometheus в список экспортеров, чтобы собирать его метрики. Для этого используйте директиву scrape_configs:

...
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']

С помощью job_name Prometheus маркирует экспортеры в запросах и графах, потому тут лучше выбрать описательное имя.

Поскольку Prometheus экспортирует важные данные о себе, которые используются для мониторинга производительности и отладки, можно переопределить глобальную директиву scrape_interval с 15 секунд до 5 секунд, чтобы данные обновлялись чаще.

С помощью директив static_configs и targets Prometheus определяет, где запускать экспортеры. Поскольку этот конкретный экспортер запущен на том же сервере, что и Prometheus, можно использовать localhost вместо IP-адреса и порт по умолчанию 9090.

Теперь конфигурационный файл выглядит так:

global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']

Сохраните и закройте файл.

Передайте права на этот файл пользователю prometheus.

sudo chown prometheus:prometheus /etc/prometheus/prometheus.yml

По завершении конфигурации можно запустить и протестировать Prometheus.

4: Запуск Prometheus

Запустите Prometheus как пользователя prometheus, указав путь к конфигурационному файлу и к каталогу данных.

sudo -u prometheus /usr/local/bin/prometheus \
-config.file /etc/prometheus/prometheus.yml \
-storage.local.path /var/lib/prometheus/

В выводе вы увидите информацию о прогрессе загрузки Prometheus, конфигурационном файле и связанных с ним сервисах. Вывод также подтверждает, что Prometheus слушает порт 9090.

INFO[0000] Starting prometheus (version=1.7.1, branch=master, revision=3afb3fffa3a29c3de865e1172fb740442e9d0133)  source="main.go:88"
INFO[0000] Build context (go=go1.8.3, user=root@0aa1b7fc430d, date=20170612-11:44:05)  source="main.go:89"
INFO[0000] Host details (Linux 4.4.0-81-generic #104-Ubuntu SMP Wed Jun 14 08:17:06 UTC 2017 x86_64 prometheus (none))  source="main.go:90"
INFO[0000] Loading configuration file /etc/prometheus/prometheus.yml  source="main.go:252"
INFO[0000] Loading series map and head chunks...         source="storage.go:428"
INFO[0000] 543 series loaded.                            source="storage.go:439"
INFO[0000] Starting target manager...                    source="targetmanager.go:63"
INFO[0000] Listening on :9090                            source="web.go:259"

Если вы получили сообщение об ошибке, убедитесь, что не допустили ошибок в синтаксисе YAML в файле конфигурации, а затем следуйте инструкциям на экране, чтобы устранить проблему.

Остановите Prometheus, нажав CTRL + C, а затем откройте новый файл сервиса systemd.

sudo nano /etc/systemd/system/prometheus.service

Этот файл сообщает systemd, что Prometheus нужно запускать в качестве пользователя prometheus, его конфигурационный файл находится в каталоге /etc/prometheus/prometheus.yml, а данные хранятся в каталоге /var/lib/prometheus). Сведения о системных файлах systemd выходят за рамки данного руководства.

Читайте также: Основы Systemd: управление сервисами и журналирование

Скопируйте в файл следующие строки:

[Unit]
Description=Prometheus
Wants=network-online.target
After=network-online.target
[Service]
User=prometheus
Group=prometheus
Type=simple
ExecStart=/usr/local/bin/prometheus -config.file /etc/prometheus/prometheus.yml \
-storage.local.path /var/lib/prometheus/
[Install]
WantedBy=multi-user.target

Сохраните и закройте файл.

Перезапустите systemd.

sudo systemctl daemon-reload

Теперь можно запустить Prometheus:

sudo systemctl status prometheus

Вывод описывает состояние Prometheus, основной идентификатор процесса (PID), использование памяти и т. п.

Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.

prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2017-07-21 11:40:40 UTC; 3s ago
Main PID: 2104 (prometheus)
Tasks: 7
Memory: 13.8M
CPU: 470ms
CGroup: /system.slice/prometheus.service
...

Чтобы продолжить и прервать команду status, нажмите Q.

Добавьте сервис в автозагрузку:

sudo systemctl enable prometheus

Теперь можно установить дополнительный экспортер для создания метрик о ресурсах сервера.

5: Загрузка экспортера Node Exporter

Чтобы расширить стандартные возможности Prometheus, установите дополнительный экспортер под названием Node Exporter. Node Exporter предоставляет подробную информацию о системе, включая использование процессора, диска и памяти.

Сначала загрузите текущую стабильную версию Node Exporter в свой домашний каталог. Вы можете найти последние бинарные файлы вместе с их контрольными суммами на сайте Prometheus.

cd ~
curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.14.0.linux-amd64.tar.gz

С помощью команды sha256sum сгенерируйте контрольную сумму загруженного файла.

sha256sum node_exporter-0.14.0.linux-amd64.tar.gz

Проверьте целостность загруженных файлов, сравнив контрольную сумму с той, что находится на странице загрузки.

d5980bf5d0dc7214741b65d3771f08e6f8311c86531ae21c6ffec1d643549b2e  node_exporter-0.14.0.linux-amd64.tar.gz

Если контрольные суммы не совпадают, удалите загруженный файл и повторите загрузку.

Теперь распакуйте загруженный архив.

tar xvf node_exporter-0.14.0.linux-amd64.tar.gz

Это создаст каталог node_exporter-0.14.0.linux-amd64, содержащий бинарный файл node_exporter, лицензию и уведомление.

Скопируйте бинарный файл в каталог /usr/local/bin и передайте права на него пользователю node_exporter.

sudo cp node_exporter-0.14.0.linux-amd64/node_exporter /usr/local/bin
sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter

Удалите остальные файлы из домашнего каталога:

rm -rf node_exporter-0.14.0.linux-amd64.tar.gz node_exporter-0.14.0.linux-amd64

6: Запуск Node Exporter

Node Exporter запускается так же, как и Prometheus. Для начала создайте сервис systemd для Node Exporter.

sudo nano /etc/systemd/system/node_exporter.service

С помощью этого файла система systemd будет запускать Node Exporter в качестве пользователя node_exporter с включенным набором коллекторов по умолчанию.

Скопируйте следующие строки в свой файл:

[Unit]
Description=Node Exporter
Wants=network-online.target
After=network-online.target
[Service]
User=node_exporter
Group=node_exporter
Type=simple
ExecStart=/usr/local/bin/node_exporter
[Install]
WantedBy=multi-user.target

Коллекторы определяют, какие метрики генерирует Node Exporter. Полный список коллекторов Node Exporter, включая включенные по умолчанию и устаревшие, можно найти в файле README для Node Exporter.

Чтобы переопределить список коллекторов, используйте флаг —collectors.enabled.

...
ExecStart=/usr/local/bin/node_exporter --collectors.enabled meminfo,loadavg,filesystem
...

В таком случае Node Exporter будет генерировать метрики, используя только коллекторы meminfo, loadavg и filesystem. Вы можете использовать столько коллекторов, сколько вам нужно, но обратите внимание, что при перечислении коллекторов пробелов перед запятыми или после них нет.

Сохраните и закройте файл.

Перезапустите systemd.

sudo systemctl daemon-reload

Запустите Node Exporter:

sudo systemctl start node_exporter

Убедитесь, что запуск Node Exporter прошел успешно:

sudo systemctl status node_exporter

Здесь вы увидите состояние Node Exporter, основной идентификатор процесса (PID), использование памяти и т. п.

Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.

node_exporter.service - Node Exporter
Loaded: loaded (/etc/systemd/system/node_exporter.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2017-07-21 11:44:46 UTC; 5s ago
Main PID: 2161 (node_exporter)
Tasks: 3
Memory: 1.4M
CPU: 11ms
CGroup: /system.slice/node_exporter.service

Добавьте Node Exporter в автозагрузку:

sudo systemctl enable node_exporter

7: Настройка взаимодействия Prometheus и Node Exporter

Prometheus собирает только метрики экспортеров, указанных в разделе scrape_configs его конфигурационного файла. Добавьте в этот файл экспортер Node Exporter.

Откройте конфигурационный файл:

sudo nano /etc/prometheus/prometheus.yml

В конец раздела scrape_configs добавьте запись для node_exporter.

...
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']

Поскольку этот экспортер работает на том же сервере, что и Prometheus, можно использовать localhost вместо IP-адреса и порт по умолчанию Node Exporter, 9100.

Весь файл конфигурации должен выглядеть так:

global:
scrape_interval: 15s
scrape_configs:
- job_name: 'prometheus'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9090']
- job_name: 'node_exporter'
scrape_interval: 5s
static_configs:
- targets: ['localhost:9100']

Сохраните и закройте файл.

Перезапустите Prometheus:

sudo systemctl restart prometheus

Проверьте состояние программы:

sudo systemctl status prometheus

Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.

prometheus.service - Prometheus
Loaded: loaded (/etc/systemd/system/prometheus.service; disabled; vendor preset: enabled)
Active: active (running) since Fri 2017-07-21 11:46:39 UTC; 6s ago
Main PID: 2219 (prometheus)
Tasks: 6
Memory: 19.9M
CPU: 433ms
CGroup: /system.slice/prometheus.service

Теперь Prometheus и Node Exporter установлены, настроены и запущены. В качестве меры предосторожности нужно добавить базовую HTTP-аутентификацию, чтобы неавторизованные пользователи не смогли получить доступ к метрикам сервера.

8: Защита Prometheus

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

Для настройки базовой HTTP-аутентификации можно использовать веб-сервер Nginx, который поддерживается и Prometheus, и его инструментом визуализации данных, Grafana.

Сначала установите apache2-utils, что откроет доступ к утилите htpasswd для генерации файлов паролей.

sudo apt-get update
sudo apt-get install apache2-utils

Теперь создайте файл паролей, указав в команде htpasswd, где нужно сохранить файл, и имя пользователя, которое вы хотите использовать для аутентификации.

Примечание: Команда htpasswd предложит ввести и подтвердить пароль, который вы хотите связать с этим пользователем. Имя пользователя и пароль, которые вы вводите здесь, понадобятся в дальнейшем.

sudo htpasswd -c /etc/nginx/.htpasswd 8host

Команда создаст файл .htpasswd в каталоге /etc/nginx, содержащий имя пользователя и хешированную версию введенного вами пароля.

Затем настройте Nginx для использования паролей.

Создайте копию конфигурационного файла Nginx для Prometheus (в случае ошибки вы сможете использовать исходный файл, чтобы откатить настройки).

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/prometheus

Откройте файл:

sudo nano /etc/nginx/sites-available/prometheus

Найдите блок location / в блоке server:

...
location / {
try_files $uri $uri/ =404;
}
...

Чтобы перенаправить весь трафик в Prometheus, замените директиву try_files следующими строками:

...
location / {
auth_basic "Prometheus server authentication";
auth_basic_user_file /etc/nginx/.htpasswd;
proxy_pass http://localhost:9090;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
...

Благодаря этим настройкам пользователям придется проходить аутентификацию в начале каждого сеанса. Кроме того, обратный прокси-сервер направит все запросы, обработанные этим блоком, в Prometheus.

Сохраните файл и закройте текстовый редактор.

Отключите стандартный конфигурационный файл Nginx, удалив ссылку из каталога /etc/nginx/sites-enabled, и включите новый файл, создав ссылку на него.

sudo rm /etc/nginx/sites-enabled/default
sudo ln -s /etc/nginx/sites-available/prometheus /etc/nginx/sites-enabled/

Прежде чем перезапустить Nginx, проверьте синтаксис конфигураций:

sudo nginx -t

Вывод должен сообщить syntax is ok или test is successful. Если вы получили сообщение об ошибке, следуйте инструкциям на экране, чтобы устранить проблему, прежде чем продолжить настройку.

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустите Nginx:

sudo systemctl reload nginx

Проверьте состояние Nginx:

sudo systemctl status nginx

Если состояние сервиса не active, следуйте инструкциям на экране и повторите предыдущие действия, чтобы устранить проблему, прежде чем продолжить.

nginx.service - A high performance web server and a reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; vendor preset: en
Active: active (running) since Mon 2017-07-31 21:20:57 UTC; 12min ago
Process: 4302 ExecReload=/usr/sbin/nginx -g daemon on; master_process on; -s r
Main PID: 3053 (nginx)
Tasks: 2
Memory: 3.6M
CPU: 56ms
CGroup: /system.slice/nginx.service

На данный момент у вас есть полностью рабочий и защищенный сервер Prometheus. Теперь можно открыть веб-интерфейс, чтобы начать оценивать метрики.

9: Тестирование установки

Prometheus предоставляет базовый веб-интерфейс для мониторинга состояния самого себя и своих экспортеров, выполнения запросов и создания графиков. Но из-за простоты и ненадежности интерфейса команда Prometheus рекомендует устанавливать и использовать Grafana для задач более сложных, чем тестирование и отладка.

В этом мануале используется встроенный интерфейс, с помощью которого можно убедиться, что Prometheus и Node Exporter запущены, а также просмотреть простые запросы и графы.

Откройте в браузере:

http://your_server_ip

В появившемся диалоговом окне укажите имя пользователя и пароль, которые вы выбрали в разделе 8.

Затем откройте Expression Browser, где вы сможете выполнять и визуализировать пользовательские запросы.

Для начала проверьте статус Prometheus и Node Explorer, открыв меню Status в верхней части экрана, а затем выбрав Targets. Поскольку Prometheus собирает и свои данные, и метрики Node Exporter, в состоянии UP вы должны увидеть обе цели.

Если экспортера нет или вы видите сообщение об ошибке, проверьте состояние сервисов с помощью следующих команд:

sudo systemctl status prometheus
sudo systemctl status node_exporter

В выводе должна быть строка Active: active (running). Если это не так, или активный сервер работает некорректно, следуйте подсказкам на экране, чтобы исправить ошибки.

Чтобы убедиться, что экспортеры работают правильно, выполните несколько выражений Node Exporter.

Сначала перейдите в меню Graph в верхней части экрана, чтобы вернуться в Expression Browser.

В поле Expression введите node_memory_MemAvailable и нажмите кнопку Execute, чтобы обновить вкладку Console и вывести доступный объем памяти сервера.

По умолчанию Node Exporter сообщает эту сумму в байтах. Чтобы преобразовать ее в мегабайты, используйте математические операторы для деления на 1024 два раза.

В поле Expression введите node_memory_MemAvailable/1024/1024, а затем нажмите кнопку Execute.

Вкладка Console отобразит результаты в мегабайтах.

Если вы хотите проверить результаты, выполните команду free в терминале. Флаг -h отображает вывод free в удобочитаемом формате и выводит сумму в мегабайтах.

free -h

Этот вывод содержит сведения об использовании памяти, включая доступную память в столбце available.

..............total        used        free      shared  buff/cache   available
Mem:           488M        144M         17M        3.7M        326M        324M
Swap:            0B          0B          0B

Помимо базовых операторов язык запросов Prometheus также предоставляет множество функций для агрегирования результатов.

В поле avg_over_time(node_memory_MemAvailable[5m])/1024/1024 и нажмите кнопку Execute. В результате вы увидите среднюю доступную память в мегабайтах за последние 5 минут.

Теперь откройте вкладку Graph, чтобы отобразить выполненное выражение в виде графика, а не текста.

Наведите указатель мыши на график, чтобы получить дополнительную информацию о какой-либо конкретной точке вдоль осей X и Y.

Чтобы узнать больше о создании выражений во встроенном веб-интерфейсе Prometheus, обратитесь к официальной документации.

Чтобы узнать больше о расширениях Prometheus, ознакомьтесь со списком доступных экспортеров, а также с официальным веб-сайтом Grafana.

Tags: ,
  • dep

    Когда делаете перевод — ссылайтесь на оригинал статьи.