По работе оказалось необходимо передавать в заббикс для отслеживания метрики от XenServer, в частности среднюю загрузку процессора, чтобы можно было увидеть совпадают ли тормоза приложения с 100% загрузкой процессора всей машины. По метрикам собранным из виртуалок это однозначно никак не увидеть.
До этого эти метрики смотрели в XenCenter — но это неудобно, т.к. сложно соотносить с бизнес-метриками из заббикса (с средним временем обработки запросов к примеру).
Метрики доступны начиная с XenServer 6.1:
https://support.citrix.com/article/CTX135033
Для их использования существует тулза rrd2csv — но для целей передачи значения из неё в заббикс она обладает рядом недостатков:
- работает пока не прервут, выдавая метрики раз в заданное число секунд (по-умолчанию 5)
- выплевывает результат в формате csv
- работает только под root
Проблема 1 решается с помощью timeout.
Проблема 2 решается благодаря тому, что утилите можно передать в особом формате какие именно метрики хочется получить.
В итоге получается нечто такое:
# (timeout 1s rrd2csv AVERAGE:host::cpu_avg || true) | cut -f2 -d» » | tail -n 1
возвращает текущую среднюю загрузку процессора.
Для решения проблемы 3 — поставил получение этой метрики в крон с сохранением значения в файл:
* * * * * (timeout 1s /opt/xensource/bin/rrd2csv AVERAGE:host::cpu_avg || true) | cut -f2 -d» » | tail -n 1 > /tmp/xencpu
а UserParameter в zabbix читает уж из него:
UserParameter=xen.cpu,cat /tmp/xencpu