SetValue.NETSetValue.NET

dotnet-monitor

June 27, 2020

Hace unos días, publicaba .NET Blog un post introductorio con una nueva herramienta para monitorizar los procesos de .NET Core. Esta herramienta, que actualmente se encuentra en preview, permite recoger distintos indicadores de diagnóstico como son logs, trazas, dumps... y los expone mediante una API REST independiente a tu aplicación.

Endpoints

La API expuesta por dotnet-monitor tiene los siguientes endpoints:

  • /processes. Devuelve la lista completa de procesos que accesible por el monitor.
  • /dump/{pid?}. Devuelve todos los dump de un proceso
  • /gcdump/{pid?}. Obtiene todos los dump del Garbage Collector disponibles para un proceso.
  • /trace/{pid?}. Muestra las trazas de un proceso. Incluye info de CPU, inicio/fin de HTTP requests y métricas de un lapso de 30 segundos.
  • /logs/{pid?}. Devuelve los registros de log de un proceso en un periodo de 30 segundos.
  • /metrics. Obtiene las métricas de un proceso de .NET Core en formato prometheus, a diferencia del resto de métricas, ésta no funciona si dotnet-trace detecta más de un proceso.

Distribución

La herramienta ofrece tres métodos de distribución, local, Docker y Kubernetes. A continuación, se explica las distribuciones en Local y en Docker.

Local

En primer lugar, requiere tener instalado .NET Core. Una vez instalado en una consola se puede ejecutar la instalación del monitor.

dotnet tool install -g dotnet-monitor --add-source https://dnceng.pkgs.visualstudio.com/public/_packaging/dotnet5-transport/nuget/v3/index.json --version 5.0.0-preview.1.*

dotnet-monitor install

Después de completar la instalación, mediante el siguiente comando se empieza a recolectar información.

dotnet monitor collect

dotnet-monitor collect

Una vez se inicia, se habilita por defecto estos dos puertos:

  • 52323 expone toda la colección de endpoints
  • 52325 expone únicamente el endpoint de metrics

dotnet-monitor metrics

Docker

Para utilizar el monitor desde un contenedor docker, se realiza un pull de la imagen desde el repositorio de MCR (Microsoft Container Registry).

docker pull mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1

dotnet-monitor docker pull

Para poder realizar la diagnosis, necesitamos crear un volumen entre los contenedores, por un lado, la aplicación que se quiere monitorizar, y por otro el del monitor.

docker volume create diagnosticserver
docker run -d --rm -p 8080:80 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/core/samples:aspnetapp
docker run -it --rm -p 52323:52323 -v diagnosticsserver:/tmp mcr.microsoft.com/dotnet/nightly/monitor:5.0.0-preview.1 --urls http://*:52323

dotnet-monitor docker monitor

Conclusión

dotnet-monitor es de momento una beta, una aplicación experimental que tiene muy buena pinta, se espera que para la publicación de .NET 5 pueda pasar a ser producto, pero aún no hay nada confirmado.

Si se utiliza esta herramienta en un entorno productivo, se debe tener mucho cuidado con compartir o disponer públicamente las urls que expone el monitor, ya que la información de los diagnósticos que muestra puede contener detalles sensibles que hagan que la aplicación se vuelva muy vulnerable.

Buy Me A Coffee