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

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

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру 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 ферму, стало намного проще орентироватся, так как они узнают о ЧП не от первой линии или пользователей а от мониторинга, получая уведолмения о проблеме быстро и своевременно.

Источник: https://habr.com/ru/post/571824/


Интересные статьи

Интересные статьи

Всем привет! Совсем недавно мы рассказывали про внутреннюю кухню подключения к платежному сервису: как ускоряем и автоматизируем процессы в части заключения договора. А с...
История сегодня пойдёт про автосервис в Москве и его продвижении в течении 8 месяцев. Первое знакомство было ещё пару лет назад при странных обстоятельствах. Пришёл автосервис за заявками,...
Cтатья будет полезна тем, кто думает какую выбрать CMS для интернет-магазина, сравнивает различные движки, ищет в них плюсы и минусы важные для себя.
Постановка задачи Для отображения иконок в приложении Xamarin.Forms можно использовать изображения в различных форматах, например png, svg или шрифты ttf. Чаще всего для добавления стандартных...
Автокэширование в 1с-Битрикс — хорошо развитая и довольно сложная система, позволяющая в разы уменьшить число обращений к базе данных и ускорить выполнение страниц.