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

Kate

Administrator
Команда форума
Мы поговорим сегодня про 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/prome.../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/alert...0.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/virtuozz...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 уже вполне мог получить какие-то данные с ваших машин, так что можно практически сразу изучать графики.

6c5f01a5d0084f0b4937cbad7f4a4545.png
4aa3d67a9950c28979a278c93c3a61a7.png
0258df4352ce6b834fe2485f52059e48.png

Наконец, настройка оповещений 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/
 
Сверху