Skip to content

Latest commit

 

History

History
732 lines (497 loc) · 24.8 KB

README.es.md

File metadata and controls

732 lines (497 loc) · 24.8 KB

Create ReleaseGenerate HTMLSlack Notification

ContributorsForksStargazersIssuesMIT LicenseLinkedIn


observability

Learning Observability

Project for learning about Learning Observability.
Explore the docs »

Project Page - Report Bug - Request Feature


Table of Contents
  1. About The Project
  2. Getting Started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

Sobre el proyecto

Este proyecto es para aprender sobre la observabilidad.

(back to top)


Construido con

  • Github
  • GNULinux
  • Windows
  • Bash
  • Powershell
  • Kubernetes

(back to top)


Empezando

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

Requisitos previos

  • Sistema Linux arriba
  • Clúster Kubernetes arriba
  • git

Instalación

Clonar el repositorio

git clone https://github.com/marcossilvestrini/learning-observability.git
cd learning-observability || exit

(back to top)


Uso

Publico algunos ejemplos para su uso en este repositorio.

(back to top)


Mapa vial

  • 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).

(back to top)


Prometeo

prometheus

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/

Nombres y etiquetas de métricas

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"}

Tipos de métricas

Metrics Type

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).

Trabajos e instancias

Jobs

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.

Especificación de escritura remota de Prometheus

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.

Remitentes y receptores compatibles

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")

promql

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.

Ejemplos de consulta

federation

La federación permite que un servidor Prometheus extraiga series temporales seleccionadas de otro servidor Prometheus.

Federación Jerárquica

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.

federation-hierarchical

Federación de servicios cruzados

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.

cross-service-federation

Descubrimiento de servicios HTTP

http_sd

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

Ejemplo usando http sd_file

http_file_sd

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"
        }
    }    
]

Instalar Prometeo

# 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

Configurar Prometeo

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"]

Iniciar Prometeo

# Start
./prometheus --config.file=prometheus.yml

# Start with PM2 - npm install pm2@latest -g
pm2 start prometheus --name prometheus-server -- --config.file=prometheus.yml

Puntos finales importantes

http://localhost:9090 # all endpoints
http://localhost:9090/graph # PromQL expressions
http://localhost:9090/metrics # metrics
http://localhost:9090/targets # scrape_configs jobs

Usando el navegador de expresiones

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])

Exportadores de Prometeo

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.

Exportador de nodos

Prometheus Node Exporter expone una amplia variedad de métricas relacionadas con el hardware y el kernel.

Exportador de nodos de instalación
# 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
Iniciar exportador de nodos
# Start
./node_exporter

# Start with PM2 - npm install pm2@latest -g
pm2 start node_exporter --name node_exporter
Exportador de nodos de terminales
# Access metrics
http://localhost:9100/metrics
Configurar el exportador de nodos

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.


PushGateway

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í.

Install PushGateway

# 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"

Configurar PushGateway

# 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

Crear métricas para la puerta de enlace de prueba

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
Puntos finales PushGateway
# Access metrics
http://localhost:9091

Utilice PromQL para encontrar el objetivo de pushgateway de métricas

promql-pushgateway

prolens

Instalar Promlens

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

Puntos finales de Promlens

# Access query builder
http://192.168.0.130:8081

promlens


Administrador de alertas

alertmanager

Para más información sobre Alertmanager acceda a la documentación oficial:
https://github.com/prometheus/alertmanager

(back to top)


Grafana


Grafana Loki


Hora de Grafana


Aleación de Grafana

(back to top)


Contribuyendo

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!

  1. Bifurcar el proyecto
  2. Crea tu rama de funciones (git checkout -b feature/AmazingFeature)
  3. Confirme sus cambios (git commit -m 'Add some AmazingFeature')
  4. Empujar a la rama (git push origin feature/AmazingFeature)
  5. Abrir una solicitud de extracción

(back to top)


Licencia

Distribuido bajo la licencia MIT. VerLICENSEpara más información.

(back to top)


Contacto

Enlace del proyecto:https://github.com/marcossilvestrini/learning-observability

(back to top)


Expresiones de gratitud

(back to top)