Mostrando entradas con la etiqueta BAM. Mostrar todas las entradas
Mostrando entradas con la etiqueta BAM. Mostrar todas las entradas

lunes, 17 de marzo de 2014

WSO2 API Manager + BAM. Monitorizando el consumo de las APIs

En la entrada anterior vimos como publicar como APIs en el WSO2 API Manager los servicios contenidos en una aplicación JAX-RS desplegada en el WSO2 Application Manager.

También vimos como desde una aplicación web en JAVA se accedían a dichas APIs y nos había quedado pendiente analizar la implementación a través del estudio del código fuente de ambas aplicaciones y el monitoreo de las APIs usando el WSO2 BAM.

En esta entrada veremos como monitorizar las APIs para lo cual haremos uso del siguiente enlace donde se explica paso a paso como configurar el BAM y el APIM.

El WSO2 API Manager a través de las funcionalidades que expone en la aplicación web API Manager nos permite ver los siguientes tipos de estadísticas:

  • Uso de todas las APIs y uso de todas las APIs por creador.
  • Promedio de los tiempos de respuesta.
  • Uso de un API por subscriptor.
  • Uso de un API por subscriptor y por versión.
  • Número de subscripciones por API.

De todas estas estadísticas la única disponible antes de configurar el BAM es el número de subscripciones por API. De ahí la importancia de incorporar el BAM a este escenario pues es la manera de saber cómo están siendo usadas y se están comportando nuestras APIs.

A partir de aquí asumimos que ambas herramientas han sido ya configuradas.
Si accedemos de nuevo a la aplicación web del API Publisher en https://localhost:9443/publisher y vamos a la opción “Suscripciones” debajo de “MIS APIS” veremos luego de varios consumos de la aplicación web en java como se rellenan las estadísticas. A manera de ejemplo les muestro las mías.



Podemos ver que cada una tiene una subscripción así que eso da un 33% a cada una.


Igual se muestra el número de llamadas por API.


Los tiempos de respuesta.


Últimos accesos.


Y el uso por usuario así como las invocaciones fallidas en caso de haberlas.


Así como pueden ver de una manera muy bien documentada por WSO2 podemos integrar el APIM con el BAM para lograr almacenar las estadísticas de uso de las APIs y llevar el control de su consumo.

A manera de señalamiento al parecer hay un problema con las fechas y hora en el APIM. Es algo que hay que revisar pero si se fijan en las estadísticas no están correctas las horas y las fechas que muestran.
Espero les sea de utilidad.

viernes, 7 de febrero de 2014

WSO2 BAM/CEP: Escenario 1 de aplicación para eventos complejos.


El BAM de WSO2 en su versión 2.4.0 ya viene con las funcionalidades del CEP de WSO2 incluidas.
Esto permite no solo capturar eventos para mostrarlos posteriormente usando el dashboard del BAM,si no que los eventos se capturan en tiempo real usando las funcionalidades del CEP y se pueden procesar para la toma de decisiones también en tiempo real.

Como ejemplo les muestro una gráfica generada por el BAM del flujo de eventos recibidos.


Y debajo pueden ver como es el comportamiento de la cantidad de request/response/fault de los eventos recibidos.


  El escenario implementado para esta entrada es realmente sencillo a manera de "Hola Mundo" y estos son los pasos de manera general: 
  • Configurar el AS de WSO2 para que publique los eventos del consumo de los servicios para el BAM. 
  • Invocar a un servicio desplegado en el AS para que el BAM reciba un evento, de esta manera se crea automáticamente un Stream tal y como se muestra en la siguiente figura.


  En este caso se crea automáticamente el Stream de nombre “bam_service_data_publisher” versión 1.0.0 
  • Crear un plan de ejecución que extraiga de cada evento que arribe el tiempo de respuesta del servicio y si es menor que determinada cantidad de milisegundos inserte el evento en un nuevo Stream, usando los atributos especificados.




Como pueden ver uso el Stream de entrada y si en un evento el response_time es mayor que 1s se selecciona el nombre del servicio, el nombre de la operación y el tiempo de respuesta y se insertan en un Stream nuevo.
Este Stream nuevo la herramienta nos permite crearlo muy fácilmente y es el que se llama “OutMediationStatsStream”
  
  • Creamos un adaptador de salida de tipo email.


Que tiene la siguiente configuración.

  • Ahora se crea un formateador de eventos, que usará el adaptador de salida previamente creado y nos permite formatear el evento de salida tal y como se muestra en las siguientes imágenes.



  • Ahora ya se puede probar la configuración creada, para ello solo es necesario invocar a un servicio desplegado en el AS y observar los resultados.
En nuestro caso usamos el SOAPUI para generar una prueba de carga.

Y estamos usando el servicio Echo, con la operación echoString.
Les muestro nuevamente las gráficas generadas:


Y un ejemplo de un correo enviado:
Se ha detectado el consumo de servicio echo, en la operacion echoString con un tiempo de respuesta de 2502 el cual se encuentra por encima del valor establecido

En otras entradas estaremos viendo planes de ejecución más complejos que usen diferentes tipos del filtros y ventanas para capturar escenarios complejos, así como diferentes formas de generar los eventos y de generar las salidas como respuesta a los eventos complejos.



jueves, 6 de febrero de 2014

WSO2 BAM: Solucionando un error del tipo Broken Pipe.

En algunas pruebas de alto rendimiento realizadas con el WSO2 BAM versión 2.4.0 podemos toparnos con un error del tipo broken pipe. Y quisiera dejarles la solución del mismo.

Antes les dejo los logs generados para que les sirva en la identificación del problema.


TID: [0] [BAM] [2014-02-03 10:17:39,593] ERROR {org.apache.hadoop.mapred.MapTask} -  IO error in map input file file:/opt/wso2bam-2.4.0/repository/data/hive/warehouse-1234/mappingjmxdatatable {org.apache.hadoop.mapred.MapTask}
TID: [0] [BAM] [2014-02-03 10:17:42,063]  WARN {org.apache.hadoop.mapred.LocalJobRunner} -  job_local_0001 {org.apache.hadoop.mapred.LocalJobRunner}
java.io.IOException: IO error in map input file file:/opt/wso2bam-2.4.0/repository/data/hive/warehouse-1234/mappingjmxdatatable
        at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:242)
        at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.next(MapTask.java:216)
        at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:48)
        at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:435)
        at org.apache.hadoop.mapred.MapTask.run(MapTask.java:371)
        at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:211)
Caused by: java.io.IOException: java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerChain.handleRecordReaderNextException(HiveIOExceptionHandlerChain.java:121)
        at org.apache.hadoop.hive.io.HiveIOExceptionHandlerUtil.handleRecordReaderNextException(HiveIOExceptionHandlerUtil.java:77)
        at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.doNext(HiveContextAwareRecordReader.java:275)
        at org.apache.hadoop.hive.ql.io.HiveRecordReader.doNext(HiveRecordReader.java:79)
        at org.apache.hadoop.hive.ql.io.HiveRecordReader.doNext(HiveRecordReader.java:33)
        at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.next(HiveContextAwareRecordReader.java:108)
        at org.apache.hadoop.mapred.MapTask$TrackedRecordReader.moveToNext(MapTask.java:236)
        ... 5 more
Caused by: java.lang.RuntimeException: org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe
        at org.apache.hadoop.hive.cassandra.input.ColumnFamilyRowRecordReader$StaticRowIterator.maybeInit(ColumnFamilyRowRecordReader.java:619)
        at org.apache.hadoop.hive.cassandra.input.ColumnFamilyRowRecordReader$StaticRowIterator.computeNext(ColumnFamilyRowRecordReader.java:624)
        at org.apache.hadoop.hive.cassandra.input.ColumnFamilyRowRecordReader$StaticRowIterator.computeNext(ColumnFamilyRowRecordReader.java:556)
        at com.google.common.collect.AbstractIterator.tryToComputeNext(AbstractIterator.java:135)
        at com.google.common.collect.AbstractIterator.hasNext(AbstractIterator.java:130)
        at org.apache.hadoop.hive.cassandra.input.ColumnFamilyRowRecordReader.nextKeyValue(ColumnFamilyRowRecordReader.java:242)
        at org.apache.hadoop.hive.cassandra.input.CassandraHiveRecordReader.nextKeyValue(CassandraHiveRecordReader.java:182)
        at org.apache.hadoop.hive.cassandra.input.CassandraHiveRecordReader.next(CassandraHiveRecordReader.java:75)
        at org.apache.hadoop.hive.cassandra.input.CassandraHiveRecordReader.next(CassandraHiveRecordReader.java:22)
        at org.apache.hadoop.hive.ql.io.HiveContextAwareRecordReader.doNext(HiveContextAwareRecordReader.java:273)
        ... 9 more
Caused by: org.apache.thrift.transport.TTransportException: java.net.SocketException: Broken pipe
        at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:147)
        at org.apache.thrift.transport.TFramedTransport.flush(TFramedTransport.java:157)
        at org.apache.thrift.TServiceClient.sendBase(TServiceClient.java:65)
        at org.apache.cassandra.thrift.Cassandra$Client.send_get_range_slices(Cassandra.java:686)
        at org.apache.cassandra.thrift.Cassandra$Client.get_range_slices(Cassandra.java:675)
        at org.apache.hadoop.hive.cassandra.input.ColumnFamilyRowRecordReader$StaticRowIterator.maybeInit(ColumnFamilyRowRecordReader.java:583)
        ... 18 more
Caused by: java.net.SocketException: Broken pipe
        at java.net.SocketOutputStream.socketWrite0(Native Method)
        at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
        at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
        at org.apache.thrift.transport.TIOStreamTransport.write(TIOStreamTransport.java:145)
        ... 23 more
TID: [0] [BAM] [2014-02-03 10:17:42,296] ERROR {org.apache.hadoop.hive.ql.exec.ExecDriver} -  Ended Job = job_local_0001 with errors {org.apache.hadoop.hive.ql.exec.ExecDriver}
TID: [0] [BAM] [2014-02-03 10:17:42,302] ERROR {org.apache.hadoop.hive.ql.exec.ExecDriver} -  Error during job, obtaining debugging information... {org.apache.hadoop.hive.ql.exec.ExecDriver}



SOLUCIÓN:

La solución es realmente sencilla. Solo basta localizar el fichero cassandra.yaml y modificar estas 2 líneas:

thrift_framed_transport_size_in_mb: 15
thrift_max_message_length_in_mb: 16

y dejarlas como sigue:

thrift_framed_transport_size_in_mb: 60
thrift_max_message_length_in_mb: 64

martes, 10 de diciembre de 2013

WSO2 y el monitoreo de aplicaciones web en Java.


La suite de WSO2 tiene cosas para casi todo, y en esta entrada quisiera compartir con ustedes una de las que más utilidad queremos sacar. El monitoreo de aplicaciones web.

La idea es que buscamos saber de las aplicaciones web la siguiente información:

  • Cantidad de solicitudes de acceso, respuesta e intentos fallidos.
  • Promedio del tiempo de respuesta de la aplicación web.
  • Tiempos mínimos y máximos de respuesta.
  • Cantidad de visitas de usuarios.
  • Tiempo promedio de estancia de los usuarios en la aplicación web.

Para lograr esto basta con seguir los pasos explicados en el siguiente tutorial [1] y podrán monitorear todo lo anterior. A continuación les dejo algunas pantallas para que puedan ver.




Enlaces:


lunes, 13 de mayo de 2013

Introducción a la Plataforma de WSO2.


WSO2 es una empresa registrada en los EE.UU con oficinas en varios países y con un personal que ronda las 150 personas y va creciendo.

Esta empresa de tecnología se dedica al desarrollo de una suite de herramientas desarrolladas bajo licencia Apache v2 enfocadas en los temas que tienen que ver con SOA y BPM.

La siguiente imagen les puede dar una idea:


De manera general estas herramientas tienen un núcleo base y común para todas que es el framework CARBON. Este framework contiene el conjunto de funcionalidades que es transversal a todas las herramientas y usa OSGI como framework para el desarrollo de dichas funcionalidades en forma de bundles. Las herramientas entonces son la suma de las funcionalidades del framework CARBON más un conjunto de plugins o bundles desarrollados usando OSGI que se integran para formar una herramienta independiente.

Entre estas herramientas tenemos las siguientes:

1.       Application Server (AS): es la herramienta para el despliegue de componentes. Y por componentes debemos entender servicios web desarrollados en axis2, jax-ws, spring-ws, etc; también sirve para desplegar aplicaciones web tradicionales y servicios restful. Las aplicaciones web desplegadas en esta plataforma y que fueran pensadas para ello pueden acceder a diversas funcionalidades que brinda la herramienta. En mi uso particular la utilizo para desplegar servicios de datos y servicios axis2 así como para el despliegue de las aplicaciones web.

2.       Enterprise Service Bus (ESB): es el corazón de cualquier solución de integración e interoperabilidad y no es la excepción en el caso de esta suite de herramientas, a través de su arquitectura de tuberías y filtros permite el desarrollo de servicios proxy a través de los cuales se pueden brindar todas las características que en la actualidad soportan los ESB más notables del mercado.


3.       Business Activity Monitoring (BAM): es la herramienta usada para el monitoreo de servicios, servidores y aplicaciones web. A través de su arquitectura permite que los elementos a monitorizar puedan conectarse a ella y enviar los datos requeridos los cuales son procesados y mostrados en un conjunto de graficas que conforman un dashboard sumamente útil para comprender el uso que pueden tener las distintas herramientas bajo monitorización.

4.       Identity Server (IS): es la herramienta encargada de la seguridad. Brinda servicios de autenticación única o SSO para el  resto de las herramientas y para cualquier aplicación web que lo requiera, servicios de autenticación de grano fino basado en el estándar  XACML3.0 compatible con la versión 2.0, emite token de seguridad para escenarios avanzado de autenticación en servicios web que requieren el uso de los estándares WS-Trust y WS-SecureConversation.

Del resto de las herramientas no van quedando las siguientes que serán descritas en otras entradas:

1.       WSO2 Developer Studio.
2.       Governance Registry.
3.       Message Broker.
4.       Elastic Load Balance.
5.       Stratos.
6.       Data Service Server.
7.       WSF-PHP.
8.       Business Process Server.
9.       Business Rules Server.
10.   API Manager.
11.   Cloud Gateway.
12.   Complex Event Processor.

Si suman serán 16 herramientas + el framework CARBON lo que hace que esta suite sea tan interesante para los proyectos que tienen que ver con los temas de SOA y BPM.

En la siguiente entrada describiré brevemente 4 herramientas más y así hasta terminar.

jueves, 9 de mayo de 2013

El BAM de WSO2 permite monitorizar servidores usando JMX.

En la versión anterior del BAM de WSO2 se pueden monitorizar los servicios desplegados en la plataforma, pero no se pueden monitorizar los servidores en cuanto a CPU, RAM, etc.




En la versión actual, la 2.2.0, ya se puede monitorizar estas variables. Aquí les dejo algunas imágenes:





 Según la comunidad de desarrolladores de WSO2 para la próxima versión ya será posible monitorizar las aplicaciones web desplegadas en el AS de WSO2.