SAP Cloud application logging + Kibana (Foundry)
Introducción
Uno de los pilares básicos una vez una aplicación está en producción es contar con un buen sistema de reporting de la salud de la misma. Esto nos permite evitar hacernos preguntas como: ¿Qué ha tocado el usuario para romper la app? o ¿ Cómo puede ser que no se haya visto esto en la fase de test?
La respuesta a estos problemas se llama Application Logging, un servicio estándar de SAP y lo mejor… Lo podemos tener funcionando en 5 minutos!

En esta entrada vamos a activar este servicio, añadir trazas a una aplicación node.js deployada en Cloud Foundry y a explorar Kibana.
Logs de la aplicación de manera estandard
La manera más rápida para obtener como esta nuestra aplicación es consultar los logs de cada aplicación. Esta es una sección que obtiene de manera estándar (y sin necesidad de realizar ninguna configuración) los logs de la aplicación. Entre ellos cualquier «system.out» o «console.log».
Este log no esta estructurado, por lo que en caso de querer analizarlo necesitaremos hacer un parseo del mismo.

El acceso nos permite ver el fichero donde se va guardando lo que va pasando en la aplicación. però… ¿que pasa si reiniciamos la aplicaciòn? efectivamente podemos perder este log.
Añadiendo Application login
Lo siguiente que podemos hacer es registrar de manera permanente (aunque solo durante 7 días) un sistema que nos guarde estos log y estructure estos datos.
Los pasos a seguir para añadir este servicio a nuestra aplicación son:
- Accedemos a la opción market place de nuestra subcuenta:

- Vamos a crear una nueva instancia en caso de no tenerla:

- En el wizard seleccionaremos el plan, asignaremos nuestra aplicación (si ya existe) a este servicio (es decir, hacer binding) y le daremos el nombre a nuestro servicio:

Con esta sencilla acción podemos ir haciendo Binding a nuestras aplicaciones para obtener logs de manera estructurada. Para poder leer los datos, utilizaremos Kibana.
Kibana
Una vez los logs se están guardando y estructurando llegamos a Kibana. Un servicio que nos permite crear dashboards que de una manera rápida permite ver el estado de la aplicación.
Para acceder, vamos a cualquiera de nuestras aplicaciones en SAP Cloud foundry y vamos a la sección de logs. Allí tendremos el link a Kibana.

Una vez en Kibana vamos a ver muchos datos sobre nuestra aplicación, como métricas de tiempos de las llamadas, estatus de nuestras llamadas, etc.. veras que hay un mundo entero por descubrir con esta app.
Como recomendación personal, os recomiendo centraros en:
- Perfomance and Quality: Estadísticas de codigos de respuesta de nuestras llamadas.

- Network and Load: Número de llamadas y detalles de las mismas.

Añadiendo trazas personalizadas
Ya lo tenemos todo apunto, ¿pero qué pasa si queremos añadir campos personalizados?
Un ejemplo puede ser si queremos añadir trazas de nuestras excepciones de código de una manera elegante.
En este caso, unas sencillas modificaciones en nuestro código permitirán añadir esta trazas.
Partimos de un aplicación node.js muy sencilla, en este caso partimos de la aplicación resultante de seguir el manual, https://developers.sap.com/mission.scp-2-java-node.html
Con la aplicación montada, solo necesitaremos seguir estos sencillos pasos:
- Instalar la librería «cf-nodejs-logging-support» ejecutando el comando de instalacion de NPM dentro de nuestra aplicación
npm install cf-nodejs-logging-support
- Esto añadirá en nuestro fichero de proyecto «package.json» una nueva dependencia. En caso de trabajar con webide, podemos añadir esta dependencia manualmente en el mismo fichero package.json.
"dependencies": {
"cf-nodejs-logging-support": "^6.2.0",
"express": "^4.17.1"
}
- Una vez tenemos la librería, la importamos en nuestro fichero js y ya estará listo para utilizar para registrar nuestros logs. Os añado un ejemplo de como inyectar una traza «log.info».
const express = require('express');
const log = require('cf-nodejs-logging-support');
const app = express();
app.get('/', function (req, res) {
res.send('Hello World!');
// Add log with request info from user
log.info("Log registered" , {"myfieldA" : "Hello world",
"myfieldB" :new Date()
});
//console.log('Hello World sent to Browser at: ' + new Date() ); //new line
});
const port = process.env.PORT || 3000;
app.listen(port, function () {
log.registerCustomFields(["myfieldA", "myfieldB"]);
console.log('myapp is using Node.js version: ' + process.version); //new line
console.log('myapp listening on port ' + port);
});
Como veis, de una manera muy fácil podemos obtener nuestros log de nuestras aplicaciones.
Si queréis profundizar sobre este servicio, os recomiendo la documentación estándar https://help.sap.com/viewer/ee8e8a203e024bbb8c8c2d03fce527dc/Cloud/en-US/68454d44ad41458788959485a24305e2.html
Como siempre suscribete y comparte en redes para estar a la última.