Introducción
Prometheus es un sistema de monitoreo de código abierto que nos permite almacenar series de tiempo de datos numéricos. Es muy utilizado para monitorear aplicaciones y servicios en producción. En este caso vamos a ver cómo enviar datos desde una aplicación .NET a Prometheus.
Agregar el paquete NuGet
Utilizaremos https://github.com/prometheus-net/prometheus-net en nuestra aplicación .NET.
Y agregaremos el siguiete código
internalclassProgram{staticvoidMain(string[]args){usingvarserver=newKestrelMetricServer(port:1234);server.Start();// Generate some sample data from fake business logic.varrecordsProcessed=Metrics.CreateCounter("sample_records_processed_total","Total number of records processed.");_=Task.Run(asyncdelegate{while(true){// Pretend to process a record approximately every second, just for changing sample data.recordsProcessed.Inc();awaitTask.Delay(TimeSpan.FromSeconds(1));}});Console.WriteLine("Listening on port 1234");Console.ReadLine();}}
Con este tenemos por un lado las métricas por defecto que nos da Prometheus y por otro lado una métrica que nosotros creamos llamada sample_records_processed_total
que es un contador que incrementa cada segundo.
Configurar Prometheus para que lea nuestros datos
global:scrape_interval:5sevaluation_interval:5sscrape_configs:-job_name:'my_net_application'static_configs:-targets:['host.docker.internal:1234']
Llamaremos a este archivo prometheus.yml
y se copiará en la carpeta donde Prometheus busca su configuración.
Ejecutar Prometheus desde Docker
version:"3.7"services:prometheus:image:prom/prometheuscontainer_name:prometheusvolumes:-./prometheus.yml:/etc/prometheus/prometheus.ymlcommand:-'--config.file=/etc/prometheus/prometheus.yml'ports:-9090:9090restart:always
En el comando command
le indicamos a Prometheus que lea la configuración desde el archivo prometheus.yml
que montamos en el volumen, éste es el archivo que creamos en el paso anterior.
Ejecutar nuestra aplicación .NET
Ejecutamos la aplicación y vemos que Prometheus está leyendo los datos que enviamos desde nuestra aplicación.
Dejo el código de ejemplo por acá https://github.com/leomicheloni/prometheus-net-sample
Enjoy.