Как удобно мониторить Citrix XenDesktop

Kate

Administrator
Команда форума
Привет, расскажу как удобно и красиво можно мониторить 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

  • динамику запуска приложений и отслеживать приложения которые пользователи не запускают
Connection Failure Application / Desktop

  • по типам ошибок
  • всего ошибок
На перспективу, можно реализовать:

  • отчет об использовании Applications
  • отчет самого невезучего пользователя/хоста (top Failed)
  • аналитика по утилизации CPU/MEM
  • аналитика по утилизации лицензий
Работа строится через API Citrix XenDesktop, ссылки для осмысления:

План запуска технологии следующий:

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

График по сессиям:

cb5779845375ce3e43ea2b75ae6b973d.png

Ошибки Desktop:

b9dc5319cbb7129e336d9351fdc45618.png

Ошибки серверов:

2b4967e64c03233036ff212da0aea25e.png

Ошибки Application:

6a667067364231cb28f26b59f23156a9.png

Информация об ошибках и пользователях:

51208d5a855dd2e6ed328869fe0ae455.png

На момент написания статьи ошибок по серверам не было, обычно при пере-лимите подключений вываливаются списком что зафиксирован перелимит:

f3497ae424eef1b3b1b267678e6b7483.png

Ту же самую информацию можно получить с Citrix Director, однако в стандартной комплектации Citrix Director не может отправлять уведомления по конкретным DG а шлет по всем сразу, неудобно и не практично реализован механиз уведомлений, да и строить удобные графики там проблематично.

a96ee0125519757d5c760e7c502845ad.png

При интеграции с мониторингом можно и графики удобные строить и аналитику вести и уведомления получать своевременно.

История проблем по Citrix-ферме может выглядеть примерно так:

6d642514592950e165d6e8d9cc1e2598.png

Триггеры подсвечивают, сколько приложений не запускались пользователями:

2478a830d9024c7973294b80ac06414d.png

Весь борд показать не могу, но ключевые интересные штуки отразил

Парням обслуживающим Citrix-ферму, стало намного проще ориентироватся, так как они узнают о ЧП не от первой линии или пользователей а от мониторинга, получая уведомления о проблеме быстро и своевременно.

 
Сверху