О Prometheus
GitHub: https://github.com/prometheus
Prometheus – это мощная система мониторинга от разработчиков SoundCloud. Ее релиз состоялся в начале 2015 года, это новая, но уже многообещающая система.
В отличие от обычных систем мониторинга, где агенты отправляют данные на один сервер, Prometheus предоставляет децентрализованную архитектуру, которая позволяет контролировать все серверы из одного места, но при этом использовать независимые серверы мониторинга для отдельных команд.
Prometheus называют системой мониторинга нового поколения, так как это комплексное решение с несколькими инструментами, а именно:
- сервер для сбора и хранения метрик в темпоральной (time series) базе данных;
- клиентские библиотеки для разных языков программирования (Python, Java, Ruby, Go и других);
- Pushgateway – используется для сбора метрик кратковременных процессов;
- PromDash – инструмент для построения дашбордов;
- инструменты, использующиеся для экспортирования данных из других приложений (Ganglia, Statsd и т.д.);
- AlertManager – отвечает за уведомления;
- prometheus_cli – клиент командной строки, который используется для выполнения запросов к данным.
Помимо перечисленных выше инструментов, в Prometheus можно еще добавить экспортеры, которые будут генерировать дополнительные данные. Существуют экспортеры от официальной команды Prometheus и членов комьюнити; также написать экспортер можно самостоятельно. Интересные экспортеры:
- Node exporter – один из самых используемых экспортеров. Он предоставляет данные о нагрузках ввода и вывода, диска, памяти и центрального процессора.
- MySQL Server Exporter – экспортер для сбора данных, связанных с MySQL сервером.
Список весь экспортеров есть на официальном сайте.
Из данного руководства вы узнаете, как установить, настроить и поставить защиту на Prometheus и экспортер Node exporter для генерации метрики; это поможет вам легче отслеживать работу вашего сервера.
Требования
Перед тем, как приступить к выполнению инструкций, у вас должны быть:
- установленная ОС Ubuntu 16.04 с пользователем, который может выполнять команды sudo, и фаерволом;
- установленный Nginx (о том, как установить Nginx на Ubuntu 16.04, читайте в этой статье).
Шаг 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
Либо можете использовать более короткие команды:
$ sudo useradd -M -s /bin/false prometheus $ sudo useradd -M -s /bin/false node_exporter
Теперь можно перейти к установке Prometheus и созданию необходимой структуры директорий для данных и конфигурационных файлов.
Шаг 2: загрузка Prometheus
Сначала нужно скачать и распаковать текущую стабильную версию Prometheus в домашнюю директорию. Найти нужную версию можно на странице загрузки на официальном сайте.
$ cd ~ $ curl -LO https://github.com/prometheus/prometheus/releases/download/v1.7.1/prometheus-1.8.0.linux-amd64.tar.gz
Используйте команду sha256sum для того, чтобы сгенерировать контрольную сумму для загружаемого файла:
$ sha256sum prometheus-1.8.0.linux-amd64.tar.gz
Сравните полученный результат с контрольной суммой, заявленной на сайте Prometheus для того, чтобы убедиться, что вы скачали правильный, а не взломанный файл. Вывод:
5028defde39c4b9975b6174a2dbf29983cbae9f18e9d8313d9187d4b1078da27 prometheus-1.8.0.linux-amd64.tar.gz
Если контрольные суммы не совпадают, удалите загруженный файл и повторите процедуру загрузки еще раз.
Теперь распакуйте загруженный архив:
$ tar xvf prometheus-1.8.0.linux-amd64.tar.gz
Будет создана директория prometheus-1.8.0.linux-amd64, в которой будут находиться два бинарных файла (prometheus и promtool), а также лицензия и несколько других файлов.
Скопируйте бинарные файлы в директорию /usr/local/bin:
$ sudo cp prometheus-1.8.0.linux-amd64/prometheus /usr/local/bin/ $ sudo cp prometheus-1.8.0.linux-amd64/promtool /usr/local/bin/
Передайте права этих файлов пользователю prometheus, который был создан ранее.
$ 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
Prometheus установлен, и далее необходимо создать конфигурационные и сервисные файлы.
Шаг 3: настройка Prometheus
Следуя стандартному соглашению Linux, нужно создать директорию в /etc для конфигурационных файлов и директорию в /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 используйте nano либо другой текстовый редактор для того, чтобы создать конфигурационный файл prometheus.yml. На данный момент этот файл будет содержать всю необходимую для запуска Prometheus информацию.
$ sudo nano /etc/prometheus/prometheus.yml
Внимание. Конфигурационный файл Prometheus использует YAML-формат, который запрещает табуляцию и требует использовать в качестве отступа два пробела. Prometheus не запустится, если конфигурационный файл будет иметь неправильное форматирование.
В настройках global определите изначальный интервал для сбора данных. Обратите внимание, что Prometheus применит эти настройки ко всем экспортерам кроме тех, настройки которых будут стоять по значимости выше настроек global.
global: scrape_interval: 15s
scrape_interval показывает, что Prometheus будет собирать метрики из всех экспортеров каждые 15 секунд, что достаточно долго для большинства экспортеров.
Теперь добавьте сам Prometheus в список экспортеров следующей директивой scrape_configs:
... scrape_configs: - job_name: 'prometheus' scrape_interval: 5s static_configs: - targets: ['localhost:9090']
Prometheus использует job_name в качестве метки экспортера в запросах и графиках, так что выбирайте что-нибудь описательное для этой строки.
Так как Prometheus самостоятельно экспортирует важные данные, которые можно использовать для мониторинга производительности и исправления ошибок, следует изменить общий scrape_interval с 15 на 5 секунд для более частых обновлений информации.
Наконец, Prometheus использует директивы static_configs и targets для определения, где работают экспортеры. Так как этот конкретный экспортер работает на том же сервере, что и сам Prometheus, вместо IP-адреса можно использовать localhost или порт по умолчанию 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.8.0, 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.
Скопируйте следующие строки в открытый файл:
[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 start prometheus
Для того, чтобы убедиться, что Prometheus запущен, проверьте статус службы:
$ sudo systemctl status prometheus
В выводе вы увидите статус Prometheus, идентификатор процесса (PID), использование памяти и другие данные.
Если статус службы не active, следуйте инструкциям на экране для того, чтобы исправить ошибку перед тем, как двигаться дальше.
Output ● 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 ...
После просмотра нажмите Q для того, чтобы выйти.
Наконец, нужно сделать так, чтобы служба запускалась сразу после запуска системы.
$ sudo systemctl enable prometheus
Теперь, когда Prometheus работает, можно перейти к установке дополнительного экспортера, который будет генерировать данные о серверных ресурсах.
Об этом будет рассказано во второй части статьи.
Комментарии