Шаг 5: загрузка Node Exporter
Для того чтобы Prometheus показывал больше метрик, чем задумано изначально, необходимо установить экспортер Node Exporter. Он показывает детальную информацию о системе, включая данные о процессоре и использовании памяти.
Для начала скачайте текущую стабильную версию Node Exporter в вашу домашнюю директорию. Последнюю версию (вместе с контрольной суммой) вы можете найти на странице загрузки.
$ cd ~ $ curl -LO https://github.com/prometheus/node_exporter/releases/download/v0.14.0/node_exporter-0.15.0.linux-amd64.tar.gz
Используйте команду sha256sum для того, чтобы сгенерировать контрольную сумму для загруженного файла:
$ sha256sum node_exporter-0.15.0.linux-amd64.tar.gz
Убедитесь, что контрольная сумма совпадает с той, которая указана на странице загрузки.
9413b3c94dbe9d4341ce85ea7e3f0e20abb8804135b8c236c4440c2c841551d7 node_exporter-0.15.0.linux-amd64.tar.gz
Если суммы не совпадают, удалите загруженный файл и повторите загрузку заново.
Теперь распакуйте загруженный архив.
$ tar xvf node_exporter-0.15.0.linux-amd64.tar.gz
У вас появится директория под названием node_exporter-0.15.0.linux-amd64, в которой будет находиться бинарный файл node_exporter и некоторые другие файлы.
Скопируйте бинарный файл в директорию /usr/local/bin и передайте права пользователю node_exporter, который был создан в 1 шаге 1 части статьи.
$ sudo cp node_exporter-0.15.0.linux-amd64/node_exporter /usr/local/bin $ sudo chown node_exporter:node_exporter /usr/local/bin/node_exporter
Наконец, удалите оставшиеся файлы из домашней директории, так как больше они не понадобятся.
$ rm -rf node_exporter-0.15.0.linux-amd64.tar.gz node_exporter-0.15.0.linux-amd64
Теперь у вас есть установленный экспортер Node Exporter, далее нужно будет протестировать и запустить его.
Шаг 6: запуск Node Exporter
Действия, которые нужно выполнить для запуска Node Exporter, похожи на те, которые необходимо выполнить для того, чтобы запустить Prometheus. Начните с создания служебного файла Systemd для Node Exporter.
$ sudo nano /etc/systemd/system/node_exporter.service
Этот файл сообщит системе, что 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 будет собирать. В README файле Node Exporter вы можете посмотреть полный список коллекторов, как тех, которые включены по умолчанию, так и тех, которые выключены.
Для того, чтобы переписать установленный список коллекторов, нужно использовать ключ --collectors.enabled:
... ExecStart=/usr/local/bin/node_exporter --collectors.enabled meminfo,loadavg,filesystem ...
В примере выше Node Exporter будет собирать метрики, используя только коллекторы meminfo, loadavg and filesystem. Вы можете добавлять или убирать из списка то количество коллекторов, которое вам нужно, но обратите внимание, что ни перед, ни после запятых не должно быть пробелов.
Сохраните и закройте текстовый редактор.
Перезагрузите systemd для того, чтобы использовать только что созданную службу.
$ sudo systemctl daemon-reload
Теперь вы можете запустить Node Exporter при помощи следующей команды:
$ sudo systemctl start node_exporter
Убедитесь, что экспортер работает корректно, используя команду status:
$ 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
Наконец, нужно сделать так, чтобы служба запускалась сразу после запуска системы.
$ sudo systemctl enable node_exporter
Теперь, когда Node Exporter полностью настроен и работает так, как предполагается, перейдем к тому, как настроить Prometheus для сбора новых данных.
Шаг 7: настройка Prometheus для использования Node Exporter
Так как Prometheus собирает данные только тех экспортеров, которые указаны в scrape_configs в конфигурационном файле, то необходимо добавить туда Node Exporter (точно так же, как был добавлен сам Prometheus ранее).
Откройте конфигурационный файл:
$ sudo nano /etc/prometheus/prometheus.yml
В конце блока scrape_configs добавьте новую запись под названием node_exporter:
... - job_name: 'node_exporter' scrape_interval: 5s static_configs: - targets: ['localhost:9100']
Так как этот экспортер работает на том же сервере, где и сам Prometheus, вместо IP-адреса можно использовать localhost с портом 9100, который Node Exporter имеет по умолчанию.
Ваш конфигурационный файл будет выглядеть следующим образом:
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
Еще раз убедитесь, что все работает корректно, используя команду status:
$ sudo systemctl status prometheus
Вывод должен быть примерно таким:
● 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. Следующий шаг – настройка безопасности для того, чтобы несанкционированные пользователи не могли получить доступ к вашим данным.
Шаг 8: защита Prometheus
Prometheus не имеет встроенной системы защиты. С одной стороны, это говорит о том, что это гибкая система, которая имеет совсем немного ограничений; с другой стороны, это значит, что вам нужно убедиться, что ваши данные (и установленная служба в целом) достаточно защищены.
Далее вы узнаете, как при помощи Nginx добавить базовую HTTP-авторизацию, которую полностью поддерживают Prometheus и предпочтительная графическая оболочка Grafana.
Начните с установки apache2-utils; это даст доступ к утилите htpasswd для генерации файлов паролей.
$ sudo apt-get update $ sudo apt-get install apache2-utils
Теперь создайте файл с паролем, при этом нужно указать, что вы хотите хранить файл и какого пользователя вы хотите использовать для идентификации.
Примечание. htpasswd попросит ввести и подтвердить пароль, который вы будете использовать с этим пользователем. Обязательно запомните имя пользователя и пароль, которые вы введете на этом этапе, так как они понадобятся для авторизации в Prometheus в следующем шаге.
$ sudo htpasswd -c /etc/nginx/.htpasswd username
В результате у вас появится файл .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 и активировать новый конфигурационный файл:
$ 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
Вывод должен быть примерно таким:
● 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 есть базовый веб-интерфейс для отслеживания его статуса и статуса экспортеров. Однако так как этот интерфейс очень простой, команда Prometheus рекомендует установить и использовать Grafana для любых действий, которые сложнее тестирования и отладки программы.
Однако в данном руководстве я буду использовать изначальный веб-интерфейс.
Начните с ввода в браузере IP-адреса вашего сервера: http://IP-адрес сервера.
В окне авторизации введите имя пользователя и пароль, которые вы задали ранее в шаге 8.
После того, как вы авторизуетесь, вы увидите страницу, где вы можете выполнять и визуализировать различные запросы.
Перед выполнением выражения проверьте статус 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 введите node_memory_MemAvailable и нажмите кнопку Execute для того, чтобы обновить вкладку Console и увидеть доступное количество памяти.
По умолчанию Node Exporter показывает количество в байтах. Для того, чтобы конвертировать их в мегабайты, необходимо два раза использовать деление на 1024.
Поэтому в поле Expression введите node_memory_MemAvailable/1024/1024 и снова нажмите кнопку Execute.
Теперь вы увидите результат в мегабайтах.
Если вы хотите проверить результат, выполните команду free в своем терминале (флаг –h выведет результат в мегабайтах).
$ free -h
В выводе вы увидите информацию об использовании памяти, в том числе о доступной памяти в колонке available:
total used free shared buff/cache available Mem: 488M 144M 17M 3.7M 326M 324M Swap: 0B 0B 0B
В дополнение к базовым операциям язык запросов Prometheus также дает возможность использовать множество функций для работы с результатами.
В поле Expression введите avg_over_time(node_memory_MemAvailable[5m])/1024/1024 и нажмите кнопку Execute. Вы увидите среднее количество доступной памяти в последние 5 минут в мегабайтах.
Теперь нажмите вкладку Graph для того, чтобы увидеть вместо текста график.
Если навести мышку на определенную точку, то вы увидите дополнительную информацию.
Для того, чтобы узнать больше возможных выражений, смотрите документацию.
Заключение
Из двух частей этого руководства вы узнали, как загрузить, установить, настроить, защитить и протестировать Prometheus с одним дополнительным экспортером.
Для того, чтобы узнать, что еще может делать Prometheus, читайте официальную документацию.
Также советую посмотреть список доступных экспортеров и официальный сайт Grafana.
Комментарии