Мониторинг дискового хранилища VMware в ZABBIX (vpoller)
Задача мониторить datastor'ы в Zabbix. Стандартные шаблоны для VMware не мониторят датасторы, попробуем реализовать этот функционал с помощью vpoller. Мониторить будем на предмет свободного места.
На этот раз буду настраивать не на ALTLinux, а на CentOS 7.2, просто такое требование, на альте было бы почти так же.
vPoller - это распределенная система VMware vSphere API-прокси, предназначена для обнаружения и опроса объектов vSphere. Легко интегрируется в различные системы мониторинга, например в zabbix. У vPoller есть хорошая документация, найти ее можно тут - http://vpoller.readthedocs.io/en/latest/installation.html
Установка пакетов
# yum install python-pip python-virtualenv git libtool gcc-c++
Я отредактировал запись в passwd для пользователя zabbix и создал ему пароль, что бы можно было от него запускать скрипты vpoller
zabbix:x:996:994:Zabbix Monitoring System:/home/zabbix:/bin/bash
Далее работаем от пользователя zabbix, создадим виртуаьлное окружение:
[zabbix@zabbix ~]$ virtualenv vpoller
[zabbix@zabbix ~]$ source vpoller/bin/activate
обновим pip
(vpoller)[zabbix@zabbix ~]$ pip instal pip --upgrade
установим vpoller
(vpoller)[zabbix@zabbix ~]$ pip install vpoller
настройка vpoller
Создадим конфигурационный файл /etc/vpoller/vpoller.conf
[proxy]
frontend = tcp://*:10123
backend = tcp://*:10124
mgmt = tcp://*:9999
[worker]
db = /var/lib/vconnector/vconnector.db
proxy = tcp://localhost:10124
mgmt = tcp://*:10000
helpers = vpoller.helpers.zabbix, vpoller.helpers.czabbix
tasks = vpoller.vsphere.tasks
[cache]
enabled = True
maxsize = 0
ttl = 3600
housekeeping = 480
Теперь инициализируем базу данных, в качесве БД используется SQLite
(vpoller)[zabbix@zabbix ~]$ vconnector-cli init
2016-08-09 14:28:55,554 - INFO - vconnector-cli[4954]: Initializing vConnector database at /var/lib/vconnector/vconnector.db
В этой базе данных будут храниться адреса хостов vmware, а так же логины и пароли. Добавим в базу наш vCenter:
(vpoller)[zabbix@zabbix /]$ vconnector-cli -H 10.10.0.10 -U zabbix -P PaSSword add
2016-08-09 14:37:19,925 - INFO - vconnector-cli[5117]: Adding/updating vSphere Agent 10.10.0.10 in database
Само собой учетка zabbix должна быть добавлена в vSphere с правами Read Only.
Проверим, что у нас в базе данных:
(vpoller)[zabbix@zabbix /]$ vconnector-cli get
+--------------+------------+------------+-----------+
| Hostname | Username | Password | Enabled |
+==============+============+============+===========+
| 10.10.0.10 | zabbix | PaSSword | 0 |
+--------------+------------+------------+-----------+
Видим, в последней колонке для нашего вцентра enable=0, включим эту запись:
(vpoller)[zabbix@zabbix /]$ vconnector-cli -H 10.10.0.10 enable
2016-08-09 14:41:31,594 - INFO - vconnector-cli[5170]: Enabling vSphere Agent 10.10.0.10
Проверяем:
(vpoller)[zabbix@zabbix /]$ vconnector-cli get
+--------------+------------+------------+-----------+
| Hostname | Username | Password | Enabled |
+==============+============+============+===========+
| 10.10.0.10 | zabbix | PaSSword | 1 |
+--------------+------------+------------+-----------+
Теперь все хорошо.
Что бы все заработало, нужно запустить vpoller-proxy и vpoller-worker, для проверки конфигурации запустим их в screen или просто в разных консолях:
Запускаем proxy:
(vpoller)[zabbix@zabbix /]$ vpoller-proxy start
[2016-08-09 14:49:35,163 - INFO/MainProcess] Starting Proxy Manager [0.6.3 release]
[2016-08-09 14:49:35,164 - INFO/MainProcess] Creating Proxy Manager sockets
[2016-08-09 14:49:35,166 - INFO/MainProcess] Starting Proxy process
[2016-08-09 14:49:35,168 - INFO/MainProcess] Proxy Manager is ready and running
[2016-08-09 14:49:35,170 - INFO/VPollerProxy-1] Proxy process is starting
[2016-08-09 14:49:35,170 - INFO/VPollerProxy-1] Creating Proxy process sockets
[2016-08-09 14:49:35,171 - INFO/VPollerProxy-1] Proxy process is ready and running
Запускаем worker:
(vpoller)[zabbix@zabbix bin]$ vpoller-worker start
[2016-08-09 14:53:19,938 - INFO/MainProcess] Starting Worker Manager [0.6.3 release]
[2016-08-09 14:53:19,939 - INFO/MainProcess] Starting Worker processes
[2016-08-09 14:53:19,940 - INFO/MainProcess] Concurrency: 1 (processes)
[2016-08-09 14:53:19,940 - INFO/MainProcess] Worker Manager is ready and running
[2016-08-09 14:53:19,942 - INFO/VPollerWorker-1] Worker process is starting
[2016-08-09 14:53:19,942 - INFO/VPollerWorker-1] Loading task module vpoller.vsphere.tasks
[2016-08-09 14:53:19,944 - INFO/VPollerWorker-1] Loading helper module vpoller.helpers.zabbix
[2016-08-09 14:53:19,945 - INFO/VPollerWorker-1] Loading helper module vpoller.helpers.czabbix
[2016-08-09 14:53:19,945 - INFO/VPollerWorker-1] Creating Worker sockets
[2016-08-09 14:53:19,950 - INFO/VPollerWorker-1] Created vSphere Agent for 10.10.0.10
[2016-08-09 14:53:19,950 - INFO/VPollerWorker-1] Worker process is ready and running
Обратите внимание на предпоследнюю строку, Created vSphere Agent for 10.10.0.10, это наш vcenter.
Попробуем запросить статус у нашего кластера cl00_core
(vpoller)[zabbix@zabbix /]$ vpoller-client --method cluster.get --vsphere-host 10.10.0.10 --name cl00_core --properties name,overallStatus
{"msg": "Successfully retrieved object properties", "result": [{"overallStatus": "green", "name": "cl00_core"}], "success": 0}
Получили ответ, все хорошо. Значит можно автоматизивароть запуск этих скриптов. Подключим epel репозиторий и установим supervisor:
[root@zabbix yum.repos.d]# rpm -iUvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
Retrieving http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm
warning: /var/tmp/rpm-tmp.B6fSuR: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:epel-release-7-8 ################################# [100%]
[root@zabbix yum.repos.d]# yum install supervisor
Создадим два конфигурационных файла:
/etc/supervisor.d/vpoller-proxy.ini
[program:vpoller-proxy]
command=/home/zabbix/vpoller/bin/vpoller-proxy start
redirect_stderr=true
stdout_logfile=/var/log/vpoller/vpoller-proxy.log
autostart=true
user=zabbix
stopsignal=INT
/etc/supervisor.d/vpoller-worker.ini
[program:vpoller-worker]
command=/home/zabbix/vpoller/bin/vpoller-worker start
redirect_stderr=true
stdout_logfile=/var/log/vpoller/vpoller-worker.log
autostart=true
user=zabbix
stopsignal=INT
Создадим директорию для логов
# mkdir /var/log/vpoller
# chown zabbix:zabbix /var/log/vpoller
Запускаем и проверяем
[root@zabbix etc]# systemctl start supervisord
[root@zabbix etc]# ps -A|grep vpoller
6128 ? 00:00:00 vpoller-worker
6129 ? 00:00:00 vpoller-proxy
6134 ? 00:00:00 vpoller-proxy
6145 ? 00:00:00 vpoller-worker
Весь вывод перенаправлен в соответствующие лог-файлы.
Добавляем в автозагрузку
[root@zabbix etc]# systemctl enable supervisord
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
Теперь интеграция с zabbix, создадим файл /usr/lib/zabbix/externalscripts/vpoller-zabbix
с таким содержанием:
#!/usr/bin/env sh
# Simple wrapper script to use with Zabbix helper
/home/zabbix/vpoller/bin/vpoller-client -H vpoller.helpers.zabbix "$@"
Сделаем его исполняемым:
# chmod +x vpoller-zabbix
Перезапускаем zabbix-server
# systemctl restart zabbix-server
Можно собрать СИшный модуль, но я не заморачивался.
Настройка ZABBIX
1. импортируем шаблон "zabbix-vpoller-templates.xml", брать тут: https://github.com/dnaeon/py-vpoller/tree/master/extra/zabbix/templates
или во вложении;
2 cоздаем хост, не знаю почему, но в качестве имени хоста нужно использовать IP-адрес вашего vCenter, иначе не работает, он пытается передать его как параметр в вполлер и не находит объект, хост добавляем в группу, у меня vCenter;
3. добавляем шаблоны, я добавляю только "Template VMware vSphere - vPoller" и "Template VMware vSphere Datastore - vPoller", хосты и виртуалки я мониторю стандартным шаблоном zabbix для VMware;
4. Добавляем макрос {$VSPHERE.HOST} 10.10.0.10;
5. Сохраняем.
Смотрим логи заббикса и vpoller-worker'а. Если все хорошо, то скоро в latest-data вы увидите свои датасторы.
Немного доработаем шаблон, добавим item, который будет отображать свободное пространство датастора в процентах.
Идем в Configuration -> Templates -> "Template VMware vSphere Datastore - vPoller" -> Items, тут жмем Create item;
Заполняем:
Name: Datastore freespace percent
Type: Calculated
Key: datastore.freespace.percent[{$URL},{HOST.HOST}]
Formula:
100*last("vpoller-zabbix[\"-m\", \"datastore.get\", \"-V\", \"{$VSPHERE.HOST}\", \"-n\", \"{HOST.NAME}\", \"-p\", \"info.freeSpace\"]")/last("vpoller-zabbix[\"-m\", \"datastore.get\", \"-V\", \"{$VSPHERE.HOST}\", \"-n\", \"{HOST.NAME}\", \"-p\", \"summary.capacity\"]")
Type of information: Numeric (unsigned)
Data type: Decimal
Units: %
Update interval (in sec): 60
Applications: General
И жмем Add.
Создаем триггеры.
1. Идем в Configuration -> Templates -> "Template VMware vSphere Datastore - vPoller" -> Triggers, тут жмем Create trigger;
заполяняем:
Name: Datastore free space less 20%
Expression: {Template VMware vSphere Datastore - vPoller:datastore.freespace.percent[{$URL},{HOST.HOST}].last()}<20
Severity - выбираем Warning.
По аналогии можно сделать еще пару триггеров на 15% и 10% с Saverity - High например.
На этом пока все.