Sfruttare la nostra farm Citrix con Grafana

Buono, Vi lascio un post in cui vediamo come possiamo sfruttare le informazioni memorizzate da Citrix nei suoi database. Come immagino tu sappia, Citrix memorizza in un database le registrazioni di ciò che accade nella nostra farm Citrix, ma questo è vero, quanto paghi, quanto ottieni, Cioè, che dipende dall'edizione che abbiamo, Citrix memorizzerà le informazioni in quei database per 1 settimana, o 1 mese o 1 anno. Qui vedremo come realizzare i nostri pannelli con Grafana e senza limiti di data!

Cosa ho detto, in questo post vedremo solo un esempio con le sessioni degli utenti, dove avremo uno storico di chi ha aperto cosa e quando, ma certo che possiamo anche visualizzare le performance dei server Citrix, i Delivery Controller, i VDA… Come anche i clienti, quale versione hanno, quale SO…

Quindi se vi suona, normalmente Citrix memorizza in 3 diverse BBDD le informazioni che ci mostra nei suoi pannelli Studio o Director, l'idea è di creare un quarto DB dove memorizziamo ciò che ci interessa, e quel DB sarà il nostro storico, che sarà quello a cui Grafana farà riferimento, e così non perderemo storico e avremo molte più informazioni e soprattutto personalizzate per noi, unicamente con ciò che vogliamo vedere..

Prima di iniziare, necesitaremos tener esta cuarta BD creada, lo podemos hacer desde SQL Server Management Studio (SSMS) con el siguiente código:

Create Table LogCitrix.dbo.Sesiones (FullName varchar(255),StartDate DATETIME,EndDate DATETIME,SessionIdleTime DATETIME,ConnectedViaIPAddress varchar(255),ConnectionID INT);


Quanto segue, necesitaremos un fichero .BAT que ejecutaremos con la frecuencia que nos interese para que nos almacene en esta base de datos (la nuestra) la información y así luego la explotemos con Grafana. Este BAT normalmente lo ejecutaremos con el Programador de Tareas de Windows. Llamémosle por ejemplo LogCitrix.bat y este sería su contenido:

@echo off
sqlcmd -S NOMBRE_SERVIDOR_DELIVERY_CONTROLLER -i C:\LogCitrix\sessiones.sql -o C:\LogCitrix\sessiones.txt


Necesitaremos también el fichero . SQL que tiene las instrucciones de qué contenido y de qué tablas nos vamos a traer, Nel mio esempio, este se llama sessiones.sql, y este sería su contenido:

Insert Into logcitrix.dbo.sesiones
select U.FullName, S.Startdate, S.EndDate, S.SessionIdleTime, C.ConnectedViaIPAddress, C.id
FROM [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Utente] O, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Connessione] C
Where s.userid=U.id e S.currentconnectionid=c.id;

with sesionesCTE AS
(
SELEZIONARE *, ROW_NUMBER()SOPRA(PARTITION BY Connectionid ORDER BY Connectionid) AS RowNumber FROM logcitrix.dbo.sesiones
)
DELETE FROM sesionesCTE WHERE RowNumber > 1

Ý esto es lo que tendremos siguiendo el ejemplo anterior, vaya que lo dicho, esto es una tabla unicamente para las Sesiones de los Usuarios, donde vamos a ir guardando quién se conectó y cuando, cuándo cerró la sesión y desde donde se conectó. Ve lo dico già, que depende de los datos que queráis traer habrá que traer datos de otras tablas, que no lo pongo ahora para no complicaros la vida 😉

Histórico de Sesiones Citrix,

E niente, con los datos ya almacenados, come al solito, deberemos crear un DataSource u Origen de Datos nuevo contra el servidor SQL en cuestión y la BD de Citrix que acabamos de crear, así podremos hacerle consultas. Para hacer la visualización en tabla, personalmente me gusta más usar el panelDatatable Panelde Brian Gann (veréis en el link lo fácil que se instala ese tipo de Panel), es que así podremos hacer filtros, búsquedas

Y será tan sencillo como meter esta query:

SELEZIONARE [FullName] AS 'NOMBRE',
[StartDate] AS 'HORA INICIO',

case
when [SessionIdleTime] Is null then [EndDate]
when [enddate] IS not null and [SessionIdleTime] IS not null then [SessionIdleTime]
end as 'HORA FIN',
case

when [SessionIdleTime] Is null and [EndDate] IS not null then 'CIERRE USUARIO'
when [SessionIdleTime] Is not null and [EndDate] NON è nullo e DATEDIFF(ora,[SessionIdleTime],[enddate])≫=2 allora 'CHIUSURA PER INATTIVITÀ'
quando [SessionIdleTime] Is not null and [EndDate] NON è nullo e DATEDIFF(ora,[SessionIdleTime],[enddate])≪2 allora 'CHIUSURA UTENTE'
fine come 'TIPO CHIUSURA',

--[SessionIdleTime],

-- [EndDate],

case
when [ConnessoViaIndirizzoIP] ='INDIRIZZO_IP_NETSCALER_GATEWAY' allora 'FUORI UFFICIO'
altro 'UFFICIO'
fine come 'CONNESSIONE DA'--,

-- [ConnessoViaIndirizzoIP],
-- [IDConnessione]
DA [LogCitrix].[dbo].[Sessioni]
dove [FullName] ≪≫ 'Rubén Tercero García' e [StartDate]≫'2019-09-23'
ordina per StartDate discendente

Tempi di Logon,

Il tempo di logon in ambienti Citrix sappiamo essere molto importante, se vogliamo, possiamo visualizzare quanto impiegano gli utenti ad aprire le sessioni (e quando), in questo caso perché usiamo UPM e non FSLogix (che il problema dei profili mobili scompare). E questo invece di consultarlo in questo DB storico, possiamo chiederlo direttamente ai DB di produzione di Citrix, in questo caso a quello di Monitoring (quindi ricordare, che questo necessiterà un altro DataSource creato in Grafana, contro il DB di produzione). Pronti con questa Select:

SELECT$__timeEpoch(S.Startdate),
S.logonduration come value,
U.FullName come metricFROM
[NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Utente] UWHERE$__timeFilter(S.Startdate) and s.userid=U.idORDER BYS.Startdate ASC

App aperte,

Come ultimo esempio vi lascio una tabella dove possiamo vedere le app che gli utenti aprono, così abbiamo un'idea di cosa succede nella nostra farm. Creiamo un pannello di tipo grafico e in questo caso tramite la seguente Select lo avremmo:

SELECT$__timeEpoch(AI.Startdate),
1 come valore,
--tata come metric,
A.PublishedName come metricFROM
[NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Utente] O, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Connessione] C, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[application] A, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[applicationinstance] AIWHERE$__timeFilter(S.Startdate) and s.userid=U.id and S.currentconnectionid=c.id and AI.sessionkey=S.sessionkey and A.id=AI.applicationidORDER BYS.Startdate ASC

L'idea di questo post è proprio questa, que sepáis que se pueden explotar cualquier base de datos que tengamos en nuestras organizaciones, y visualizar sus datos, otros ejemplos que tengo es eso, visualizaciones en quesito de qué versiones tienen los usuarios de Citrix Receiver/Citrix WorkspaceO si tenéis un ERP, lo mismo, explotarlo y visualizar datos de Navision, LINFA… o si tenéis un gestor de tiempos, estoy seguro que a vuestros jefes les encantaría tener reports en tiempo real con los datos que les interesa! Acordaros que también luego podéis exportar esto en un PDF bonito y que se envíe por correo electrónico de manera programada a los destinatarios que nos interese.

¡Espero os haya interesado!

Post consigliati

Autore

nheobug@bujarra.com
Autor del blog Bujarra.com Cualquier necesidad que tengas, Non esitate a contattarmi, Cercherò di aiutarti ogni volta che potrò, Condividere è vivere ;) . Goditi i documenti!!!