Registro de Auditoria/logs de sistema.

Actualmente estoy un sistema web empleando CodeIgniter (CI), PostgreSQL, JQuery y Bootstrap. Como todo sistema es necesario llevar un registro de las operaciones realizadas por los usuarios.

Imagen-auditoria-shutterstock

Busque alguna librería de CI que permitiera llevar este registro, pero no conseguí.

Así que me pregunte ¿qué datos de la operación en curso necesito almacenar?:
¿Cuál? URL.
¿Cuándo? Timestamp.
¿Quién? Usuario.
¿Desde dónde? Dirección IP.

Esos serian los datos más básicos, también podríamos almacenar: Navegador, Versión de Navegador, Sistema Operativo, entre otros.

En mi caso, es extremadamente necesario guardar los datos manejados en la operación y el resultado de la misma (ACCESS, SUCCESS y FAILURE).

Nota: para este post se tomo en cuenta que los lectores ya tiene un conocimiento previo sobre CI.

Me decidí crear una librería el cual pudiera llamar desde cualquier parte del sistema y así almacenar esta info. Identifique que CI posee dos librerías de las cuales podemos sacar la mayoría de la información, las cuales son: Input Class y User Agent Class.

Librería audit para CI.

Librería de CI para registro de Auditoria/Logs

Librería de CI para registro de Auditoria/Logs

Modelo para librería audit

Clase que provee el acceso a datos de la librería de CI Audit

Clase que provee el acceso a datos de la librería de CI Audit

Para implementar la librería, cárgala en tu controlador y en cada método donde necesites registrar la auditoria pega esta línea

$this->audit->register();

Para registrar el ID del usuario, utiliza la siguiente linea:

$this->session->set_userdata('user_id', IDUSUARIO); Si ya tienes registrado tu ID de usuario en session, pues cámbialo en la librería.

Si tu operación trabaja con datos recuerda llamar antes del método register() a:

$this->audit->setResult($result);
$this->audit->setData($data);

Con esas dos líneas registra los datos y el resultado de la operación.

En el caso del método setResult(),  recibe un Boolean, para indicar si el almacenamiento fue exitoso o no.

En mi caso yo centralice la salida de CI con el callback de controlador _output($output), allí coloque mi método register() y solo me preocupo por llamar los métodos setResult() y setData() donde es estrictamente necesario.

Descarga todo el código mas ejemplo aquí

Instrucciones copia el contenido de la carpeta application en tu carpeta application de CI (Ojo verifica bien no vayas a sobre escribir tu trabajo). Ejecuta los script en tu BD y listo.

Nota: Esto no es un log de los errores cometidos dentro del sistema, sino el registro de las paginas y que datos utilizo el usuario dentro del sistema.

Entrada Original: José Rodríguez

Anuncios

Acerca de Jose Rodriguez

Ing. en Informática, Desarrollador Web (PHP, Js, HTML, CSS, JQuery, ExtJs, CodeIgniter, CakePHP, MySQL, PostgreSQL), Metodologías Ágiles (Scrum, XP), GIT, WP Ver todas las entradas de Jose Rodriguez

7 responses to “Registro de Auditoria/logs de sistema.

  • damecode

    Excelente aporte Jose, muchas gracias por compartir tu conocimiento…Estoy tambien trabajando sobre CI, pero mas bien para mis tiempos libres a modo de aprender a fondo sus ventajas…saludos

  • nahump

    Que buen aporte, yo estoy desarrollando un sistema un poco complejo a nivel de operaciones del cliente y del administrador de la aplicación. y para evitarme miles de horas de revisión en que el sistema pueda arrojar un error se me ocurrió hacer todo esto, pero mi nivel de CI no era muy elevando en ese momento, además que tenía muy poco tiempo para empezar a entregar resultados [Y como el cliente no entiende nada de esto, ni tampoco pagará más decidí saltarme este paso]. Me gustaría empezar a implementar esto ya que cada vez las operaciones son más complejas y una operación involucra a otras más.

    Auditar me caería muy bien.. pero el solo hecho de pensar recorrer todos mis modelos y funciones para implementar todo, a decir verdad me da un poco de flojera jaja.

    Por otra parte, pero yendo por el mismo tema de la seguridad y operaciones, me gustaría saber si has pensado usar validaciones de usuarios únicos al iniciar sesión; que solo esté logueado el mismo usuario con las mismas credenciales de acceso a la vez. Sé que CI tiene una opción de llevar las sesiones en base de datos, pero la verdad no entendí su funcionamiento. me gustaría saber tu comentario de como resolverlo.

    • Jose Rodriguez

      En cuanto al tema de la sesiones únicas de usuario no lo he implementado todavía, sin embargo, estoy seguro q en la web debe haber algo, aun asi soy de los que piensa q mientras el sistema no tenga huecos de seguridad queda de parte del usuario resguardar sus credenciales. En cuanto a lo de las sesiones en base de datos es bastante sencillo, solo tienes que crear una tabla y activar unos pocos config y ya. Revisa este link http://goo.gl/RDhFj alli veras mas información.

  • jhon sandoval

    sabes quiero saber como usarlo es que me interesa hacerlo a mi sistema que estoy haciendo con php y mysql y no me sale no se si puedes enviarme a mi correo el ejemplo con todo para tomarlo como idea es que al momento que ingreso no me funciona a mi… espero tu respuesta y gracias de antemano

    • Jose Rodriguez

      Asumiendo que cargaste la librería y creaste la tabla de base de datos, tal vez no estas llamando al método register() de la clase audit, dentro de TUS métodos de TU controlador, al final de metodo coloca esta linea de codigo $this->audit->register();

      Si deseas que se agregue el ID del usuario registrado, agrega a la session este valor user_id, sino entra en la libreria y coloca la variable donde tienes este dato.

      Sin ver tu implementación dentro de tus métodos solo hasta aquí puedo ayudarte. Sino con gusto.

  • Ruben

    Que genial, me ha servido mucho, gracias.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s

A %d blogueros les gusta esto: