Мониторинг дискового хранилища 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 например.

На этом пока все.