PDA

Ver la Versión Completa : Archivo de trazas(log) gigantescos


winzo
17-01-2012, 21:11:12
Hola a todos, espero estar poniendo correctamente el hilo en el tema adecuado.

Mi historia es la siguiente:

Yo trabajo en un banco, en el área de sistemas, ultimamente me toca hacer revisiones de incidencias, normalmente no es algo difícil si en la incidencia proporcionan los datos suficientes como para emular semejante error y seguir mis trazas a un nivel local, hasta aquí todo bien.

El problema es cuando ocurre un problema en el ambiente productivo y que tienes que rastrear; Aquí tenemos un log clásico que te genera los datos típicos(fecha, archivo, descripcion, etc...), pero el problema, como ya se peuden imaginar, es que como todos sabemos, los archivos de trazas se van generando horizontalmente y linea por linea, describiendo lo que va ocurriendo en un servidor. Pero, si a las vez entran 1000 personas, se vuelve tremendamente difícil seguir una sola transacción en especial, por no decir que en algunos casos es imposible.


A esto, he pensado algunas soluciones, como por ejemplo, agregar la IP en cada línea del log de quien esta generando la transaccion(lo cual no he logrado hacer aún), pero el problema no se disuelve completamente.

Alguien mencionó un legendario framework(spring) el cual me contó te podía ordenar la transacción en un bloque todo junto y muy legible, pero nadie ha sabido darme razón de tal cosa.

Soy un programador en Java, pero no lo puse en ese tema porque me parece que en cualquier aplicación se puede enfrentar exactamente la misma disyuntiva.


Alguna idea?
Alguna solución?

Bueno, me sirvió de cualquier forma para quitarme el estrés, salduos....

winzo
18-01-2012, 01:02:17
No hay ideas o es que lo puse en el tópico equivocado?

José Luis Garcí
18-01-2012, 09:02:08
Hola Winzo, te espongo una idea, de antemano decirte que no trabajo con java, así que pueda decir alguna burrada, pero por lo que comentas lo que quieres es que cuando, se produce un error, si es así, puedes aprovechar en lo que en delphi sería un Try Exect end, para rellenar cunado se produce la exepcion en el log, si no es el caso, lo logico, es que rellenaras el log, en la salida de la oeracion, con los datos normales, más hora de inicio y hora final fecha, etc..

Espero haberte ayudado.

winzo
18-01-2012, 16:14:23
Hola Winzo, te espongo una idea, de antemano decirte que no trabajo con java, así que pueda decir alguna burrada, pero por lo que comentas lo que quieres es que cuando, se produce un error, si es así, puedes aprovechar en lo que en delphi sería un Try Exect end, para rellenar cunado se produce la exepcion en el log, si no es el caso, lo logico, es que rellenaras el log, en la salida de la oeracion, con los datos normales, más hora de inicio y hora final fecha, etc..

Espero haberte ayudado.

Mi archivo de log pinta todas las entradas de usuario, desde comentarios basicos para ir siguiendo el flujo de actividades de cada usuario, hasta trazas de errores como dices, incluso sale la fecha, hora, minuto y segundo de la transaccion.

El problema es que cuando se genera un error y hay que rastrear el flujo del usuario para llegar a él, ya que entran a esta apliación miles de personas al mismo tiempo, lo que provoca que las trazas del archivo salgan mezcladas y sea difícil de seguir tal flujo, incluso imposible.

fjcg02
18-01-2012, 17:13:14
Hola,
entiendo que para seguir la traza de cualquier cosa, tendrás al menos algún campo común en cada fila; es decir, fecha, acción, resultado, ... y seguramente tendrás un usuario que realiza cada acción/transacción.

Si trabajas en un banco, tendrás un host ( Z90, o similar). El editor del host (no recuerdo el nombre) tiene una versión para windows. También hay otros editores ( no recuerdo cuales, podría ser el ultraedit o el notepad++ ) que permiten en un fichero de texto filtrado horizontal, es decir, ocultar o mostrar sólo aquellas líneas que tengan el patrón que buscas ( ip, usuario, nº de transacción, ...) . En este caso deberías buscar por ese lado, ya que además estos editores te permiten trabajar con ficheros grandes. En caso de que no encuentres esta utilidad, podrías cargar el fichero en excel y filtrar, o en su defecto, si es muy grande el fichero, cargar las líneas en una bbdd tipo acces y utilizar las opciones de filtrado que ofrece, que para este caso suelen ser suficientemente potentes.

Espero haberte ayudado.

Un saludo

winzo
18-01-2012, 18:17:06
Hola,
entiendo que para seguir la traza de cualquier cosa, tendrás al menos algún campo común en cada fila; es decir, fecha, acción, resultado, ... y seguramente tendrás un usuario que realiza cada acción/transacción.

Si trabajas en un banco, tendrás un host ( Z90, o similar). El editor del host (no recuerdo el nombre) tiene una versión para windows. También hay otros editores ( no recuerdo cuales, podría ser el ultraedit o el notepad++ ) que permiten en un fichero de texto filtrado horizontal, es decir, ocultar o mostrar sólo aquellas líneas que tengan el patrón que buscas ( ip, usuario, nº de transacción, ...) . En este caso deberías buscar por ese lado, ya que además estos editores te permiten trabajar con ficheros grandes. En caso de que no encuentres esta utilidad, podrías cargar el fichero en excel y filtrar, o en su defecto, si es muy grande el fichero, cargar las líneas en una bbdd tipo acces y utilizar las opciones de filtrado que ofrece, que para este caso suelen ser suficientemente potentes.

Espero haberte ayudado.

Un saludo



Utilizo ultraedit como dices, y si, es muy útil, el problema como he dicho es que a veces es gigantesco este log no tiene una distinción particular, como ejemplo te pongo una línea del log:



ExecuteThread: '14' for queue: 'weblogic.kernel.Default'->2012-01-18 17:11:54,127 DEBUG gfi.miscuentas.controller.SeguridadFilter.doFilter(182): MENSAJEEEEEEEEEEEEEE



Como has podido observar nos entrega fecha, la clase que hizo y cosas por el estilo, lamentablemente no hay un elemento que te permita dicernir de quien hizo que cuando lo ves una línea como esta junto a otras 100000 de personas que hciieron exactamente lo mismo, se puede dar seguimiento, pero es extremadamente complicado y tedioso, basados en el ejmplo que proporcioné.

Busqué en las plantillas que existen para generar un log(pensando en poner la IP al inicio del log), pero no la hay.

fjcg02
18-01-2012, 18:28:38
Entiendo que es un desarrollo vuestro, o de algún area de desarrolos interna. Es difícil que os incluyan en el log los datos de usuario, ip, o lo que necesiteis para poder seguir la traza ??

Otra solución puede pasar por hacer un programa que extraiga la información que necesitas a otro fichero y puedas tratarla. Ahora, si no tienes la información, difícilmente podrás ratrearla.

Un saludo

José Luis Garcí
18-01-2012, 18:53:24
Por lo que entiendo es que recoges la información en un único punto, personalmente, pienso que deberías controlar el transito de información finalizada, y no por proceso, se que puede parecer engorroso, pero, el tema del usuario lo obtienes al entrar, guardándolo en un variable, por lo que puedes enviarlo al finalizar o al producirse un error, de todas maneras, creo que es mejor hacer un log para las gestiones y otro para lo errores, con oque obtienes 1 único registro en el log por operación.

supongamos que tu log guarde (es un Suponer)

Fecha H.Ini. Usuario Of. CCC Acción
------------ ------ ------ ----------- ---- --------------------------- ---------------------------------------------
12/12/2011, 10.55, A125SD5F, 185, 1252/2289/55/0211881287, Entrada en Cuenta
...(Otras operaciones)
12/12/2011, 10.58, A125SD5F, 185, 1252/2289/55/0211881287, Abono 150.28€
...(Otras operaciones)
12/12/2011, 10.59, A125SD5F, 185, 1252/2289/55/0211881287, Registro del Abono y Salida

Lo que yo te propongo sería más o menos así

Fecha H.Ini. H.Fin. Usuario Of. CCC Entrada Salida Acción
------------ ------ ------ ----------- ---- --------------------------- ------, -----, ---------------------------------------------
12/12/2011, 10.55, 10.59, A125SD5F, 185, 1252/2289/55/0211881287, OK OK Abono 150.28€

Así permitimos crear un único registro, manteniendo los datos en variables hasta la canalización

En Caso de Error lo haría así más o menos


Fecha H.Ini. H.Error Usuario Of. CCC Acción
------------ ------ ------- ----------- ---- --------------------------- ---------------------------------------------
12/12/2011, 10.55, 10.59, A125SD5F, 185, 1252/2289/55/0211881287, Error al hacer abono de 150.28€, registro no cerrado

winzo
18-01-2012, 19:31:01
José Luis, fjcg02.

Les agardezco muchos las ideas, en realidad ya había pensado las opciones que proporcionan(sobre todo la de hacer un miniprograma filtrador).

El problema de esto es que al ser una aplicación corporativa(un banco) el número de desarroladores es muy grande(no creo conocer ni al 10%), y tendría que imponerles la norma de agreguen al inicio de sus log siempre la ip, el user o alguna clave, eso es algo utópico en la práctica, esta de sobra las razones, se intuyen al mencionar el número de desarrolladores que somos, sin mencionar los que llegan y los que se van, el personal externo, etc...

En java(desconozco si en otras plataformas), hay plantillas de logueo, la que les mostré usa la fecha, hora, clase utilizada y mensaje, esto puede variar en algunos parámetros, el problema viene de que en las plantillas existentenes no hay forma de identificar la ip, usuario o cosas por el estilo automaticamente(como vosotros lo planteasteis inicialmente).

Escensialmente ese es el problema, que no se me ocurre otra forma para automatizar esto y agregar datos identificadores del tipo que ya he mencionado :(, tampoco podemos confiar ciegamente en los desarrolladores y su buena voluntad de hacer un buen log; Así que, el problema sigue vigente.

fjcg02
19-01-2012, 07:45:15
Hola de nuevo,
respecto al nº de desarrolladores que participan en el proyecto, es un poco absurdo ( perdona la expresión). Habrá un analista al que poder dirigirse para que analice esta situación y pueda proponer a los arquitectos dónde y cómo incluir el logueo de trazas. Seguramente se podrán activar y desactivar, y si hasta me apuras, activar para las operaciones de un usuario exclusivamente. Lo de los arquitectos lo digo porque seguramente la aplicación se desarrollará bajo una arquitectura adaptada a vuestro entorno, y los desarrolladores trabajarán en la capa de desarrollo utilizando funciones generales.
Si no es factible, lo tienes muy claro. Cuando haya una incidencia, les respondes que no puedes saber qué ha pasado y "santaspascuasamén", a otra cosa mariposa, ya que no puedes con la información que tienes sacar ninguna conclusión.

Un saludo

José Luis Garcí
19-01-2012, 08:56:47
Winzo, en Java como en los otros lenguajes puedes usar las variable no?, esas variables, pueden usarse y meter los datos que no tienes en la plnatilla que comentas, dentro del mensaje, en corchetes o algo así., de todas maneras, no se puede poner en la configuración de cada terminal, los datos que necesitas, para exportarlos al log?
Dentro de java no hay ningún parametro/función que te de la ip?

Vamos, son ideas solamente, ya te comente que no conozco java.

winzo
19-01-2012, 18:03:05
Hola de nuevo,
respecto al nº de desarrolladores que participan en el proyecto, es un poco absurdo ( perdona la expresión). Habrá un analista al que poder dirigirse para que analice esta situación y pueda proponer a los arquitectos dónde y cómo incluir el logueo de trazas. Seguramente se podrán activar y desactivar, y si hasta me apuras, activar para las operaciones de un usuario exclusivamente. Lo de los arquitectos lo digo porque seguramente la aplicación se desarrollará bajo una arquitectura adaptada a vuestro entorno, y los desarrolladores trabajarán en la capa de desarrollo utilizando funciones generales.
Un saludo

Básicamente el consejo es que le heche la pelota a otros no? mmmm, no me gusta la idea.


Si no es factible, lo tienes muy claro. Cuando haya una incidencia, les respondes que no puedes saber qué ha pasado y "santaspascuasamén", a otra cosa mariposa, ya que no puedes con la información que tienes sacar ninguna conclusión.


Tú que opinarías de un empleado de tu banco, especializado en esto, y al cual le pagas por resolver incidencias(entre otras cosas), si te dice "no sé que ha pasado, esos millones no son rastreables", menuda respuesta que me darían.

fjcg02
20-01-2012, 10:09:52
Básicamente el consejo es que le heche la pelota a otros no? mmmm, no me gusta la idea.

No, pero cada uno deberá cargar con sus responsabilidades, no?. Si es toda la responsabilidad tuya, ya estás tardando en incluir los campos que te permitan trazar las operaciones ¿¿??:confused:



Tú que opinarías de un empleado de tu banco, especializado en esto, y al cual le pagas por resolver incidencias(entre otras cosas), si te dice "no sé que ha pasado, esos millones no son rastreables", menuda respuesta que me darían.

Hombre, no se puede esperar de un obrero que cabe zanjas con una pala y un cubo de playa. Tendrá que tener un martillo neumático y una excavadora...

Quiero decir que si no tienes indentificada cada acción en el log.... ni un adivino sabrá nunca qué ha pasado... o tú sí ? Si has respondido que sí, es que no nos has contado algo bien o se te ha escapado algún detalle que no nos has explicado.

Un saludo
PD: mira a ver si nos puedes aportar más datos

Casimiro Notevi
20-01-2012, 10:16:40
Si no te dan los recursos apropiados... ¿cómo lo vas a hacer?, milagros no se puede, salvo que seas un Dios :)