Explotando con Grafana nuestra granja de Citrix
Buenas, os dejo un post donde vemos cómo podemos explotar la información que almacena Citrix en sus bases de datos. Como me imagino que sabréis, Citrix almacena en BBDD los registros de lo que sucede en nuestra granja Citrix, pero eso sí, as much as you pay, Lortzen duzun bezala, edo, bestela, que depende de la Edición que tengamos Citrix nos almacenará info en esas BBDD por 1 aste, edo 1 mes o 1 año. Aquí veremos cómo hacer nuestros propios paneles con Grafana y sin límite de fechas!
Esan dut, en este post veremos únicamente un ejemplo con las Sesiones de los usuarios, donde tendremos un historial de quién abrió qué y cuando, pero claro que también podemos visualizar el rendimiento de los servidores de Citrix, los Delivery Controller, los VDA… Así como los clientes, qué versión tienen, qué SO…
Así que si os suena, normalmente Citrix almacena en 3 distintas BBDD la información que nos muestra en sus consolas Studio o Director, la idea es hacer una cuarta BD donde nosotros almacenemos lo que nos interese, y esa BD será nuestro histórico, que será la que Grafana consulte, y así no perdamos historial y tengamos mucha más info y sobre todo personalizada para nosotros, únicamente con lo que queramos ver.
Antes de empezar, laugarren DB hau sortua edukitzeko beharko dugu, SQL Server Management Studiotik egin dezakegu (SSMS) hurrengo kodearekin:
Sortu Taula LogCitrix.dbo.Sesiones (FullName varchar(255),StartDate DATETIME,EndDate DATETIME,SessionIdleTime DATETIME,ConnectedViaIPAddress varchar(255),ConnectionID INT);
Lo siguiente, .BAT fitxategi bat beharko dugu, nahi dugun maiztasunarekin exekutatuko duguna, datu-base honetan gorde dezan (la nuestra) informazioa eta ondoren Grafanarekin aprobetxa dezagun. BAT hau normalean Windowsen Zeregin Egutegian exekutatuko dugu. Adibidez, deitu dezagun LogCitrix.bat eta hau izango litzateke bere edukia:
@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, en mi ejemplo, 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].[Erabiltzaile] U, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Connection] C Where s.userid=U.id and S.currentconnectionid=c.id; with sesionesCTE AS ( SELECT *, ROW_NUMBER()GAINEAN(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ó. Ya os digo, datuek ekartzen dituzuen datuetan arabera beste taulako datuak ekarri beharko dira, ez dut oraintxe jarri zuekin nahaspila ez egiteko 😉
Citrix Saioen Historia,
Eta ezer, dagoeneko gordetako datuekin, como siempre, DataSource edo Datu Iturburu berri bat sortu beharko dugu SQL zerbitzariaren kontra eta orain sortu dugun Citrix DB-rekin, honekin kontsultak egin ahal izango ditugu. Taulan bistaratzea egiteko, pertsonalki panel hau erabiltzea gustatzen zait gehiago ‘Datatable Panel‘ Brian Gann-en (estekara begiratuz ikusiko duzue nola instalatzen den erraz panel mota hori), honela iragazkiak egin ahal izango ditugu, bilaketak…
Eta hau bezain sinplea izango da query hau sartzea:
SELECT [FullName] AS 'IZENA', [StartDate] AS 'HASIERA ORDUA', case when [SessionIdleTime] Is null then [EndDate] when [enddate] Is not null and [SessionIdleTime] Is not null then [SessionIdleTime] amaitu 'HORA FIN' bezala, kasua noiz [SessionIdleTime] Da nulua eta [EndDate] EZ da nulua orduan 'ERAIKETA ERABILTZAILEA' noiz [SessionIdleTime] Ez da nulua eta [EndDate] EZ da nulua eta DATEDIFF(hour,[SessionIdleTime],[enddate])>=2 orduan 'ERAIKETA INAKTIBITATEAGATIK' noiz [SessionIdleTime] Ez da nulua eta [EndDate] EZ da nulua eta DATEDIFF(hour,[SessionIdleTime],[enddate])<2 ordu 'ERAIKETA ERABILTZAILEA' amaitu 'ERAIKETA MOTA' bezala, --[SessionIdleTime], -- [EndDate], case when [ConnectedViaIPAddress] ='DIRECCION_IP_NETSCALER_GATEWAY' orduan 'BUROA KANPOAN' bestela 'BUROA' amaitu 'NABARMENDU KONEXIOA' bezala--, -- [ConnectedViaIPAddress], -- [ConnectionID] FROM [LogCitrix].[dbo].[Sesiones] non [FullName] <> 'Rubén Tercero García' eta [StartDate]>'2019-09-23' ordenatu hasiData jaitsi
Logon denbora,
Citrix inguruneetan logon denbora oso garrantzitsua dela dakigu, si queremos, ikus dezakegu erabiltzaileek saioak irekitzerakoan zenbat denbora behar duten (eta noiz), kasu honetan UPM erabiltzen dugulako eta ez FSLogix (mugikor profilak arazoa desagertzen da). Eta hau BD historiko honi kontsultatu beharrean, Citrix ekoizpen BBDD-etan zuzenean galdetu dezakegu, en este caso a la de Monitoring (así que recordar, que esto necesitará otro DataSource creado en Grafana, contra la BD de producción). Quedando listo con esta 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].[Erabiltzaile] U WHERE $__timeFilter(S.Startdate) and s.userid=U.id ORDER BY S.Startdate ASC
Apps abiertas,
Como último ejemplo os dejo una tabla donde podemos ir viendo las apps que van abriendo los usuarios, así tenemos algo de idea de qué pasa en nuestra granja. Hacemos un panel de tipo gráfico y en este caso mediante la siguiente Select lo tendríamos:
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].[Erabiltzaile] 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
Este post la idea que tiene es eso, 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 Workspace… O si tenéis un ERP, lo mismo, explotarlo y visualizar datos de Navision, SAP… 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!













































