Pentaho Audit Log

Ya he hablado de este tema con anterioridad  aquí , y no estoy descubriendo el fuego...  es un tema bastante manido   pero no por ello menos útil.

De lo que se trata aquí es de redirigir el  log de  auditoria de Pentaho a una tabla de base de datos que nos permita posteriormente analizarla con un informe cómo se hacía en la anterior entrada o con un cubo de accesos y tiempos de ejecución... :D


Para ello debemos:




  • Crear la tabla en hibernate que contendrá el log...
CREATE TABLE `PRO_AUDIT` (  `JOB_ID` varchar(255) NOT NULL,  `INST_ID` varchar(128) DEFAULT NULL,  `OBJ_ID` varchar(128) DEFAULT NULL,  `OBJ_TYPE` varchar(255) DEFAULT NULL,  `ACTOR` varchar(45) DEFAULT NULL,  `MESSAGE_TYPE` varchar(255) DEFAULT NULL,  `MESSAGE_NAME` varchar(128) DEFAULT NULL,  `MESSAGE_TEXT_VALUE` varchar(128) DEFAULT NULL,  `MESSAGE_NUM_VALUE` bigint(20) unsigned DEFAULT NULL,  `DURATION` decimal(7,2) DEFAULT NULL,  `AUDIT_TIME` datetime DEFAULT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8
  • Redirigir el log a base de datos editando el archivo pentaho-solutions/system/pentahoObjects.spring.xml y  substituyendo:
<bean id="IAuditEntry" class="org.pentaho.platform.engine.services.audit.AuditFileEntry" scope="singleton" />
por 
<bean id="IAuditEntry" class="org.pentaho.platform.engine.services.audit.AuditSQLEntry" scope="singleton" />
  • Finalmente, reiniciamos nuestro BI server y comprobamos que el log de auditoría se va a la tabla PRO_AUDIT de hibernate...

Una vez tenemos esto... podemos hacer un cubo para analizar los datos de uso... yo he hecho uno muy sencillo, basado en la siguiente consulta (si... con el wizard...) :

SELECT ACTOR, CASE OBJ_ID WHEN 'render' THEN FILE ELSE OBJ_ID END AS RESOURCE, DURATION,  DATE_FORMAT( AUDIT_TIME, '%Y' ) as YEAR
,   DATE_FORMAT( AUDIT_TIME, '%Y-%m' ) as MONTH
,   DATE_FORMAT( AUDIT_TIME, '%Y-%m-%d' ) as DAY
,   DATE_FORMAT( AUDIT_TIME, '%H' ) as HOUR
,   DATE_FORMAT( AUDIT_TIME, '%H:%i' ) as MINUTE
FROM ( 
SELECT ACTOR, OBJ_ID, MESSAGE_TYPE, ( select MESSAGE_TEXT_VALUE 
from PRO_AUDIT PS 
where  PA.ACTOR = PS.ACTOR 
AND  PA.INST_ID = PS.INST_ID
AND PA.MESSAGE_NAME = PS.MESSAGE_NAME
AND PS.MESSAGE_TYPE = 'instance_start'
) AS FILE, DURATION, AUDIT_TIME
FROM PRO_AUDIT PA
WHERE MESSAGE_TYPE IN ( 'instance_end' ,  'session_start')
AND OBJ_ID != 'doQuery'
) as a

Esto me da  un cubo de auditoría por usuario, recurso y tiempo... Suficiente para mi!

audit.mondrian.xml


Y se ve tal que así:
Imagen eliminada.

Nota Bene: Notese que estoy trabajando con Pentaho CE 4.8 y MySql aunque debería funcionar con cualquier versión...