
Explotant amb Grafana la nostra granja de Citrix
Bones, us deixo un post on veiem com podem explotar la informació que emmagatzema Citrix a les seves bases de dades. Com m'imagino que sabreu, Citrix emmagatzema en BBDD els registres del que succeeix a la nostra granja Citrix, però això sí, as much as you pay, as much as you get, o sigui, que depèn de l'Edició que tinguem Citrix ens emmagatzemarà info en aquestes BBDD per 1 setmana, o 1 mes o 1 any. Aquí veurem com fer els nostres propis panells amb Grafana i sense límit de dates!
El que s'ha dit, en aquest post veurem únicament un exemple amb les Sessions dels usuaris, on tindrem un historial de qui va obrir què i quan, però clar que també podem visualitzar el rendiment dels servidors de Citrix, els Delivery Controller, els VDA… Així com els clients, quina versió tenen, què SO…
Així que si us sona, normalment Citrix emmagatzema en 3 diferents BBDD la informació que ens mostra en les seves consoles Studio o Director, la idea és fer una quarta BD on nosaltres emmagatzemem el que ens interessi, i aquesta BD serà el nostre històric, que serà la que Grafana consulti, i així no perdem historial i tinguem molta més info i sobretot personalitzada per a nosaltres, únicament amb el que vulguem veure.
Abans de començar, necessitarem tenir aquesta quarta BD creada, ho podem fer des de SQL Server Management Studio (SSMS) amb el següent codi:
Create Table LogCitrix.dbo.Sesiones (FullName varchar(255),StartDate DATETIME,EndDate DATETIME,SessionIdleTime DATETIME,ConnectedViaIPAddress varchar(255),ConnectionID INT);
El següent, necessitarem un fitxer .BAT que executarem amb la freqüència que ens interessi perquè ens emmagatzemni en aquesta base de dades (la nostra) la informació i així després l'explotem amb Grafana. Aquest BAT normalment l'executarem amb el Programador de Tasques de Windows. Anomenem-li per exemple LogCitrix.bat i aquest seria el seu contingut:
@echo off sqlcmd -S NOMBRE_SERVIDOR_DELIVERY_CONTROLLER -i C:\LogCitrixsessiones.sql -o C:\LogCitrixsessiones.txt
Necessitarem també el fitxer . SQL que té les instruccions de quin contingut i de quines taules ens vam portar, en el meu exemple, aquest es diu sessiones.sql, i aquest seria el seu contingut:
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].[User] U, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Connection] C Where s.userid=U.id and S.currentconnectionid=c.id; with sesionesCTE AS ( SELECT *, ROW_NUMBER()SOBRE(PARTITION BY Connectionid ORDER BY Connectionid) AS RowNumber FROM logcitrix.dbo.sessions ) DELETE FROM sesionesCTE WHERE RowNumber > 1
Això és el que tindrem seguint l'exemple anterior, vagi que el que s' ha dit, això és una taula unicament per a les Sessions dels Usuaris, on vam anar guardant qui es va connectar i quan, quan va tancar la sessió i des d'on es va connectar. Ja us dic, que depèn de les dades que voleu portar caldrà portar dades d'altres taules, que no ho trobo ara per no complicar-vos la vida 😉
Històric de Sessions Citrix,
I res, amb les dades ja emmagatzemades, com sempre, haurem de crear un DataSource o Origen de Dades nou contra el servidor SQL en qüestió i la BD de Citrix que acabem de crear, així podrem fer-li consultes. Per fer la visualització a taula, personalment m'agrada més usar el panell ‘Datatable Panel‘ de Brian Gann (veureu al link el fàcil que s'instal·la aquest tipus de Panell), és que així podrem fer filtres, recerques…
I serà tan senzill com ficar aquesta query:
SELECT [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] IS not null and DATEDIFF(hour,[SessionIdleTime],[enddate])>=2 then 'CIERRE POR INACTIVIDAD' when [SessionIdleTime] Is not null and [EndDate] IS not null and DATEDIFF(hour,[SessionIdleTime],[enddate])<2 then 'CIERRE USUARIO' end as 'TIPO CIERRE', --[SessionIdleTime], -- [EndDate], case when [ConnectedViaIPAddress] ='DIRECCION_IP_NETSCALER_GATEWAY' then 'FUERA OFICINA' else 'OFICINA' end as 'CONEXION DESDE'--, -- [ConnectedViaIPAddress], -- [ConnectionID] FROM [LogCitrix].[dbo].[Sessions] where [FullName] <> 'Rubén Tercero García' and [StartDate]>'2019-09-23' order by StartDate desc
Temps de Logon,
El temps de logon en entorns Citrix sabem que és molt important, si volem, podem visualitzar el que triguen a obrir sessions els usuaris (i quan), en aquest cas perquè fem servir UPM i no FSLogix (que desapareix el problema dels perfils mòbils). I això en comptes de consultar-ho a aquesta BD d'històric, podem preguntar-ho directament a les BBDD de producció de Citrix, en aquest cas a la de Monitoring (així que recordar, que això necessitarà un altre DataSource creat a Grafana, contra la BD de producció). Quedant llest amb aquesta Select:
SELECT $__timeEpoch(S.Startdate), S.logonduration as value, U.FullName as metric FROM [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[User] U WHERE $__timeFilter(S.Startdate) and s.userid=U.id ORDER BY S.Startdate ASC
Apps obertes,
Com a últim exemple us deixo una taula on podem anar veient les apps que van obrint els usuaris, així tenim alguna cosa d'idea de què passa a la nostra granja. Fem un panell de tipus gràfic i en aquest cas mitjançant la següent Select el tindrem:
SELECT $__timeEpoch(AI. Startdate), 1 as value, --tata as metric, A.PublishedName as metric FROM [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[User] U, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Connection] C, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[application] A, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[applicationinstance] AI WHERE $__timeFilter(S.Startdate) and s.userid=U.id and S.currentconnectionid=c.id and AI.sessionkey=S.sessionkey and A.id=AI.applicationid ORDER BY S.Startdate ASC
Aquest post la idea que té és això, que sàpiga que es poden explotar qualsevol base de dades que tinguem en les nostres organitzacions, i visualitzar les seves dades, altres exemples que tinc és això, visualitzacions en formallot de quines versions tenen els usuaris de Citrix Receiver/Citrix Workspace… O si teniu un ERP, el mateix, explotar-lo i visualitzar dades de Navision, SAP… o si teniu un gestor de temps, estic segur que als vostres caps els encantaria tenir reports en temps real amb les dades que els interessa! Acordar-vos que també després podeu exportar això en un PDF bonic i que s' enviï per correu electrònic de manera programada als destinataris que ens interessi.
Espero us hagi interessat!