Мониторинг Virtuozzo Hybrid Server с помощь Prometheus

от автора

Пользователи продуктов Virtuozzo и OpenVZ обычно работают с множеством развернутых машин под управлением нашего ПО. Поэтому для них логично запустить централизованный мониторинг всего парка таких серверов. И сегодня мы расскажем о том, как использовать для этого встроенные сервисы мониторинга Virtuozzo Hybrid Infrastructure на основе Prometheus.

Схожие сервисы доступны и в VHS, но только если вы используете графические интерфейс для управления кластером Virtuozzo Storage. Если же у вас нет кластера Storage, или вы не используете GUI для его администрирования (либо работаете с OpenVZ, где подключение Virtuozzo Storage является возможным, но редко встречающимся сценарием), то для мониторинга приходится обращаться к сторонним решениям.

Анализ предпочтений пользователей (публично доступный для OpenVZ здесь) показывает следующее: как и для мониторинга серверов с Linux и основанных на нем решениями, для продуктов Virtuozzo популярны Zabbix и Prometheus.

Мы поговорим сегодня про Prometheus – более молодой, но активно набирающий популярность инструментарий.

Непосредственно Prometheus занимается сбором данных от подвластных ему экспортеров — в репозиториях VHS доступны node_exporter (для сбора общих характеристик сервера, таких как использование ресурсов и состояние дисков) и libvirt_exporter (для сбора информации о виртуальных машинах, управляемых libvirt). Экспортеры основаны на соответствующих стандартных проектах, но содержат ряд специфичных для Virtuozzo изменений.

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

Готовим плацдарм

Prometheus, Grafana и Alertmanager можно развернуть на отдельной машине, не обязательно физической. Раз уж мы говорим о Virtuozzo Hybrid Server, то логично развернуть их внутри контейнера на одной из машин VHS. Например, внутри контейнера с Virtuozzo Linux 8; для функционирования вполне достаточно двух ядер ЦПУ и пары гигабайт памяти:

# prlctl create promct --vmtype=ct --ostemplate=vzlinux-8-x86_64 # prlctl set promct --cpu 2 # prlctl set promct --memsize 2G

Не забудьте выставить необходимый IP адрес и доменное имя, по которым будет доступен ваш контейнер.

Внутри контейнера не помешает выставить правильный часовой пояс:

# timedatectl set-timezone 'Europe/Moscow' 

А также настроить firewall – порт 9090 для веб-интерфейса Prometheus, 9093 для AlertManager и 3000 для Grafana. Обратите внимание, что веб Prometheus и Alertmanager доступны без пароля, так что выставляйте их только в ваши внутренние сети.

# firewall-cmd --zone=public --permanent --add-port=9090/tcp # firewall-cmd --zone=public --permanent --add-port=9093/tcp # firewall-cmd --zone=public --permanent --add-port=3000/tcp # firewall-cmd --reload

Устанавливаем Prometheus & co.

Prometheus входит в репозитории многих дистрибутивов, в том числе и Virtuozzo Linux 8, поэтому можно его установить штатными средствами:

# yum install prometheus

Если вас не устраивает версия из дистрибутива (например, хочется самую свежую, либо наоборот — свежая имеет какие-то раздражающие вас проблемы), то можно просто скачать бинарные файлы с GitHub и положить их в директорию /opt (или в другую на ваш выбор). Например, для версии 2.21.0:

# cd /opt # wget https://github.com/prometheus/prometheus/releases/download/v2.21.0/prometheus-2.21.0.linux-amd64.tar.gz # tar -xzf prometheus*.tar.gz 

Единственный нюанс при ручной установке — не забыть создать (либо скорректировать) service-файл для systemd, чтобы там были правильные пути:

 

# cat /lib/systemd/system/prometheus.service  [Unit]  Description=Prometheus  Wants=network-online.target  After=network-online.target  [Service]  Type=simple  WorkingDirectory=/opt/prometheus-2.21.0.linux-amd64  Restart=on-failure  ExecStart=/opt/prometheus-2.21.0.linux-amd64/prometheus  [Install]  WantedBy=multi-user.target

Аналогично с Alertmanager — можно установить из репозиториев:

# yum install alertmanager

 … А можно и с сайта, точно также не забыв service-файл:

# wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz  # cd /opt  # tar -xzf alertmanager*.tar.gz  # cat /usr/lib/systemd/system/alertmanager.service  [Unit]  Description=Alertmanager  Wants=network-online.target  After=network-online.target  After=prometheus.service  [Service]  Type=simple  WorkingDirectory=/root/alertmanager-0.21.0.linux-amd64  Restart=on-failure  ExecStart=/root/alertmanager-0.21.0.linux-amd64/alertmanager --config.file=alertmanager.yml  [Install]  WantedBy=multi-user.target

Grafana сразу предоставляет собранные rpm-пакеты, так что можно, опять же, поставить либо из дистрибутива:

# yum install grafana

 либо с сайта проекта:

 # yum install https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm

 Подготавливаем машины с Virtuozzo Hybrid Server

 На каждом сервере VHS, который предполагается мониторить, необходимо установить пакеты с экспортерами:

 # yum install node_exporter libvirt_exporter

Чтобы экспортеры могли отдавать данные в Prometheus, необходимо открыть соответствующие порты — 9177 для libvirt_exporter и 9100 для node_exporter. Доступ к ним желательно ограничить адресом машины с Prometheus, чтобы посторонние люди не делали попыток снять метрики с ваших серверов:

# firewall-cmd --permanent --zone=public --add-rich-rule='      rule family="ipv4"      source address="1.2.3.4/32"      port protocol="tcp" port="9177" accept'  # firewall-cmd --permanent --zone=public --add-rich-rule='      rule family="ipv4"      source address="1.2.3.4/32"      port protocol="tcp" port="9100" accept'  # firewall-cmd --reload  

Здесь «1.2.3.4» необходимо поменять на реальный адрес Prometheus.

Наконец, смело включаем и запускаем сервисы экспортеров:

# systemctl enable node_exporter  # systemctl enable libvirt-exporter  # systemctl start node_exporter  # systemctl start libvirt-exporter

Дело за малым — надо сообщить Прометею, откуда ему собирать информацию.

Настройка Prometheus

Конфигурация самого Prometheus содержится в наборе Yaml-файлов. Писать их с нуля, даже с помощью примеров из документации — то еще развлечение. Именно этот процесс и решили улучшить в Virtuozzo, положив в репозитории VHS 7 пакет vz-prometheus-cfg с шаблонами файлов конфигурации. Его можно установить на любой машине VHS 7, а если вы развернули Prometheus внутри VzLinux 8 — то можно его поставить прямо на сервере из репозиториев этого дистрибутива:

# yum install vz-prometheus-cfg

После чего изучать директорию /usr/share/vz-prometheus-cfg/, начав с файла prometheus-example.yml.

Этот файл необходимо отредактировать под ваши нужды и под именем prometheus.yml сохранить в машину или контейнер, где у вас расположен Prometheus. Главное, что там необходимо изменить – это местоположение файлов *rules.yml и *alerts.yml, которые также можно скопировать из директории /usr/share/vz-prometheus-cfg/ на сервер Prometheus. Можно их изучить и даже отредактировать, однако они вполне работоспособны и в исходном варианте.

В первую очередь здесь интересны vz-rules, содержащие правила сбора информации о потреблении ресурсов (диска, процессора, памяти и сети) виртуальными окружениями и предупреждения о проблемах с ресурсами (останов ВМ из-за ошибки диска, исчерпание диска на сервере и тому подобное).

Непосредственно машины, с которых надо собирать информацию, указываются в target-файлах. В первом приближении достаточно одного такого файла со списком машин для каждого экспортера (напомним, node_exporter отдает информацию на порту 9100, а libvirt — 9177):

# cat my-vz-libvirt.yml  - labels:      group: my-vz-deployment    targets:    - my.node1:9177    - my.node2:9177     # cat my-vz-node.yml  - labels:      group: my-vz-deployment    targets:    - my.node1:9100    - my.node2:9100   

Пути к этим файлам необходимо указать в соответствующих разделах секции scrape_configs в prometheus.yml:

scrape_configs:    ...    - job_name: node      ...      file_sd_configs:        - files:          - /root/prometheus-2.21.0.linux-amd64/targets/my-vz-node.yml    - job_name: libvirt      ...      file_sd_configs:        - files:          - /root/prometheus-2.21.0.linux-amd64/targets/my-vz-libvirt.yml     

Пример полного файла конфигурации можно посмотреть в документации: https://docs.virtuozzo.com/virtuozzo_hybrid_server_7_users_guide/advanced-tasks/monitoring-via-prometheus.html. Обратите внимание, что важными параметрами являются job_name — на них идет отсылка в файлах с правилами и алертами. Так что если задумаете менять эти имена — не забудьте пройтись и по другим файлами конфигурации и провести соответствующие замены.

Как только все необходимые файлы отредактированы — пора стартовать сервисы:

# systemctl start prometheus  # systemctl start alertmanager  # systemctl start grafana-server

После чего продолжать уже с настройкой двух других инструментов

Grafana и Alertmanager

Конфигурация Grafana осуществляется через ее веб-интерфейс по адресу http://<ваш-сервер>:3000. Логин-пароль по умолчанию — «admin» / «admin».

Настройка достаточно проста и стандартна — сначала необходимо указать «Prometheus» как источник данных, пройдя в Configuration -> Data Sources -> «Add data source», выбрав  «Prometheus» и указав http://localhost:9090 в качестве его адреса.

Далее можно импортировать готовые json-файлы, опять же поставляемые с пакетов vz-prometheus-cfg — grafana_hn_dashboard.json и grafana_ve_dashboard.json — служащие соответственно для отображения информации о серверах и о виртуальных окружениях. Импорт осуществляется в меню «Dashboards» -> «Manage» -> «Import», в качестве источника данных необходимо добавить настроенный ранее Prometheus.

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

Наконец, настройка оповещений Alertmanager – тут все на ваше усмотрение, готовых рецептов а-ля “отправить отчет в саппорт Virtuozzo” не предусмотрено. Так что можно, например, просто настроить типичные оповещения по email в /etc/alertmanager/alertmanager.yaml:

route:    receiver: 'email'     group_by: ['alertname', 'cluster']    group_wait: 30s    group_interval: 5m    repeat_interval: 3h   receivers:  - name: 'email'    email_configs:    - to: 'admin@myserver.com'      from: 'vz-alert@myserver.com'      smarthost: smtp.myserver.com:587

Всего алертов «из коробки» предусмотрено почти три десятка — полный перечень доступен в документации.

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

ссылка на оригинал статьи https://habr.com/ru/company/virtuozzo/blog/560102/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *