Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!
Привет, расскажу как удобно и красиво можно мониторить Citrix XenDesktop ферму заливая данные в zabbix
Citrix XenDesktop необходим компаниям, у которых много офисов в разных уголках страны, применяется разнообразное сложное ПО вроде IBSO/RBO требующее потдежки в актуальном состоянии Ось, ПО, оракловых клиентов и много чего еще, по этому компаниям проще купить лицензии и внедрить Citrix XenDesktop чем тянуть и актуализировать огромное кол-во ПК (у нас например в компании ПК более 4к)
Какие основные ресурсы Citrix XenDesktop может отдать сотрудникам компании:
набор приложений Applications
индивидуальный удаленный рабочий стол, привязанный к сотруднику и его VM
рабочий стол из состава терминальной(терминальных) фермы
Для отслеживания правильности работы Citrix XenDesktop фермы был выпущен продукт Citrix Director который вроде и удобен для сотрудников (первой линии), но он совершенно не пригоден для мониторинга и получение оповещений ответственным за сопровождение самой системы Citrix XenDesktop.
Я реализовал интеграцию Citrix XenDesktop и zabbix для того чтобы коллегам было проще работать и администрировать Citrix ферму
Delivery Group можем контролировать:
Кол-во сессий Connected/Disconnected, Concurrent, Desktop
Хосты в состоянии FailedToStart/None/StuckOnBoot/Unknown/Unregistered
Были ли ошибки по ограничению подключений MaxCapacity
Список сбойных сессий и список сбойных хостов с подробностями
Applications можем контролировать:
динамику запуска приложений и отслеживать приложения которые пользователи не запускают
На перспективу, можно реализовать:
отчет об использовании Applications
отчет самого невезучего пользователя/хоста (top Failed)
аналитика по утилизации CPU/MEM
аналитика по утилизации лицензий
Работа строится через API Citrix XenDesktop, ссылки для осмысления:
Citrix Monitor Service API https://developer-docs.citrix.com/projects/monitor-service-odata-api/en/latest/
Access Monitor Service data using the OData v4 endpoint in Citrix Cloud https://developer-docs.citrix.com/projects/access-monitor-service-data-citrix-cloud/en/latest/
Introducing New OData API for XenApp & XenDesktop’s Monitor Service
https://www.citrix.com/blogs/2017/12/04/introducing-new-odata-api-for-xenapp-xendesktops-monitor-service/
Мой репозитарий https://github.com/dima-sheihin/zabbix-citrix
План запуска технологии следующий:
1) импортируем шаблоны Template CitrixApplications.xml, Template CitrixConnectionFailure.xml, Template CitrixConnectionFailureApplications.xml, Template CitrixConnectionFailureDesktop.xml, Template CitrixDeliveryGroup.xml, Template CitrixMachines.xml в мониторинг, мы используем zabbix 5.0.5, возможны ошибки несовместимости шаблонов с другими версиями мониторинга
2) создаем хост-группы
3) помещаем файлы citrix-app-activity, citrix-connection-failure, citrix-connection-failure-userlog, citrix-dg-machine-failure-logs, citrix-dg-session, citrix-dg-session-desktop, citrix-zabbix-create-cache, citrix-zabbix-create-delete-host, citrix.pm, z_sender.pm на сервер мониторинга, обеспечиваем зависимости и запуск скриптов без ошибок зависемостей
4) В Citrix XenDesktop ферме, создаем пользователя с правами read-only на все объекты
5) Поправим файл citrix.pm
'user' => $args{user} || 'citrix_user',
'password' => $args{password} || '123',
'host' => $args{host} || 'dc.host.com',
'cache_files' => '/usr/zabbix-citrix/cache.json',
6) Поправим файл citrix-zabbix-create-delete-host
$work{template}->{macro} = '{$MACRO}';
$work{zabbix}{CitrixApplications}->{template} = 'Template CitrixApplications';
$work{zabbix}{CitrixApplications}->{templateid} = undef;
$work{zabbix}{CitrixApplications}->{hostgroup} = 'CitrixApplications';
$work{zabbix}{CitrixApplications}->{hostgroupid} = undef;
$work{zabbix}{CitrixApplications}->{citrix_set} = 'Applications';
$work{zabbix}{CitrixApplications}->{citrix_prefix} = 'CitrixApp';
$work{zabbix}{CitrixApplications}->{citrix_select} = 'Id,Name';
$work{zabbix}{CitrixApplications}->{citrix_select_Name} = 'Name';
$work{zabbix}{CitrixDeliveryGroup}->{template} = 'Template CitrixDeliveryGroup';
$work{zabbix}{CitrixDeliveryGroup}->{templateid} = undef;
$work{zabbix}{CitrixDeliveryGroup}->{hostgroup} = 'CitrixDeliveryGroup';
$work{zabbix}{CitrixDeliveryGroup}->{hostgroupid} = undef;
$work{zabbix}{CitrixDeliveryGroup}->{citrix_set} = 'DesktopGroups';
$work{zabbix}{CitrixDeliveryGroup}->{citrix_prefix} = 'CitrixDG';
$work{zabbix}{CitrixDeliveryGroup}->{citrix_select} = 'Id,Name';
$work{zabbix}{CitrixDeliveryGroup}->{citrix_select_Name} = 'Name';
$work{zabbix}{CitrixMachines}->{template} = 'Template CitrixMachines';
$work{zabbix}{CitrixMachines}->{templateid} = undef;
$work{zabbix}{CitrixMachines}->{hostgroup} = 'CitrixMachines';
$work{zabbix}{CitrixMachines}->{hostgroupid} = undef;
$work{zabbix}{CitrixMachines}->{citrix_set} = 'Machines';
$work{zabbix}{CitrixMachines}->{citrix_prefix} = 'CitrixHost';
$work{zabbix}{CitrixMachines}->{citrix_select} = 'Id,Name,HostedMachineName';
$work{zabbix}{CitrixMachines}->{citrix_select_Name} = 'HostedMachineName';
my $zabbix;
eval {
$zabbix = Zabbix::Tiny->new( server => "http://ххх.хх.хх.хх/api_jsonrpc.php", user => "ххххх", password => "ххх" );
if ( ! defined $zabbix ) {
print "fatal, exit\n";
exit;
}
};
Убедимся в наличии шаблонов в мониторинге:
{template} = 'Template CitrixApplications';
{template} = 'Template CitrixDeliveryGroup';
{template} = 'Template CitrixMachines';
Убедимся в наличии хост-группы в мониторинге:
{hostgroup} = 'CitrixApplications'; <- тут будут созданы все Applications
{hostgroup} = 'CitrixDeliveryGroup'; <- тут будут созданы все DeliveryGroup
{hostgroup} = 'CitrixMachines'; <- тут будут созданы все Machines или про простому сервера
Скрипт citrix-zabbix-create-delete-host подключается к Citrix ферме и к zabbix серверу, определяет: объекты не созданные в мониторинге - создает их; объеты удаленные из Citrix фермы - удаляет их из мониторинга. Все взаимодействие через присоединенные шаблоны в мониторинге, по этому не бойтесь другие объекты не относящиеся к Citrix скрипт удалять из мониторинга не будет.
Выполним citrix-zabbix-create-delete-host , нужно добится того чтобы все CitrixDeliveryGroup CitrixApplications CitrixMachines были отзеркалированны в мониторинге.
[root@zabbix]# ./citrix-zabbix-create-delete-host
system [CitrixMachines] no set name vserver [...], (...\CTXIMG...) skip
system [CitrixMachines] no set name vserver [...], (...\CTXIMG...) skip
system [CitrixMachines] no set name vserver [...], (...\CTXIMG...) skip
New host ID 24441 hosts [CitrixHost_....]
New host ID 24442 hosts [CitrixHost_....]
New host ID 24443 hosts [CitrixHost_....]
New host ID 24444 hosts [CitrixHost_....]
New host ID 24445 hosts [CitrixHost_....]
New host ID 24446 hosts [CitrixHost_....]
Press any key to continue...
7) Поправим citrix-zabbix-create-cache файл, авторизацию, после нужно добится того чтобы был примерно такой вывод
[root@zabbix]# ./citrix-zabbix-create-cache
CheckCache Loading Users ...[ok]
CheckCache Loading Machines ...[ok]
CheckCache Loading Applications ...[ok]
CheckCache Loading DesktopGroup (DeliveryGroup) ...[ok]
CheckCache Loading MonitoringEnums ...[ok]
SaveCache saves files ...[ok]
LoadCache load files ...[ok]
Users хх
Machines хх
Applications хх
DeliveryGroup хх
Enums хх
Press any key to continue...
8) Далее вернемся в web интерфейс мониторинга
Обратите внимание, шаблон Template CitrixDeliveryGroup содежит полный список всех DeliveryGroup которые есть в ферме.
В зависимости как у вас сгрупированны DG по функциональному назначению можно добавить по вкусу один, два или три шаблона к той или иной DeliveryGroup:
Template CitrixConnectionFailureDesktop
Template CitrixConnectionFailureApplications
Template CitrixConnectionFailure
После добавления скрипты которые будут отрабатывать на уровне сервера, будут определять какие DeliveryGroup подключенны к тому или иному шаблону и добавлять статистические данные по ним
9) Почередно проверьте файлы, добавив авторизацию там где это требуется: citrix-app-activity, citrix-connection-failure, citrix-connection-failure-userlog, citrix-dg-machine-failure-logs, citrix-dg-session, citrix-dg-session-desktop нормальная работа скриптов может выглядить так:
[root@zabbix]# ./citrix-app-activity
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 28; failed: 0; total: 28; seconds spent: 0.000673"
sent: 28; skipped: 0; total: 28
Press any key to continue...
[root@zabbix]# ./citrix-connection-failure
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 126; failed: 120; total: 246; seconds spent: 0.005331"
sent: 246; skipped: 0; total: 246
Response from "127.0.0.1:10051": "processed: 129; failed: 117; total: 246; seconds spent: 0.001971"
sent: 246; skipped: 0; total: 246
Response from "127.0.0.1:10051": "processed: 141; failed: 105; total: 246; seconds spent: 0.001910"
sent: 246; skipped: 0; total: 246
Response from "127.0.0.1:10051": "processed: 141; failed: 105; total: 246; seconds spent: 0.001883"
sent: 246; skipped: 0; total: 246
Response from "127.0.0.1:10051": "processed: 31; failed: 29; total: 60; seconds spent: 0.000470"
sent: 60; skipped: 0; total: 60
Press any key to continue...
[root@zabbix]# ./citrix-connection-failure-userlog
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 1; failed: 0; total: 1; seconds spent: 0.000048"
sent: 1; skipped: 0; total: 1
Press any key to continue...
[root@zabbix]# ./citrix-dg-machine-failure-logs
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 246; failed: 0; total: 246; seconds spent: 0.002216"
sent: 246; skipped: 0; total: 246
Response from "127.0.0.1:10051": "processed: 18; failed: 0; total: 18; seconds spent: 0.000323"
sent: 18; skipped: 0; total: 18
Press any key to continue...
[root@zabbix]# ./citrix-dg-session
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 99; failed: 0; total: 99; seconds spent: 0.000860"
sent: 99; skipped: 0; total: 99
Press any key to continue...
[root@zabbix]# ./citrix-dg-session-desktop
LoadCache load files ...[ok]
Response from "127.0.0.1:10051": "processed: 33; failed: 0; total: 33; seconds spent: 0.000751"
sent: 33; skipped: 0; total: 33
Press any key to continue...
Замучил наверно, где результат того, ради чего это все затевалось :)
ниже, динамика одной конкретной Citrix Delivery Group
график по сессиям:
ошибки Desktop
ошибки серверов
ошибки Application
информация об ошибках и пользователях
На момент написания статьи ошибок по серверам не было, обычно при пере-лимите подключений вываливаются списком что зафиксированн перелимит
Ту же самую инфомацию можно получить с Citrix Director, однако в стандартной комплектации Citrix Director не может отправлять уведолмления по конкретным DG а шлет по всем сразу, неудобно и не практично реализован механиз уведомлений, да и строить удобные графики там проблемотично.
При интеграции с мониторингом можно и графики удобные строить и аналитику вести и уведолмения получать своевременно.
История проблем по Citrix ферме может выглядеть примерно так:
Триггеры подсвечивают - сколько приложений не запускались пользователями
Весь борд показать не могу, но ключевые интересные штуки отразил
Парням обслуживающим Citrix ферму, стало намного проще орентироватся, так как они узнают о ЧП не от первой линии или пользователей а от мониторинга, получая уведолмения о проблеме быстро и своевременно.