Path: blob/master/site/es-419/io/tutorials/prometheus.ipynb
25118 views
Copyright 2020 The TensorFlow IO Authors.
Cargar métricas desde el servidor Prometheus
Precaución: Además de los paquetes de Python, este bloc de notas usa sudo apt-get install
para instalar paquetes de terceros.
Descripción general
Este tutorial carga métricas de CoreDNS desde un servidor Prometheus en un tf.data.Dataset
y luego usa tf.keras
para entrenamiento e inferencia.
CoreDNS es un servidor DNS centrado en el descubrimiento de servicios y se implementa bastanta como parte del clúster de Kubernetes. Por esa razón, las operaciones devops a menudo lo supervisan de cerca.
Este tutorial es un ejemplo que podrían usar los desarrolladores que buscan automatización en sus operaciones a través del aprendizaje automático.
Configuración y uso
Instale el paquete tensorflow-io necesario y reinicie el tiempo de ejecución
Instalar y configurar CoreDNS y Prometheus
Para fines de demostración, un servidor CoreDNS local con el puerto 9053
abierto para recibir consultas DNS y el puerto 9153
(predeterminado) abierto para exponer métricas para extracción. La siguiente es una configuración básica de Corefile para CoreDNS y está disponible para descargar:
Se pueden encontrar más detalles sobre la instalación en la documentación de CoreDNS.
El siguiente paso es configurar el servidor Prometheus y usarlo para eliminar las métricas de CoreDNS que están expuestas en el puerto 9153
anterior. El archivo prometheus.yml
para la configuración también está disponible para descargar:
Para mostrar alguna actividad, el comando dig
podría usarse para generar algunas consultas DNS en el servidor CoreDNS que se ha configurado:
Ahora tenemos un servidor CoreDNS del que un servidor Prometheus extrae sus métricas listas para ser consumidas por TensorFlow.
Crear un conjunto de datos para métricas de CoreDNS y usarlo en TensorFlow
Crear un conjunto de datos para métricas de CoreDNS que esté disponible en el servidor PostgreSQL, se puede hacer con tfio.experimental.IODataset.from_prometheus
. Se necesitan como mínimo dos argumentos. query
se pasa al servidor Prometheus para seleccionar las métricas y length
es el período que desea cargar en el conjunto de datos.
Puede comenzar con "coredns_dns_request_count_total"
y "5"
(segundos) para crear el conjunto de datos a continuación. Dado que anteriormente en el tutorial se enviaron dos consultas DNS, se espera que las métricas para "coredns_dns_request_count_total"
sean "2.0"
al final de la serie temporal:
Profundizar en las especificaciones del conjunto de datos:
Es obvio que el conjunto de datos consta de una tupla (time, values)
donde el campo values
es un dict de Python ampliado en:
En el ejemplo anterior, 'coredns'
es el nombre del trabajo, 'localhost:9153'
es el nombre de la instancia y 'coredns_dns_request_count_total'
es el nombre de la métrica. Tenga en cuenta que, según la consulta de Prometheus que se use, es posible que se devuelvan varios trabajos/instancias/métricas. Por eso también se usa el dict de Python en la estructura del conjunto de datos.
Tome otra consulta "go_memstats_gc_sys_bytes"
como ejemplo. Dado que tanto CoreDNS como Prometheus están escritos en Golang, la métrica "go_memstats_gc_sys_bytes"
está disponible tanto para el trabajo "coredns"
como para el trabajo "prometheus"
:
Nota: Esta celda puede generar un error la primera vez que la ejecuta. Ejecútela nuevamente y pasará.
El Dataset
creado ya está listo para pasarse a tf.keras
directamente para entrenamiento o inferencia.
Usar el conjunto de datos para el entrenamiento de modelos
Con el conjunto de datos de métricas creado, es posible pasar directamente el conjunto de datos a tf.keras
para el entrenamiento o la inferencia del modelo.
Para fines de demostración, este tutorial solo usará un modelo LSTM muy simple con 1 característica y 2 pasos como entrada:
El conjunto de datos que se usa es el valor de 'go_memstats_sys_bytes' para CoreDNS con 10 muestras. Sin embargo, dado que se forma una ventana deslizante de window=n_steps
y shift=1
, se necesitan muestras adicionales (para cualquier dos elementos consecutivos, el primero se toma como x
y el segundo como y
para el entrenamiento). El total es 10 + n_steps - 1 + 1 = 12
segundos.
El valor de los datos también se escala a [0, 1]
.
El modelo entrenado anterior no es muy útil en realidad, ya que el servidor CoreDNS que se configuró en este tutorial no tiene ninguna carga de trabajo. Sin embargo, esta es una canalización funcional que podría usarse para cargar métricas desde servidores de producción reales. Luego, el modelo podría mejorarse para resolver un problema del mundo real de la automatización de Devops.