Задача мониторить 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Создадим конфигурационный файл /etc/vpoller/vpoller.conf
[proxy]frontend = tcp://*:10123backend = tcp://*:10124mgmt = tcp://*:9999[worker]db = /var/lib/vconnector/vconnector.dbproxy = tcp://localhost:10124mgmt = tcp://*:10000helpers = vpoller.helpers.zabbix, vpoller.helpers.czabbixtasks = vpoller.vsphere.tasks[cache]enabled = Truemaxsize = 0ttl = 3600housekeeping = 480Теперь инициализируем базу данных, в качесве БД используется SQLite
(vpoller)[zabbix@zabbix ~]$ vconnector-cli init2016-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 add2016-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 enable2016-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.rpmRetrieving http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpmwarning: /var/tmp/rpm-tmp.B6fSuR: Header V3 RSA/SHA256 Signature, key ID 352c64e5: NOKEYPreparing... ################################# [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 startredirect_stderr=truestdout_logfile=/var/log/vpoller/vpoller-proxy.logautostart=trueuser=zabbixstopsignal=INT/etc/supervisor.d/vpoller-worker.ini[program:vpoller-worker]command=/home/zabbix/vpoller/bin/vpoller-worker startredirect_stderr=truestdout_logfile=/var/log/vpoller/vpoller-worker.logautostart=trueuser=zabbixstopsignal=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 supervisordCreated 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Можно собрать СИшный модуль, но я не заморачивался.
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 например.
На этом пока все.