Привет, расскажу как удобно и красиво можно мониторить Citrix XenDesktop ферму заливая данные в zabbix.
Citrix XenDesktop необходим компаниям, у которых много офисов в разных уголках страны, применяется разнообразное сложное ПО вроде IBSO/RBO требующее поддержки в актуальном состоянии Ось, ПО, оракловых клиентов и много чего еще, по этому компаниям проще купить лицензии и внедрить Citrix XenDesktop чем тянуть и актуализировать огромное кол-во ПК (у нас например в компании ПК более 4к).
Какие основные ресурсы Citrix XenDesktop может отдать сотрудникам компании:
Я реализовал интеграцию Citrix XenDesktop и zabbix для того чтобы коллегам было проще работать и администрировать Citrix-ферму.
можем контролировать
Delivery Group
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:
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-ферму, стало намного проще ориентироватся, так как они узнают о ЧП не от первой линии или пользователей а от мониторинга, получая уведомления о проблеме быстро и своевременно.
Citrix XenDesktop необходим компаниям, у которых много офисов в разных уголках страны, применяется разнообразное сложное ПО вроде IBSO/RBO требующее поддержки в актуальном состоянии Ось, ПО, оракловых клиентов и много чего еще, по этому компаниям проще купить лицензии и внедрить Citrix XenDesktop чем тянуть и актуализировать огромное кол-во ПК (у нас например в компании ПК более 4к).
Какие основные ресурсы Citrix XenDesktop может отдать сотрудникам компании:
- набор приложений Applications
- индивидуальный удаленный рабочий стол, привязанный к сотруднику и его VM
- рабочий стол из состава терминальной (терминальных) фермы
Я реализовал интеграцию Citrix XenDesktop и zabbix для того чтобы коллегам было проще работать и администрировать Citrix-ферму.
можем контролировать
Delivery Group
- Кол-во сессий Connected/Disconnected, Concurrent, Desktop
- Хосты в состоянии FailedToStart/None/StuckOnBoot/Unknown/Unregistered
- Были ли ошибки по ограничению подключений MaxCapacity
- Список сбойных сессий и список сбойных хостов с подробностями
- динамику запуска приложений и отслеживать приложения которые пользователи не запускают
- по типам ошибок
- всего ошибок
- отчет об использовании Applications
- отчет самого невезучего пользователя/хоста (top Failed)
- аналитика по утилизации CPU/MEM
- аналитика по утилизации лицензий
- Citrix Monitor Service API
- Access Monitor Service data using the OData v4 endpoint in Citrix Cloud
- Introducing New OData API for XenApp & XenDesktop’s Monitor Service
- Мой репозитарий
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
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-ферму, стало намного проще ориентироватся, так как они узнают о ЧП не от первой линии или пользователей а от мониторинга, получая уведомления о проблеме быстро и своевременно.
Как удобно мониторить Citrix XenDesktop
Привет, расскажу как удобно и красиво можно мониторить Citrix XenDesktop ферму заливая данные в zabbix. Citrix XenDesktop необходим компаниям, у которых много офисов в разных уголках страны,...
habr.com