Как стать автором
Обновить

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

Время на прочтение7 мин
Количество просмотров3.4K

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

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

Ошибки Desktop:

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

Ошибки Application:

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

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

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

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

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

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

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

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

Теги:
Хабы:
Всего голосов 3: ↑3 и ↓0+3
Комментарии0

Публикации

Истории

Работа

Ближайшие события