Resumen de uso simple de las soluciones de monitoreo más utilizadas Prometheus + Grafana

prefacio

​ Prometheus es un conjunto de herramientas de monitoreo y alerta de sistemas de código abierto desarrollado en lenguaje GO . Fue lanzado originalmente por SoundCloud en 2012 y luego fue utilizado por muchas grandes empresas y organizaciones. Se unió a Cloud Native Computing Foundation en 2016. Foundation, CNCF) , y se graduó en 2018, ahora es un proyecto de código abierto independiente y se mantiene independientemente de cualquier empresa.

​ Prometheus es una muy buena herramienta de monitoreo, para ser precisos, es una solución de monitoreo. Prometheus proporciona un conjunto completo de soluciones de monitoreo para monitorear la recopilación de datos, el almacenamiento, la visualización del procesamiento y las alarmas.

​ Grafana es una herramienta de visualización y análisis de medición multiplataforma de código abierto que admite múltiples fuentes de datos, como Prometheus, Elasticsearch, InfluxDB, etc. Proporciona una gran cantidad de gráficos y paneles visuales que pueden ayudar a los usuarios a comprender y analizar mejor los datos de monitoreo.

Prometheus en sí tiene una interfaz de usuario web para mostrar gráficos de datos, pero es un poco tosca, y Grafana puede admitir la producción y visualización de hermosos gráficos, y es compatible con Prometheus, por lo que la solución de monitoreo clásica es Prometheus + Grafana.

1. Concepto

1.1 Desarrollo

El desarrollo de la supervisión de la operación y el mantenimiento se remonta a las primeras etapas de la tecnología informática. Con el desarrollo continuo de la tecnología informática, el monitoreo de operación y mantenimiento también está en constante evolución y mejora.

  • El monitoreo inicial de O&M se realizó principalmente mediante la verificación manual de los registros del sistema y las métricas de rendimiento, lo que requería mucho tiempo y era propenso a errores.
  • Con el continuo desarrollo de la tecnología informática, han aparecido algunas herramientas de monitorización basadas en el protocolo SNMP, como Nagios, Zabbix, etc. Estas herramientas pueden recopilar automáticamente registros del sistema e indicadores de rendimiento, analizarlos y procesarlos para ayudar a los usuarios a comprender mejor el estado operativo del sistema.
  • En los últimos años, con el desarrollo continuo de la computación en la nube y la tecnología de contenedores, el monitoreo de operación y mantenimiento también está en constante evolución y mejora. Por ejemplo, Prometheus es un sistema de monitoreo de código abierto basado en tecnología nativa de la nube, que puede ayudar a los usuarios a administrar y monitorear mejor las aplicaciones nativas de la nube.

En resumen, con el desarrollo continuo de la tecnología informática, el monitoreo de operación y mantenimiento también está en constante evolución y mejora. Desde la inspección manual inicial hasta las herramientas de monitoreo basadas en el protocolo SNMP, hasta las herramientas automáticas actuales de monitoreo de operación y mantenimiento, el monitoreo de operación y mantenimiento proporciona usuarios con un mejor servicio y soporte.

1.2 Datos de series temporales

Datos de series temporales, es decir, datos de series temporales (Time Series Data), datos registrados e indexados por orden de dimensión temporal. Varios tipos de equipos en campos como el Internet de las cosas, el Internet de los vehículos y el Internet industrial generarán cantidades masivas de datos de series temporales, que representarán más del 90 % del total de datos del mundo. En la plataforma de monitoreo, los datos de series temporales a menudo se refieren a datos secuenciales con marcas de tiempo, como indicadores de rendimiento del sistema e información de registro.

La comparación entre los datos de series temporales y los datos relacionales tradicionales, los datos de series temporales se centran en CR en CRUD, sin U

1.3 Métrica

Métrica (medida, indicador) es un concepto muy importante, aparece con mucha frecuencia en el monitoreo de operación y mantenimiento, se refiere a indicadores en el sistema de monitoreo, como uso de CPU, uso de memoria, tráfico de red, etc. a Existe un registro en la base de datos.

Se puede dividir en 4 tipos en el cliente Prometheus

  • Contador: una métrica acumulativa que representa un contador que aumenta monótonamente cuyo valor solo se puede aumentar o restablecer a cero en un reinicio. Por ejemplo, puede usar contadores para representar el número de solicitudes atendidas, tareas completadas o errores.
  • Calibre: un valor único que puede fluctuar arbitrariamente. Los medidores generalmente se usan para valores medidos, como la temperatura o el uso actual de la memoria, pero también se usan para "recuentos" que pueden fluctuar hacia arriba y hacia abajo, como la cantidad de solicitudes simultáneas.
  • Histograma: Histograma, que representa los resultados estadísticos del muestreo de datos durante un período de tiempo, y la distribución de las muestras se cuenta por agrupamiento. Por ejemplo, cuente el tiempo que consume la interfaz, cuántas solicitudes caen en 10ms - 20ms, cuántas solicitudes caen en 20ms - 30ms, etc.
  • Resumen: similar al histograma, el percentil se calcula en función de la muestra. Por ejemplo, estadísticas de consumo de tiempo de enlace, TP99, TP95, etc.

2. Prometeo

2.1 Arquitectura

  • Servidor Prometheus : use el mecanismo de detección de servicios para obtener el objetivo que debe monitorearse y extraiga los datos del indicador del objetivo a través del método Pull. De acuerdo con la regla definida, los datos del indicador se pueden calcular nuevamente por adelantado y el disparador la alarma se envía al componente alertmanager para su recopilación y procesamiento Almacene datos de series temporales.

  • PushGateway : cada host de destino puede informar datos a PushGateway, y luego el servidor Prometheus extrae los datos de PushGateway de manera uniforme.

  • Exportadores : Recopile indicadores de monitoreo de servicios de terceros existentes y exponga métricas. Prometheus admite una variedad de exportadores, a través de los cuales se pueden recopilar y enviar datos de métricas al servidor de Prometheus.

  • Alertmanager : el componente envía las notificaciones correspondientes según el modo de alarma de la alarma. Una vez recibidas las alertas del servidor de Prometheus, se desduplicarán, agruparán y enrutarán al receptor correspondiente y se emitirá una alarma. Los métodos de recepción comunes son: correo electrónico, WeChat, DingTalk, slack, etc.

  • Grafana : componente de visualización de datos, tablero de monitoreo, consulta de datos de Prometheus Server a través de PromQL y visualización

  • Interfaz de usuario web de Prometheus : consola web simple, puerto predeterminado 9090

2.2 Configuración

Prometheus puede cargar archivos de configuración a través de la opción de comando --config.file.

Cuando --web.enable-lifecycle está habilitado, se puede enviar una solicitud POST a través de la URL /-/reload para cargar el archivo de configuración sin reiniciar Prometheus

Documento de configuración: https://prometheus.io/docs/prometheus/latest/configuration/configuration/ , las siguientes son 4 categorías de configuración de uso común

  • global

    Configure la información global, como el intervalo de datos de monitoreo, el período de tiempo de espera comercial, el ciclo de ejecución de la regla de alarma, etc.

    • scrape_interval El intervalo de tiempo predeterminado para extraer objetivos, el valor predeterminado es 1m
    • scrape_timeout tiempo de espera de extracción, predeterminado 10s
    • Evaluation_interval ejecuta el intervalo de reglas, el valor predeterminado es 1m
  • archivos_de_reglas

    Contiene dos archivos de reglas: regla de registro y regla de alarma.

    • reglas de registro

      Las reglas de registro permiten que las expresiones que a menudo son necesarias o costosas de calcular se calculen previamente y sus resultados se guarden como un nuevo conjunto de series temporales. Consultar resultados precalculados suele ser mucho más rápido que ejecutar la expresión original cada vez que se necesita. Esto es especialmente útil para tableros que necesitan consultar la misma expresión repetidamente en cada actualización.

      Documentación: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/

    • Reglas de alerta

      Defina condiciones de alerta basadas en PromQL y envíe notificaciones a servicios externos sobre alertas activadas.

      Documentación: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/

  • alertando

    Administrador de alertas de gestión de configuración

  • scrape_configs

    Configure el trabajo del nodo de extracción de datos, documento: https://prometheus.io/docs/prometheus/latest/configuration/configuration/#scrape_config

    • nombre_trabajo nombre del trabajo
    • scrape_interval frecuencia de rastreo, predeterminado globa.scrape_interval
    • scrape_timeout tiempo de espera de rastreo, predeterminado globa.scrape_timeout
    • metrics_path ruta de captura, predeterminado /metric
    • dirección URL de destino de rastreo de static_configs

2.3 Lenguaje de consulta PromQL

Prometheus proporciona un lenguaje de consulta funcional llamado PromQL (Prometheus Query Language), que permite a los usuarios seleccionar y agregar datos de series temporales en tiempo real.Dirección del documento: https://prometheus.io/docs/prometheus/latest/querying/basics/

  • consulta de filtro

    Use {} para filtrar los resultados. El valor de la etiqueta interna puede usar = para indicar igualdad, != para indicar desigualdad, =~ para indicar una coincidencia regular y !~ para indicar una discrepancia regular

    http_requests_total{
          
          method="GET"}
    http_requests_total{
          
          environment=~"staging|testing|development",method!="GET"}
    http_requests_total{
          
          status!~"4.."}
    
  • consulta de rango de tiempo

    Se puede seleccionar por [valor de tiempo], por ejemplo

    http_requests_total [5m]
    
  • Consulta de tiempo de compensación

    offset permite cambiar el desplazamiento de tiempo de vectores instantáneos individuales y vectores de rango en una consulta. Por ejemplo, el número total de solicitudes http en los últimos 5 minutos

    http_requests_total offset 5m
    
  • consulta de tiempo fijo

    @ permite cambiar el tiempo de cálculo de vectores instantáneos individuales y vectores de rango en la consulta. El tiempo proporcionado al modificador @ es una marca de tiempo de Unix representada como un número de punto flotante

    Por ejemplo: devolver el valor en 2021-01-04T07:40:00+00:00

    http_requests_total @ 1609746000
    
  • consulta de agregación

    Prometheus proporciona sum, max, min, avg, count, bottomk, topk y otros comandos de agregación para consultar datos

    sum(http_requests_total)
    sum by (application, group) (http_requests_total)
    topk(5, http_requests_total)
    
  • consulta de función

    Prometheus proporciona funciones para participar en la computación de datos de consulta, documento: https://prometheus.io/docs/prometheus/latest/querying/functions/

    rate(http_requests_total[5m])[30m:1m]
    

2.4 Exportador

Prometheus obtiene datos a través de Exporter, que se puede descargar e instalar a pedido según el enlace del documento: https://prometheus.io/docs/instrumenting/exporters/

3. Grafaná

3.1 Fuente de datos

grafana_datasource_01.png

3.2 Permisos

Grafana proporciona un sistema de permisos que permite a los usuarios tener diferentes permisos según los diferentes roles, como visualización de paneles, edición, etc.

Hay tres tipos de permisos: administrador, espectador, editor

Los usuarios se pueden agregar invitando a los usuarios y enviando enlaces a los usuarios, y se les puede notificar a través de grupos para ver el control de permisos del panel.

3.3 Visualización de paneles

Documentación relacionada: https://grafana.com/docs/grafana/latest/panels-visualizations/

  • expresión de consulta de panel

    grafana_03_create-panel_consulta.png

  • Tipo de panel

    El más común es Graph, se pueden descargar e importar más tipos desde el sitio web oficial, preste atención a la próxima versión

    grafana_04_tipo_panel.png

  • parámetros del panel

    Si el parámetro del eje y es un porcentaje, se puede controlar de la siguiente manera

    grafana_05_panel_percent.png

3.4 Tablero

La integración de los múltiples paneles anteriores es el tablero

  • importar

    Además de personalizar los paneles, también puedes usar los paneles hechos por otros https://grafana.com/grafana/dashboards/ , importar a través del menú Importar

  • Controlar

    • El panel de visualización puede agregar parámetros a través de la barra lateral y el menú superior de url y quiosco

    • acceso anonimo

      Modifique el archivo de configuración conf/defaults.ini

      [auth.anonymous]
      # 设置为true即可匿名访问,不用登陆就可以直接访问url
      enabled = true
      
    • Anidamiento permitido

      Modifique el archivo de configuración conf/defaults.ini

      # 设置为true即可嵌套
      allow_embedding = true
      
  • variable

    La lista desplegable se puede implementar a través de variables para seleccionar la parte que desea mostrar: Documentación: https://grafana.com/docs/grafana/latest/dashboards/variables/

Cuatro, combate real

4.1 Supervisar Windows/Linux

ventanas: Exportador de descargas https://github.com/prometheus-community/windows_exporter/releases

Linux: Descargar https://github.com/prometheus/node_exporter/releases

Tomemos las ventanas como ejemplo.

windows_exporter.exe --collectors.enabled "[defaults],process,container"
windows_exporter.exe --config.file config.yml

grafana_02_ventanas.png

elemento de seguimiento

Indicadores de seguimiento expresión
uso de CPU 100 - (promedio por (instancia, región) (irate(windows_cpu_time_total{mode=“idle”}[2m])) * 100)
uso de memoria 100-(windows_os_physical_memory_free_bytes/windows_cs_physical_memory_bytes)*100
uso total del disco (sum(windows_logical_disk_size_bytes{volume!~“Harddisk. "}) por (instancia) - sum(windows_logical_disk_free_bytes{volume!~"Harddisk. ”}) by (instancia)) / sum(windows_logical_disk_size_bytes{volume!~"Harddisk. "} ) por (instancia) *100
Uso de disco individual 100- 100 * (windows_logical_disk_free_bytes/windows_logical_disk_size_bytes)
banda ancha (suma(irate(windows_net_bytes_total[1m])) > 1)* 8
subproceso del sistema windows_system_threads
proceso del sistema windows_os_processes

4.2 Supervisión de JVM

Exportador de descargas: https://github.com/prometheus/jmx_exporter/releases

java -javaagent:jmx_prometheus_javaagent-0.18.0.jar=12345:config.yml -jar vhr-web-0.0.1-SNAPSHOT.jar
rules:
- pattern: ".*"

grafana_06_panel_jvm.png

Indicadores de seguimiento expresión
uso de la memoria del montón jvm jvm_memory_bytes_used{area="montón"}
Uso del área del Edén jvm_memory_pool_bytes_used{pool=“PS Eden Space”}
Antiguo uso de la zona jvm_memory_pool_bytes_used{pool=“PS de generación anterior”}
Uso del metaespacio jvm_memory_pool_bytes_used{pool=“Metaespacio”}
tiempo aumentar (jvm_gc_coleccion_segundos_sum[$__intervalo])
tiempos de crecimiento gc aumentar (jvm_gc_collection_seconds_count[$__interval])

4.3 Monitoreo de MySQL

https://github.com/prometheus/mysqld_exporter/releases

mysqld_exporter.exe --config.my-cnf config.cnf --web.listen-address=localhost:9104
[client]
user=root
password=

grafana_08_mysql_01.png

Indicadores de seguimiento expresión
Conexiones sum(max_over_time(mysql_global_status_threads_connected[$__interval]))
Número de consultas lentas sum(tasa(mysql_global_status_slow_queries[$__interval]))
Número promedio de subprocesos en ejecución sum(avg_over_time(mysql_global_status_threads_running[$__interval]))
QPS actual tarifa(mysql_global_status_queries[$__intervalo])

4.4 Supervisión de la API de Springboot

A veces, en el proyecto Springboot, es necesario contar la cantidad de llamadas y los tiempos de llamada de la interfaz API. Puede usar actuador + micrómetro, y se han incorporado dos anotaciones integradas para realizar ambas funciones. Debido a que se usa aop, el paquete aop necesita ser importado

Documentación: https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.enable

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
management:
  metrics:
    tags:
      application: ${
    
    spring.application.name}
    web:
      server:
        max-uri-tags: 200
  endpoints:
    web:
      exposure:
        include: prometheus

spring:
  application:
    name: prometheus-test-api
@Bean
public TimedAspect timedAspect(MeterRegistry registry) {
    
    
	return new TimedAspect(registry);
}
@GetMapping("/test")
@Timed(value = "test_method",description = "测试接口耗时")
@Counted(value = "test_method", description = "测试接口次数")
public String test() {
    
    
    //try {
    
    
    //    Thread.sleep(1000);
    //} catch (InterruptedException e) {
    
    
    //    throw new RuntimeException(e);
    //}
    return "ok";
}

grafana_09_springboot.png

referencia

  1. Prometheus+Grafana construye un completo sistema de monitorización y alarma

Supongo que te gusta

Origin blog.csdn.net/qq_23091073/article/details/130884263
Recomendado
Clasificación