1. Introducción al medio ambiente
El entorno de este artículo y la base de datos utilizada en este artículo sonGreatSQL 8.0.32-24
$ cat /etc/system-release
Red Hat Enterprise Linux Server release 7.9 (Maipo)
$ uname -a
Linux gip 3.10.0-1160.el7.x86_64 #1 SMP Tue Aug 18 14:50:17 EDT 2020 x86_64 x86_64 x86_64 GNU/Linux
$ ldd --version
ldd (GNU libc) 2.17
En el artículo anterior [Imagen y texto combinados | Prometheus + Grafana + GreatSQL Guía de construcción del sistema de monitoreo de rendimiento (Parte 1)], presentamos cómo construir un sistema de monitoreo. Este artículo presentará cómo usar la plataforma Grafana y la función de alarma de el módulo AlertManager.
2. Alerta por correo electrónico de Grafana
Aquí tomamos alertas por correo electrónico y usamos el buzón QQ como ejemplo.
1. Habilite el servicio de correo electrónico
Después de iniciar sesión en su buzón QQ, haga clic en Configuración->Cuenta->Habilitar servicio POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV.
Ya lo he activado. Si no está activado, puedes activarlo. Luego haz clic en , 生成授权码
recuerda guardar el código de autorización y luego modifica la configuración del correo electrónico de Grafana.
$ vim /usr/local/prometheus/grafana-10.1.1/conf/defaults.ini
Utilice /smtp
el área donde se encuentra la configuración de correo y modifíquela como se muestra en el siguiente ejemplo.
Reinicie el servicio Grafana
$ systemctl restart grafana-server.service
A continuación, inicie sesión en la página web de Grafana http://172.17.137.104:3000/
y agregue una alerta por correo electrónico.
Complete Name
, Addresses
espere la información y haga clic en Test
Probar
Puede ver que se recibió el correo electrónico y que la prueba fue exitosa.
2. Agregar reglas de alarma
Se pueden agregar reglas de alerta en Grafana. Por ejemplo, creé una conexión GreatSQL. Monitorea este mysql_up
valor. Si es 0, no puede conectarse a GreatSQL.
Entrando al panel de edición, podemos ver que hay una Alert
opción de alarma, y luego hacemos clicCreate alert rule from this panel
En este momento, ingresará al panel de configuración de reglas de alarma.
Primero, introduzcamos la primera parte设置警报规则名称
, que consiste en establecer el nombre de la regla de alarma.
(primera parte)
La segunda parte son los datos que mostramos afuera y el Expressions
siguiente paso es configurar las condiciones de alarma.
(la segunda parte)
El primer ítem last()
representa los últimos datos, hay muchas otras opciones como max()
indicar el valor máximo, generalmente elegimoslast()
El segundo ítem es para indicar de qué consulta venimos, porque solo tenemos una así que eligeA
El tercer elemento identifica el valor de activación que queremos monitorear. El juicio de activación es la opción anterior. El de la imagen IS ABOVE
indica arriba de esto. Hay varias otras opciones, como IS BELOW
debajo, IS OUTSIDE RANGE
fuera de rango y IS WITHIN RANGE
dentro de rango. , HAS NO VALPUE
sin valor. Aquí elegimos IS ABOVE
, la síntesis de expresión es: mysql_up
disparar cuando el valor es menor que 1.
La tercera parte es crear la carpeta donde se almacenarán las reglas Folder
y los grupos a evaluar, Evaluation group
las reglas de un mismo grupo se evaluarán de forma secuencial y dentro del mismo intervalo de tiempo.
(la tercera parte)
Lo que Pending period
indica el retraso después de activar la alarma.
La cuarta sección se utiliza para agregar un Summary
resumen de comentarios, un breve resumen de lo que sucedió y por qué, Description
una descripción de la funcionalidad de la regla de alerta y la Runbook URL
URL del runbook. Una página web para guardar el runbook de alertas.
La quinta parte configura las notificaciones, que se utiliza para agregar etiquetas personalizadas para cambiar el método de enrutamiento de las notificaciones. Si no se establece una política coincidente, todas las instancias de alerta son manejadas por la política predeterminada.
Después de hacer clic en la esquina superior derecha para guardar la regla, podrá ver la regla de alarma que acaba de configurar en la página.
3. Pruebe la alerta por correo electrónico
Ahora simule una interrupción de GreatSQL para ver si se activará la regla de alarma y se enviará una alarma por correo electrónico.
$ systemctl stop greatsql
Debido a que lo configuramos en 1 minuto, pasará 1 minuto antes de que se verifique nuevamente el estado de la conexión GreatSQL.
Como puede ver en la imagen a continuación, se ha detectado que GreatSQL no se puede conectar y ha entrado en un estado pendiente.
Después del tiempo de retraso establecido, la pantalla Firing
indica que el correo electrónico ha sido enviado.
Puede ver que el correo electrónico de alarma se ha recibido en el buzón de QQ.
Luego iniciamos GreatSQL nuevamente.
$ systemctl start greatsql
Cuando se complete la solución, recibirá un correo electrónico resuelto.1 resolved instances
3. Alerta DingTalk de Grafana
En artículos anteriores, mencionamos el uso de DingTalk Alert Prometheus + Grafana + DingTalk para implementar un sistema de alarma y monitoreo MySQL independiente , pero el Alertmanager utilizado es el módulo de alarma de Pumi, no Grafana, por lo que aquí presentaremos cómo configurarlo con Grafana. Alerta de DingTalk.
Sin embargo, a partir del 1 de septiembre de 2023, DingTalk ya no admitirá la creación de robots personalizados tanto para grupos internos como no internos . Debe iniciar sesión en el backend de desarrollador de DingTalk y solicitar permisos de desarrollador para crear un robot de aplicación interno. El método específico no lo presentaré aquí. Si lo necesita, puede ir a DingTalk para obtener una introducción detallada.
De acuerdo con el método en Prometheus + Grafana + DingTalk para implementar un sistema de alarma y monitoreo MySQL independienteContact points
, primero cree un robot DingTalk y luego agregue un punto de contacto a Grafana.
A continuación, complete Name
el Integration
cuadro desplegable y busque DingDing
la URL de DingTalk Robot.Webhook:
Message Type
Hay dos opciones, una es el modo de tarjeta, la otra es el modo de enlace, así como el título del título y el mensaje del mensaje. Luego haga clic en Probar para probar y ver si se puede enviar la información de la alarma. En este momento, el robot DingTalk enviará la prueba de alarma. No Si tiene alguna pregunta, haga clic en el botón azul a continuaciónSave contact point
Si deseas elegir alertas de DingTalk, puedes Notification policies
seleccionar en las opcionesEdit
Cámbielo Default contact point
al método de alerta DingTalk, haga clic después de la modificación.Update default policy
A continuación, para realizar pruebas, desactivamos la simulación de GreatSQL para ver si se enviará un mensaje de alarma.
$ systemctl stop greatsql
No hay problema, el mensaje de alarma se recibió correctamente.
4. Alertas por correo electrónico del administrador de alertas
¿Aún recuerdas el Alertmanager que instalamos en el artículo anterior? De hecho, también tiene una función de alarma. Prometheus incluye un módulo de alarma, que es nuestro AlertManager. Alertmanager se utiliza principalmente para recibir información de alarma enviada por Prometheus. Admite una variedad de canales de notificación de alarma y es fácil deduplicar, eliminar ruido, agrupar, etc., la información de alarma. En el artículo anterior, también agregamos algunas reglas. Si lo olvida, puede volver a leer el artículo anterior. Alertmanager también se puede usar para alertar a DingTalk. Hay una introducción a la implementación de un sistema de alarma y monitoreo MySQL independiente en Prometheus. +Grafana+DingTalk. Aquí está. Presentamos la alerta por correo electrónico de Alertmanager
El proceso de Prometeo que activa una alarma
1. Configurar AlertManager
El archivo de configuración predeterminado de AlertManager es alertmanager.yml
y la ruta es. /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
Luego, configuremos el uso del correo electrónico para notificar información de alarma. Aquí, tomamos el buzón QQ como ejemplo. La configuración es la siguiente:
global:
resolve_timeout: 5m
smtp_from: '填写邮箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填写邮箱@qq.com'
smtp_auth_password: '填写QQ邮箱授权码'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '填写邮箱@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
yml tiene requisitos de sangría, verifique cuidadosamente
Una introducción detallada a los parámetros clave:
global
Configuración global, configura principalmente métodos de alarma, como correo electrónico, webhook, etc.
-
resolve_timeout
: Tiempo de espera, predeterminado 5 min. -
smtp_auth_password
: Recuerde el código de autorización del buzón de correo QQ y la contraseña de inicio de sesión de la cuenta que no es QQ -
smtp_require_tls
: Ya sea que utilice tls, puede optar por activarlo o desactivarlo según el entorno. Si se informa un erroremail.loginAuth failed: 530 Must issue a STARTTLS command first
, debe establecerse en verdadero. Es importante tener en cuenta que si tls está habilitado y se informa un errorstarttls failed: x509: certificate signed by unknown authority
, debe configurar insecure_skip_verify: true en email_configs para omitir la verificación de tls.
ruta
Estrategia de distribución utilizada para establecer alertas.
group_by
: Se utiliza para la agregación de grupos. Las notificaciones de alarma se agrupan por etiqueta. Las notificaciones de alarma con la misma etiqueta o el mismo nombre de alarma (nombre de alerta) se agregan en un grupo y luego se envían como una sola notificación. Si desea deshabilitar la agregación por completo, puede configurar group_by: [...]group_wait
: Cuando se crea un nuevo grupo de alarmas, debe esperar 'group_wait' antes de enviar la notificación inicial. Esto garantiza que se puedan agregar más alarmas con la misma etiqueta antes de enviarlas y esperar, y finalmente fusionarlas en una notificación para enviar.group_interval
: Después de enviar la primera notificación de alarma y recibir la última alarma del grupo en el nuevo ciclo de evaluación, debe esperar el tiempo 'group_interval' antes de comenzar a enviar nuevas alarmas activadas para el grupo. Puede entenderse simplemente como, grupo Es equivalente a un canal.repeat_interval
: Después de enviar correctamente la notificación de alarma, si el problema no se ha solucionado, es necesario repetir el intervalo nuevamente.receiver
: Configure el receptor de mensajes de alarma, correspondiente a la configuración siguiente. Por ejemplo, correo electrónico, wechat, slack, webhook y otros métodos de notificación de mensajes de uso común.
receptores
Configurar la información del receptor de información de alarma
to
: Recibir correo electrónico de alertasend_resolved
: Notificación después de la recuperación de fallas
inhibir_reglas
Configuración de regla de supresión que deshabilitará las alertas que coincidan con un conjunto (objetivo) cuando haya alertas que coincidan con otro conjunto (fuente)
Una vez completada la configuración, simplemente reiniciesystemctl restart alertmanager.service
Si el inicio falla, puede solucionarlo usted mismo
journalctl -u alertmanager.service -f
y prestar atención para verificar si hay problemas de sangría.
A continuación, puede configurar las reglas de alerta de AlertManager. También mencionamos esto en el artículo anterior y también creamos una carpeta de reglas para almacenar las reglas, así que simplemente siga el método del artículo anterior.
2. Pruebe la alerta por correo electrónico
A continuación, iniciamos sesión en http://172.17.137.104:9090/rules
Rules of Prometheus para ver si se han agregado varias alarmas.
Aquí hay una descripción del estado de alarma de Alerta Prometheus, que tiene tres estados: Inactive
, Pending
,Firing
Inactive
: Estado inactivo, indica que está siendo monitoreado, pero aún no se ha activado ninguna alarma.Pending
: Indica que esta alarma debe activarse. Dado que las alarmas se pueden agrupar, suprimir/suprimir o silenciar/silenciar, esperan verificación y pasarán al estado Disparo una vez que pasen todas las verificaciones.Firing
: envíe la alerta al AlertManager, que enviará la alerta a todos los destinatarios según lo configurado. Una vez que se borra la alarma, el estado cambia a Inactivo y el ciclo continúa.
A continuación, cerramos GreatSQL para mysql_up = 0
activar la regla de alarma y ver si se enviará un correo electrónico de alarma.
$ systemctl stop greatsql
Después de detener el servicio, la página de alerta 绿色 Inactive
cambia de estado a estado 黄色 Pending
y continúa esperando hasta que cambie a 红色 Firing
estado, enviando así información de alarma a AlertManager. En este momento, AlertManager enviará alertas por correo electrónico a los destinatarios de acuerdo con las reglas de configuración.
AmarilloPendiente
Disparo rojo
Luego recibimos el correo electrónico de advertencia.
Como puede ver en la imagen de arriba, el título y el cuerpo de la plantilla de correo electrónico predeterminado incluirán la información de etiquetas y anotaciones previamente configuradas y se enviarán automáticamente cada 5 minutos hasta que el servicio vuelva a la normalidad y se levante la alarma. Se enviará una alarma. Descartar el mensaje.
Después de que se active la alarma, los correos electrónicos de alarma se enviarán automáticamente cada 5 m (cuando el servicio no se restablezca a la normalidad), lo cual está determinado por la configuración alertmanager.yml
.route -> repeat_interval: 5m
3.Cambiar el contenido del correo electrónico de AlertManager
Este paso no es necesario, si quieres que el contenido del correo electrónico sea más elegante e intuitivo puedes consultarlo.
Aunque se ha incluido toda la información principal, el contenido del formato de correo electrónico puede ser más elegante e intuitivo. AlertManager también admite la modificación de configuraciones de plantillas de correo electrónico personalizadas.
Necesitamos crear un nuevo archivo de plantilla, que se llamaemail.tmpl
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp
Escribe lo siguiente
{{ define "email.from" }}填入邮箱@qq.com{{ end }}
{{ define "email.to" }}填入邮箱@qq.com{{ end }}
{{ define "email.to.html" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range .Alerts }}
<h2>@告警通知</h2>
告警程序: prometheus_alert <br>
告警级别: {{ .Labels.severity }} 级 <br>
告警类型: {{ .Labels.alertname }} <br>
故障主机: {{ .Labels.instance }} <br>
告警主题: {{ .Annotations.summary }} <br>
告警详情: {{ .Annotations.description }} <br>
触发时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }} <br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range .Alerts }}
<h2>@告警恢复</h2>
告警程序: prometheus_alert <br>
故障主机: {{ .Labels.instance }}<br>
故障主题: {{ .Annotations.summary }}<br>
告警详情: {{ .Annotations.description }}<br>
告警时间: {{ .StartsAt.Local.Format "2006-01-02 15:04:05" }}<br>
恢复时间: {{ .EndsAt.Local.Format "2006-01-02 15:04:05" }}<br>
{{ end }}{{ end -}}
{{- end }}
El archivo de plantilla anterior configura tres variables de plantilla email.from
, email.to
y , a las que se puede hacer referencia directamente en el archivo.email.to.html
alertmanager.yml
Aquí email.to.html
está el contenido del correo electrónico que se enviará, que admite formatos HTML y Texto. Para mostrarlo de manera hermosa, se utiliza el formato HTML para mostrar simplemente la información. La siguiente {{ range .Alerts }}
es una sintaxis de bucle, que se utiliza para obtener información de alertas coincidentes en un bucle. La información de alerta a continuación es la misma que la información de visualización de correo electrónico predeterminada anterior, excepto que se extraen algunos valores centrales para su visualización. Luego, debe agregar alertmanager.yml
el archivo templates
de configuración de la siguiente manera:
$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '填入邮箱@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '填入邮箱@qq.com'
smtp_auth_password: '填写QQ邮箱授权码'
smtp_require_tls: false
smtp_hello: 'qq.com'
templates:
- '/usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 5m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '{{ template "email.to" . }}'
html: '{{ template "email.to.html" . }}'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
Luego simulamos una interrupción de GreatSQL para activar la regla de alarma y ver si se envía un correo electrónico de alarma.
No hay problema. He recibido correctamente el correo electrónico de alerta.
Bien, ese es el final de la guía de construcción del sistema de monitoreo de rendimiento Prometheus + Grafana + GreatSQL, comencemos ~
Disfruta de GreatSQL :)
Acerca de GreatSQL
GreatSQL es una base de datos nacional independiente de código abierto adecuada para aplicaciones de nivel financiero. Tiene muchas características principales, como alto rendimiento, alta confiabilidad, alta facilidad de uso y alta seguridad. Puede usarse como un reemplazo opcional de MySQL o Percona Server. y se utiliza en entornos de producción online, completamente gratuito y compatible con MySQL o Percona Server.
Enlaces relacionados: Comunidad GreatSQL Gitee GitHub Bilibili
Gran comunidad SQL:
Sugerencias y comentarios sobre recompensas de la comunidad: https://greatsql.cn/thread-54-1-1.html
Detalles de la presentación del premio del blog comunitario: https://greatsql.cn/thread-100-1-1.html
(Si tiene alguna pregunta sobre el artículo o tiene ideas únicas, puede ir al sitio web oficial de la comunidad para preguntarlas o compartirlas ~)
Grupo de intercambio técnico:
Grupo WeChat y QQ:
Grupo QQ: 533341697
Grupo WeChat: agregue GreatSQL Community Assistant (ID de WeChat:) wanlidbc
como amigo y espere a que el asistente de la comunidad lo agregue al grupo.