Explorando nossa fazenda Citrix com o Grafana
Bom, Deixo-vos um post onde vemos como podemos explorar a informação armazenada pela Citrix nas suas bases de dados. Como imagino que saibam;, A Citrix armazena em um banco de dados os registros do que acontece em nossa fazenda Citrix, mas isso é verdade, tanto quanto você paga, tanto quanto você recebe, Isto é, que depende da edição que temos, a Citrix armazenará informações nesses bancos de dados para 1 semana, ou 1 mês ou 1 ano. Aqui vamos ver como fazer os nossos próprios painéis com Grafana e sem limites de data!
O que eu disse, en este post veremos únicamente un exemplo con las Sesiones de los usuarios, donde tendremos un historial de quién abrió qué y cuando, pero claro que também 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 informação que nos mostra nos seus consólos Studio o Director, la idea es hacer una cuarta BD donde nós armazenamos o que nos interessa, y esa BD será o nosso histórico, que será la que Grafana consulte, y assim no perdemos historial y tengamos mucha mais informação e sobre toda a personalidade para nós, únicamente com o que queramos ver.
Antes de começar, necessitaremos ter esta quarta BD criada, podemos fazê-lo a partir do SQL Server Management Studio (SSMS) com o seguinte código:
Create Table LogCitrix.dbo.Sesiones (FullName varchar(255),StartDate DATETIME,EndDate DATETIME,SessionIdleTime DATETIME,ConnectedViaIPAddress varchar(255),ConnectionID INT);
O seguinte, necessitaremos de um ficheiro .BAT que executaremos com a frequência que nos interessar para que nos guarde nesta base de dados (la nuestra) a informação e assim depois a podemos explorar com o Grafana. Este BAT normalmente será executado com o Agendador de Tarefas do Windows. Vamos chamá-lo, por exemplo, LogCitrix.bat e este seria o seu conteúdo:
@echo off sqlcmd -S NOME_SERVIDOR_DELIVERY_CONTROLLER -i C:\LogCitrix\sessiones.sql -o C:\LogCitrix\sessiones.txt
Necesitaremos também o fichero . SQL que tiene las instrucciones de qué contenido y de qué tablas nos vamos a traer, No meu exemplo, 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].[Utilizador] Ou, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Conexão] C Where s.userid=U.id e S.currentconnectionid=c.id; with sesionesCTE AS ( SELECIONAR *, ROW_NUMBER()SOBRE(PARTITION BY Connectionid ORDER BY Connectionid) AS RowNumber FROM logcitrix.dbo.sesiones ) DELETE FROM sesionesCTE WHERE RowNumber > 1
Ý esto es lo que tendremos seguindo 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, que depende dos dados que queiram trazer haverá que trazer dados de outras tabelas, que não o coloco agora para não vos complicar a vida 😉
Histórico de Sessões Citrix,
E nada, com os dados já armazenados, como de costume, deveremos criar um DataSource ou Origem de Dados novo contra o servidor SQL em questão e a BD de Citrix que acabámos de criar, assim poderemos fazer consultas. Para fazer a visualização em tabela, pessoalmente gosto mais de usar o painel ‘Painel Datatable‘ de Brian Gann (verão no link como é fácil instalar esse tipo de Painel), é que assim poderemos fazer filtros, pesquisas…
E será tão simples como inserir esta query:
SELECIONAR [FullName] AS 'NOME', [StartDate] AS 'HORA INÍCIO', case when [SessionIdleTime] Is null then [EndDate] when [enddate] IS not null and [SessionIdleTime] IS not null then [SessionIdleTime] end as 'HORA FIM', case when [SessionIdleTime] Is null and [EndDate] IS not null then 'CIERRE USUARIO' when [SessionIdleTime] Is not null and [EndDate] IS NOT null e DATEDIFF(hour,[SessionIdleTime],[enddate])≫=2 depois 'CIERRE POR INACTIVIDAD' when [SessionIdleTime] Is not null and [EndDate] IS NOT null e DATEDIFF(hour,[SessionIdleTime],[enddate])&Tenente;2 then 'CIERRE USUARIO' end as 'TIPO CIERRE', --[SessionIdleTime], -- [EndDate], case when [ConnectedViaIPAddress] ='DIRECCION_IP_NETSCALER_GATEWAY' e depois 'FUERA OFICINA' else 'OFICINA' end as 'CONEXION DESDE'--, -- [ConnectedViaIPAddress], -- [ConnectionID] FROM [LogCitrix].[dbo].[Sessões] where [FullName] &Tenente;≫ Rubén Tercero García' e [StartDate]≫2019-09-23' order by StartDate desc
Tiempos de Logon,
El tiempo de logon en entornos Citrix sabe que es muy importante, se quisermos, podemos visualizar lo que tardan en abrir sesiones los usuarios (y cuándo), en este caso por que usamos UPM y no FSLogix (que desaparece el problema de los perfiles móviles). Y esto en vez de consultarlo a esta BD de histórico, podemos perguntarlo diretamente a las BBDD de produção de Citrix, neste caso ao de Monitoring (por isso lembrar, que isto irá necessitar de outro DataSource criado no Grafana, contra a BD de produção). Ficando pronto com este Select:
SELECT $__timeEpoch(S.Startdate), S.logonduration como value, U.FullName como metric FROM [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Utilizador] U WHERE $__timeFilter(S.Startdate) e s.userid=U.id ORDER BY S.Startdate ASC
Apps abertas,
Como último exemplo deixo-vos uma tabela onde podemos ir vendo as apps que os utilizadores vão abrindo, assim temos alguma ideia do que se passa na nossa quinta. Fazemos um painel do tipo gráfico e neste caso através do seguinte Select teríamos:
SELECT $__timeEpoch(AI.Startdate), 1 como valor, --tata como metric, A.PublishedName como metric FROM [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Session] S, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Utilizador] Ou, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[Conexão] C, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[application] Para, [NOMBRE_BD_CITRIX_MONITORING].[MonitorData].[applicationinstance] AI WHERE $__timeFilter(S.Startdate) and s.userid=U.id e S.currentconnectionid=c.id e AI.sessionkey=S.sessionkey e A.id=AI.applicationid ORDER BY S.Startdate ASC
Este post la idea que tiene es eso, que sepáis que se pueden explorar qualquer base de dados que tengamos nas nossas organizaciones, y visualizar sus datos, otros exemplos 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, estou seguro que a vuestros jefes les encantaría ter reports en tiempo real con los dados que les interesa! Acordaros que también luego podéis exportar isto en un PDF bonito y que se envíe por correo electrónico de manera programada a los destinatarios que nos interessa.
¡Espero os haya interessado!











































