Directorio de artículos
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.
-
Sitio web oficial: https://prometheus.io/
-
dirección de github: https://github.com/prometheus/prometheus
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.
- Dirección del documento: https://grafana.com/docs/grafana/latest/
- dirección de github: https://github.com/grafana/grafana
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
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
-
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
-
parámetros del panel
Si el parámetro del eje y es un porcentaje, se puede controlar de la siguiente manera
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
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: ".*"
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=
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";
}