Definiciones de Prometheus
Tipos de métricas
Para Prometheus aún no existe diferencia entre los tipos de métricas. Él convierte todas las métricas en series temporales.
- Counter
- Un contador es una métrica acumulativa que representa un único contador de aumento monotónico cuyo valor solo puede aumentar o ser reiniciado a cero en el reinicio.
- Gauge
- Un medidor es una métrica que representa un único valor numérico que puede subir y bajar arbitrariamente.
- Histogram
- Un histograma muestra observaciones (generalmente cosas como duraciones de solicitud o tamaños de respuesta) y las cuenta en buckets configurables. También proporciona una suma de todos los valores observados.
- Summary
- Similar a un histograma, un resumen muestra observaciones (generalmente cosas como duraciones de solicitud y tamaños de respuesta). Aunque también proporciona un recuento total de observaciones y una suma de todos los valores observados, calcula cuantiles configurables en una ventana de tiempo variable.
Modelo de datos
Cada serie temporal es identificada exclusivamente por su nombre de métrica y pares de valores-clave opcionales llamados etiquetas.
El nombre de la métrica especifica el recurso general de un sistema que es medido (por ejemplo http_requests_total, el número total de solicitudes HTTP recibidas).
Puede contener letras y dígitos ASCII, así como guiones bajos y dos puntos. Debe corresponder al regex [a-zA-Z_:][a-zA-Z0-9_:]*
.
- Solo se pueden usar letras mayúsculas y minúsculas, números y guión bajo (_).
- No se debe iniciar una métrica con guión bajo, pues representan métricas de uso interno de Prometheus.
- Los dos puntos (:) están reservados para reglas de grabación definidas por el usuario. No deben ser usados por exportadores o instrumentación directa.
- Los valores de etiquetas pueden contener cualquier carácter Unicode.
Las etiquetas activan el modelo de datos dimensional de Prometheus: cualquier combinación de etiquetas para el mismo nombre de métrica identifica una instanciación dimensional específica de esa métrica (por ejemplo: todas las solicitudes HTTP que usaron el método POST para el manejador /api/tracks). El lenguaje de consulta permite filtrado y agregación con base en estas dimensiones. Cambiar cualquier valor de etiquetas, incluyendo añadir o eliminar una etiqueta, creará una nueva serie temporal.
Una etiqueta con un valor vacío se considera no existente.
Las muestras forman los datos reales de la serie temporal. Cada muestra consiste en:
- un valor float64
- un sello de fecha/hora con precisión de milisegundos
Dado un nombre de métrica y un conjunto de etiquetas, las series temporales son frecuentemente identificadas usando esta notación:
<metric name>{<label name>=<label value>, ...}
Por ejemplo, una serie temporal con el nombre de métrica api_http_requests_total
y las etiquetas method="POST"
y handler="/messages"
podría escribirse así:
api_http_requests_total{method="POST", handler="/messages"}
Esta es la misma notación que usa OpenTSDB.
Jobs vs Instancias
En los términos de Prometheus, un endpoint del que puedes hacer scrape se llama instancia, generalmente correspondiendo a un único proceso. Una colección de instancias con el mismo propósito, un proceso replicado para escalabilidad o confiabilidad, por ejemplo, se llama job.
Por ejemplo, un job de servidor de API con cuatro instancias replicadas:
- job: api-server
- instance 1: 1.2.3.4:5670
- instance 2: 1.2.3.4:5671
- instance 3: 5.6.7.8:5670
- instance 4: 5.6.7.8:5671
Cuando Prometheus hace scrape en un target, anexa algunas etiquetas automáticamente a la serie temporal scrapeada que sirve para identificar el target:
job
: El nombre del job configurado al que pertenece el target.instance
: El<host>:<port>
de la URL de la que se hizo el scrape.