Project for learning about Learning Observability.
Explore the docs »
Project Page
-
Report Bug
-
Request Feature
Table of Contents
Este proyecto es para aprender sobre la observabilidad.
Este proyecto es para comenzar con las mejores prácticas y herramientas de observabilidad del aprendizaje.
Algunas herramientas para aprender:
- Prometeo
- Administrador de alertas
- Grafana
- Grafana Loki
- Hora de Grafana
- Sistema Linux arriba
- Clúster Kubernetes arriba
- git
Clonar el repositorio
git clone https://github.com/marcossilvestrini/learning-observability.git
cd learning-observability || exit
Publico algunos ejemplos para su uso en este repositorio.
- Crear repositorio
- Prometeo
- Administrador de alertas
- Grafana
- Grafana Loki
- Hora de Grafana
- Aleación de Grafana
- Otras herramientas
Ver elproblemas abiertospara obtener una lista completa de las características propuestas (y problemas conocidos).
Prometheus es un conjunto de herramientas de alerta y monitoreo de sistemas de código abierto creado originalmente en SoundCloud.
Desde su inicio en 2012, muchas empresas y organizaciones han adoptado Prometheus y el proyecto cuenta con una comunidad de desarrolladores y usuarios muy activa.
El ecosistema Prometheus consta de múltiples componentes, muchos de los cuales son opcionales:
- el servidor principal de Prometheus que extrae y almacena datos de series de tiempo
- Bibliotecas cliente para instrumentar el código de la aplicación.
- una puerta de enlace push para respaldar trabajos de corta duración
- exportadores de propósito especial para servicios como HAProxy, StatsD, Graphite, etc.
- un administrador de alertas para manejar alertas
- varias herramientas de apoyo
Para más información sobre Prometheus acceda a la documentación oficial:
https://prometheus.io/docs/introduction/overview/
Nombre de métrica de ejemplo:
<metric name>{<label name>=<label value>, ...}
Ejemplo de nombre de métrica con etiquetas:
api_http_requests_total{method="POST", handler="/messages"}
Encimera– acepta y almacena sólo aquellos valores que aumentarán con el tiempo.
Indicador– almacena los valores que pueden tomar diferentes valores, que pueden tanto aumentar como disminuir.
histograma– toma muestras de observaciones (generalmente cosas como duraciones de solicitudes o tamaños de respuestas) y las cuenta en grupos configurables. También proporciona una suma de todos los valores observados, lo que le permite calcular promedios.
Resumen– histograma con una representación de datos más detallada utilizando estadísticas adicionales (cuantiles).
En términos de Prometheus, un punto final que puede eliminar se denomina instancia y generalmente corresponde a un único proceso.
Una colección de instancias con el mismo propósito, por ejemplo un proceso replicado para lograr escalabilidad o confiabilidad, se denomina trabajo.
El protocolo de escritura remota está diseñado para permitir la propagación confiable de muestras en tiempo real desde un remitente a un receptor, sin pérdidas.
- un "Remitente" es algo que envía datos de escritura remota de Prometheus.
- un "Receptor" es algo que recibe datos de escritura remota de Prometheus.
- una "Muestra" es un par de (marca de tiempo, valor).
- una "Etiqueta" es un par de (clave, valor).
- una "Serie" es una lista de muestras, identificadas por un conjunto único de etiquetas.
La especificación pretende describir cómo interactúan los siguientes componentes:
- Prometeo (como "remitente" y "receptor")
- Avalanche (como "remitente"): una herramienta de prueba de carga Métricas de Prometheus.
- Corteza (como "receptor")
- Agente elástico (como "receptor")
- Agente de Grafana (como "remitente" y "receptor")
- GreptimeDB (como "receptor")
- Agente Telegraf de InfluxData. (como remitente y como receptor)
- M3 (como "receptor")
- Mimir (como "receptor")
- OpenTelemetry Collector (como "remitente" y eventualmente como "receptor")
- Thanos (como "receptor")
- Vector (como "remitente" y "receptor")
- VictoriaMetrics (como "receptor")
Prometheus proporciona un lenguaje de consulta funcional llamado PromQL (Prometheus Query Language) que permite al usuario seleccionar y agregar datos de series temporales en tiempo real.
El resultado de una expresión puede mostrarse como un gráfico, verse como datos tabulares en el navegador de expresiones de Prometheus o ser consumido por sistemas externos a través de la API HTTP.
La federación permite que un servidor Prometheus extraiga series temporales seleccionadas de otro servidor Prometheus.
La federación jerárquica permite a Prometheus escalar a entornos con decenas de centros de datos y millones de nodos.
En este caso de uso, la topología de la federación se asemeja a un árbol, con servidores Prometheus de nivel superior recopilando datos de series temporales agregadas de una mayor cantidad de servidores subordinados.
Esto significa que tenemos servidores Prometheus más grandes que recopilan datos de series temporales de servidores más pequeños. Tenemos un enfoque de arriba hacia abajo en el que se recopilan datos de diferentes niveles.
Este método implica que un servidor Prometheus monitoree un servicio o grupo de servicios en particular, recopilando datos de series temporales específicas de otro servidor que monitorea un conjunto diferente de servicios.
Por ejemplo, un programador de clúster que ejecuta varios servicios podría exponer información sobre el uso de recursos (como el uso de memoria y CPU) sobre las instancias de servicio que se ejecutan en el clúster.
Por otro lado, un servicio que se ejecuta en ese clúster solo expondrá métricas de servicio específicas de la aplicación.
A menudo, estos dos conjuntos de métricas son seleccionados por servidores Prometheus separados. Al utilizar la federación, el servidor Prometheus que contiene métricas de nivel de servicio puede extraer las métricas de uso de recursos del clúster sobre su servicio específico del clúster Prometheus, de modo que ambos conjuntos de métricas se puedan usar dentro de ese servidor.
Al hacer esto, podemos ejecutar consultas y alertas sobre los datos combinados de ambos servidores.
Prometheus proporciona un descubrimiento de servicios HTTP genérico que le permite descubrir objetivos a través de un punto final HTTP.
El descubrimiento de servicios HTTP es complementario a los mecanismos de descubrimiento de servicios admitidos y es una alternativa al descubrimiento de servicios basado en archivos.
- static_configs no escala a entornos más dinámicos donde se agregan o eliminan instancias con frecuencia
- Prometheus puede integrarse con mecanismos de descubrimiento de servicios para actualizar automáticamente su vista de las instancias en ejecución.
- cuando se agregan nuevas instancias, Prometheus comenzará a eliminar, cuando se pierda el descubrimiento, la serie temporal también se eliminará
- integraciones integradas con Consul, Azure, AWS o basadas en archivos si se requiere un mecanismo personalizado
- La plataforma puede publicar el archivo JSON/YAML especificando todos los objetivos desde los cuales extraer. Prometheus lo usa para actualizar objetivos automáticamente
prometheus.yaml para eliminar los servicios en el destino http_sd.json
global:
scrape_interval: 15s
evaluation_interval: 15s
scrape_configs:
# Service Discovery with file_sd
- job_name: 'http_sd'
basic_auth:
username: "skynet"
password: "prometheus"
file_sd_configs:
- files:
- /home/vagrant/prometheus-server/http_sd.json
http_sd.json
[
{
"targets": ["192.168.0.130:9100", "192.168.0.131:9100"],
"labels": {
"__meta_prometheus_job": "node"
}
},
{
"targets": ["192.168.0.130:9091"],
"labels": {
"__meta_prometheus_job": "pushgateway"
}
}
]
# Download files - https://prometheus.io/download/
wget https://github.com/prometheus/prometheus/releases/download/v2.51.2/prometheus-2.51.2.linux-amd64.tar.gz
# Extract files
tar xvfz prometheus-*.tar.gz
rm prometheus-*.tar.gz
cd prometheus-*
# Check version
./prometheus --version
Ver mi archivo de configuraciónprometheus.yaml
vim prometheus.yaml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: "prometheus"
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ["localhost:9090"]
# Start
./prometheus --config.file=prometheus.yml
# Start with PM2 - npm install pm2@latest -g
pm2 start prometheus --name prometheus-server -- --config.file=prometheus.yml
http://localhost:9090 # all endpoints
http://localhost:9090/graph # PromQL expressions
http://localhost:9090/metrics # metrics
http://localhost:9090/targets # scrape_configs jobs
Puede utilizar la expresión en modo Tabla o Gráfico.
Abra la página http://localhost:9090
# Check all http metrics
promhttp_metric_handler_requests_total
# Check http metrics with http status code 200
promhttp_metric_handler_requests_total{code="200"}
# Count http metrics
count(promhttp_metric_handler_requests_total)
# Rate function
rate(promhttp_metric_handler_requests_total{code="200"}[1m])
Un exportador es un binario que se ejecuta junto con la aplicación de la que desea obtener métricas.
El exportador expone las métricas de Prometheus, normalmente convirtiendo las métricas que se exponen en un formato que no es de Prometheus a un formato compatible con Prometheus.
Prometheus Node Exporter expone una amplia variedad de métricas relacionadas con el hardware y el kernel.
# Download - https://prometheus.io/download#node_exporter
wget https://github.com/prometheus/node_exporter/releases/download/v1.7.0/node_exporter-1.7.0.linux-amd64.tar.gz
# Extract
tar xvfz node_exporter-*.*-amd64.tar.gz
cd node_exporter-*.*-amd64
# Start
./node_exporter
# Start with PM2 - npm install pm2@latest -g
pm2 start node_exporter --name node_exporter
# Access metrics
http://localhost:9100/metrics
Para habilitar la chatarra para el exportador de nodos, puede configurar Prometheus.
# Edit prometheus file and add job node
vim prometheus.yaml
...
scrape_configs:
- job_name: node
static_configs:
- targets: ['localhost:9100']
...
Reinicie el servicio Prometheus para solicitar un nuevo trabajo.
Prometheus Pushgateway es un servicio intermediario que permite que trabajos efímeros y por lotes expongan sus métricas a Prometheus.
Dado que es posible que este tipo de trabajos no existan el tiempo suficiente para ser eliminados, en su lugar pueden llevar sus métricas a un Pushgateway.
Luego, Pushgateway actúa como un almacén de métricas temporal que Prometheus extrae.
Esta configuración es particularmente útil para capturar el resultado de un trabajo que no se ejecuta continuamente, como un trabajo por lotes en un sistema CI o un script de respaldo que se ejecuta a una hora programada.
Simplifica el monitoreo de este tipo de trabajos sin necesidad de ejecutar una instancia de Prometheus de larga duración que podría sobrevivir a los trabajos en sí.
# Download
wget -q https://github.com/prometheus/pushgateway/releases/download/v1.8.0/pushgateway-1.8.0.linux-amd64.tar.gz
# Extract
tar xvfz pushgateway-*.*-amd64.tar.gz
cd pushgateway-*.*-amd64
# Start
# Start with PM2 - npm install pm2@latest -g
pm2 start pushgateway --name pushgateway -- --web.listen-address "192.168.0.130:9091"
# Edit prometheus file and add job pushgateway
vim prometheus.yaml
scrape_configs:
- job_name: 'pushgateway'
honor_labels: true
static_configs:
- targets: ['192.168.0.130:9091'] # prometheus server for scraping
# Restart prometheus
# restart with pm2
pm2 restart prometheus-server
echo 'training_completion{course="CKA", status="complete"} 1' > metrics.txt
echo 'training_completion{course="CKS", status="in_progress"} 0.5' >> metrics.txt
echo 'training_completion{course="LPIC2", status="not_started"} 0' >> metrics.txt
curl --data-binary @metrics.txt http://192.168.0.130:9091/metrics/job/training_metrics
# Access metrics
http://localhost:9091
Solo funciona sin autenticación básica
echo "Downloading Promlens..."
wget -q https://github.com/prometheus/promlens/releases/download/v0.3.0/promlens-0.3.0.linux-amd64.tar.gz
echo "Extracting Promlens..."
tar xvfz promlens-*.*-amd64.tar.gz
rm promlens-*.*-amd64.tar.gz
cd promlens-*.*-amd64 || exit
echo "Starting Promlens..."
pm2 start promlens --name promlens -- --web.listen-address "192.168.0.130:8081"
cd || exit
# Access query builder
http://192.168.0.130:8081
Para más información sobre Alertmanager acceda a la documentación oficial:
https://github.com/prometheus/alertmanager
Las contribuciones son las que hacen de la comunidad de código abierto un lugar increíble para aprender, inspirar y crear. Cualquier contribución que hagas esapreciado enormemente.
Si tiene alguna sugerencia que pueda mejorar esto, bifurque el repositorio y cree una solicitud de extracción. También puedes simplemente abrir un problema con la etiqueta "mejora". ¡No olvides darle una estrella al proyecto! ¡Gracias de nuevo!
- Bifurcar el proyecto
- Crea tu rama de funciones (
git checkout -b feature/AmazingFeature
) - Confirme sus cambios (
git commit -m 'Add some AmazingFeature'
) - Empujar a la rama (
git push origin feature/AmazingFeature
) - Abrir una solicitud de extracción
Distribuido bajo la licencia MIT. VerLICENSE
para más información.
- Marcos Silvestrini -@mrsilvestrini
- [email protected]
Enlace del proyecto:https://github.com/marcossilvestrini/learning-observability