Combinando gráficos e texto丨Prometheus+Grafana+GreatSQL guia de construção do sistema de monitoramento de desempenho (Parte 2)

1. Introdução ao meio ambiente

O ambiente deste artigo e o banco de dados usado neste artigo sãoGreatSQL 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

No artigo anterior [Combined Graphics and Text | Prometheus+Grafana+GreatSQL Performance Monitoring System Construction Guide (Parte 1)], apresentamos como construir um sistema de monitoramento. Este artigo apresentará como usar a plataforma Grafana e a função de alarme do o módulo AlertManager.

2. Alerta de e-mail Grafana

Aqui recebemos alertas por e-mail e usamos a caixa de correio QQ como exemplo

1. Habilite o serviço de e-mail

Após fazer login em sua caixa de correio QQ, clique em Configurações->Conta->Ativar serviço POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV

arquivo

Já liguei. Se não estiver ligado, você pode ligá-lo. Em seguida, clique em 生成授权码, lembre-se de salvar o código de autorização e modifique a configuração do e-mail do grafana.

$ vim /usr/local/prometheus/grafana-10.1.1/conf/defaults.ini 

Use /smtpa área onde você encontra as configurações de e-mail e modifique-as conforme mostrado no exemplo abaixo.

arquivo

Reinicie o serviço Grafana

$ systemctl restart grafana-server.service

Em seguida, faça login na página do Grafana http://172.17.137.104:3000/e adicione um alerta por e-mail.

arquivo

Preencha Name, Addressesaguarde as informações e clique em TestTestar

arquivo

Você pode ver que o e-mail foi recebido e o teste foi bem-sucedido.

arquivo

2. Adicione regras de alarme

Regras de alerta podem ser adicionadas no Grafana. Por exemplo, criei uma conexão GreatSQL. Ele monitora esse mysql_upvalor. Se for 0, não pode se conectar ao GreatSQL.

arquivo

Entrando no painel de edição, você pode ver que existe uma Alertopção de alarme, e então clicamosCreate alert rule from this panel

arquivo

Neste momento, você entrará no painel de configuração de regras de alarme.

Primeiro, vamos apresentar a primeira parte设置警报规则名称 , que é definir o nome da regra de alarme.

arquivo

(primeira parte)

A segunda parte são os dados que exibimos externamente, e o Expressionspróximo passo é definir as condições de alarme.

arquivo

(a segunda parte)

O primeiro item last()representa os dados mais recentes. Existem muitas outras opções, como max()indicar o valor máximo. Geralmente, escolhemoslast()

arquivo

O segundo item é indicar de qual consulta viemos, pois só temos uma então escolhaA

O terceiro item identifica o valor do gatilho que queremos monitorar. O julgamento do gatilho é a opção anterior. O da imagem IS ABOVEindica acima disso. Existem várias outras opções, como IS BELOWabaixo, IS OUTSIDE RANGEfora do intervalo e IS WITHIN RANGEdentro do intervalo. , HAS NO VALPUEsem valor. Aqui escolhemos IS ABOVE, a síntese da expressão é: mysql_upacionar quando o valor for menor que 1.

A terceira parte é criar a pasta onde serão armazenadas as regras Foldere os grupos a serem avaliados. Evaluation groupAs regras do mesmo grupo serão avaliadas sequencialmente e no mesmo intervalo de tempo.

arquivo

(a terceira parte)

O que Pending periodindica o atraso após acionar o alarme

A quarta seção é usada para adicionar um Summaryresumo de comentários, um breve resumo do que aconteceu e por que, Descriptionuma descrição da funcionalidade da regra de alerta e a Runbook URLURL do runbook. Uma página da Web para salvar o runbook de alerta.

arquivo

A quinta parte configura notificações,que são usadas para adicionar rótulos personalizados para alterar o método de roteamento das notificações.Se nenhuma política correspondente for definida,todas as instâncias de alerta serão tratadas pela política padrão.

arquivo

Após clicar no canto superior direito para salvar a regra, você poderá ver a regra de alarme que acabou de definir na página.

arquivo

3. Alerta de e-mail de teste

Agora simule uma interrupção do GreatSQL para ver se a regra de alarme será acionada e um alarme por e-mail será enviado.

$ systemctl stop greatsql

Como definimos para 1 minuto, levará 1 minuto antes que o status da conexão GreatSQL seja verificado novamente.

Como você pode ver na imagem abaixo, foi detectado que o GreatSQL não pode ser conectado e entrou em estado pendente.

arquivo

Após o tempo de atraso definido, o display Firingindica que o e-mail foi enviado.

arquivo

Você pode ver que o e-mail de alarme foi recebido na caixa de correio QQ.

arquivo

Então iniciamos o GreatSQL novamente

$ systemctl start greatsql

Quando a solução for concluída, você receberá um e-mail resolvido.1 resolved instances

arquivo

3. Alerta DingTalk do Grafana

No artigo anterior, mencionei o uso do DingTalk Alert Prometheus+Grafana+DingTalk para implantar um sistema autônomo de monitoramento e alarme MySQL , mas o Alertmanager usado é o módulo de alarme do Pumi, não o Grafana, então aqui está uma introdução sobre como configure-o com alerta Grafana.DingTalk.

No entanto, a partir de 1º de setembro de 2023, o DingTalk não oferecerá mais suporte à criação de robôs personalizados para grupos não internos e grupos internos.Você precisa fazer login no back-end do desenvolvedor DingTalk e solicitar permissões de desenvolvedor para criar um robô de aplicativo interno . O método específico é que não vou apresentá-lo aqui. Se precisar, você pode acessar o DingTalk para uma introdução detalhada.

De acordo com o método Prometheus+Grafana+DingTalk para implantar um sistema autônomo de monitoramento e alarme MySQLContact points , primeiro crie um robô DingTalk e, em seguida, adicione um ponto de contato ao Grafana.

arquivo

Em seguida, preencha Namea Integrationcaixa suspensa e encontre DingDinga URL do DingTalk Robot.Webhook:

arquivo

Message TypeExistem duas opções, uma é o modo cartão, a outra é o modo link, bem como o título do título e a mensagem da mensagem. Em seguida, clique em Testar para testar se as informações do alarme podem ser enviadas. Neste momento, o robô DingTalk enviaremos o teste de alarme. Não Se tiver alguma dúvida clique no botão azul abaixoSave contact point

arquivo

Se quiser escolher alertas DingTalk, você pode Notification policiesselecionar nas opçõesEdit

arquivo

Mude Default contact pointpara o método de alerta DingTalk, clique após a modificação.Update default policy

arquivo

A seguir, para teste, desligamos a simulação GreatSQL para ver se uma mensagem de alarme será enviada.

$ systemctl stop greatsql

arquivo

Não tem problema, a mensagem de alarme foi recebida com sucesso

4. Alertas de e-mail do Alertmanager

Você ainda se lembra do Alertmanager que instalamos no último artigo? Na verdade, ele também possui uma função de alarme. O Prometheus inclui um módulo de alarme, que é nosso AlertManager. O Alertmanager é usado principalmente para receber informações de alarme enviadas pelo Prometheus. Ele oferece suporte a uma variedade de canais de notificação de alarme e é fácil de desduplicar, eliminar ruído, agrupar, etc., as informações de alarme. No artigo anterior, também adicionamos algumas regras. Se você esquecer, pode reler o artigo anterior. O Alertmanager também pode ser usado para alertar o DingTalk. Há uma introdução à implantação de um sistema de monitoramento e alarme MySQL independente no Prometheus +Grafana+DingTalk. Aqui está. Apresentando o alerta por e-mail do Alertmanager

O processo do Prometheus acionando um alarme

arquivo

1. Configurar AlertManager

O arquivo de configuração padrão do AlertManager é alertmanager.ymle o caminho é. /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/alertmanager.ymlEm seguida, vamos configurar o uso do e-mail para notificar informações de alarme. Aqui, tomamos a caixa de correio QQ como exemplo. A configuração é a seguinte:

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 tem requisitos para indentação, verifique com atenção

Uma introdução detalhada aos principais parâmetros:

global

Configuração global, configura principalmente métodos de alarme, como email, webhook, etc.

  • resolve_timeout: Tempo limite, padrão 5min

  • smtp_auth_password: Lembre-se do código de autorização da caixa de correio QQ e da senha de login da conta que não é QQ

  • smtp_require_tls: Se deseja usar tls, você pode optar por ativá-lo ou desativá-lo dependendo do ambiente. Se um erro for relatado email.loginAuth failed: 530 Must issue a STARTTLS command first, ele precisará ser definido como verdadeiro. É importante observar que se o tls estiver habilitado e um erro for relatado starttls failed: x509: certificate signed by unknown authority, você precisará configurar insecure_skip_verify: true em email_configs para pular a verificação do tls.

rota

Estratégia de distribuição usada para definir alertas

  • group_by: usado para agregação de grupo. Notificações de alarme são agrupadas por rótulo. Notificações de alarme com o mesmo rótulo ou o mesmo nome de alarme (alertname) são agregadas em um grupo e depois enviadas como uma notificação. Se quiser desabilitar completamente a agregação você pode definir group_by: [...]
  • group_wait: Quando um novo grupo de alarmes é criado, ele precisa aguardar 'group_wait' antes de enviar a notificação inicial. Isso garante que mais alarmes com o mesmo rótulo possam ser agregados antes do envio e da espera e, finalmente, mesclados em uma notificação para envio.
  • group_interval: Após o envio da primeira notificação de alarme, e o último alarme do grupo ser recebido no novo ciclo de avaliação, é necessário aguardar o tempo 'group_interval' antes de começar a enviar novos alarmes acionados para o grupo. Isso pode ser entendido de forma simples como, grupo É equivalente a um canal.
  • repeat_interval: Após o envio bem-sucedido da notificação de alarme, se o problema não tiver sido recuperado, o intervalo deverá ser repetido novamente.
  • receiver: Configure o receptor de mensagens de alarme, correspondente à configuração abaixo. Por exemplo, e-mail, wechat, slack, webhook e outros métodos de notificação de mensagens comumente usados.

receptores

Configurar informações do receptor de informações de alarme

  • to: Receber e-mail de alerta
  • send_resolved: Notificação após recuperação de falha

inibir_rules

Configuração de regra de supressão que desabilitará alertas correspondentes a um conjunto (destino) quando houver alertas correspondentes a outro conjunto (origem)

Após a configuração ser concluída, basta reiniciarsystemctl restart alertmanager.service

Se a inicialização falhar, você mesmo poderá solucionar o problema journalctl -u alertmanager.service -fe preste atenção para verificar se há problemas de indentação!

A seguir você pode configurar as regras de alerta do AlertManager, também mencionamos isso no artigo anterior, e também criamos uma pasta de regras para armazenar as regras, basta seguir o método do artigo anterior.

2. Alerta de e-mail de teste

A seguir, fazemos login nas http://172.17.137.104:9090/rulesRegras do Prometheus para ver se vários alarmes foram adicionados.

arquivo

Aqui está uma descrição do status do alarme do Alerta Prometheus, que possui três estados: Inactive, Pending,Firing

  • Inactive: Status inativo, indicando que está sendo monitorado, mas nenhum alarme foi disparado ainda.
  • Pending: Indica que este alarme deve ser acionado. Como os alarmes podem ser agrupados, suprimidos/suprimidos ou silenciados/silenciados, eles aguardam verificação e passarão para o estado de disparo assim que todas as verificações forem aprovadas.
  • Firing: Envie o alerta para o AlertManager, que enviará o alerta para todos os destinatários conforme configurado. Assim que o alarme for eliminado, o status será alterado para Inativo e o ciclo continuará.

arquivo

A seguir, fechamos o GreatSQL para mysql_up = 0acionar a regra de alarme e ver se um e-mail de alarme será enviado.

$ systemctl stop greatsql

Após interromper o serviço, a página de alerta 绿色 Inactivemuda de status para status 黄色 Pendinge continua aguardando até que mude para 红色 Firingstatus, enviando assim informações de alarme ao AlertManager. Neste momento, o AlertManager enviará alertas por e-mail aos destinatários de acordo com as regras de configuração.

arquivo

AmareloPendente

arquivo

Disparo Vermelho

Então recebemos o e-mail de aviso

arquivo

Como você pode ver na imagem acima, o modelo de e-mail padrão Título e Corpo incluirá as informações de Etiquetas e Anotações configuradas anteriormente e será enviado automaticamente a cada 5m até que o serviço volte ao normal e o alarme seja acionado. Ao mesmo tempo, um alarme será enviado. Ignore a mensagem.

arquivo

Após o alarme ser acionado, os e-mails de alarme serão enviados automaticamente a cada 5m (quando o serviço não for restaurado ao normal), o que é determinado pela configuração alertmanager.yml.route -> repeat_interval: 5m

3.Alterar o conteúdo do e-mail do AlertManager

Esta etapa não é necessária. Se quiser que o conteúdo do e-mail seja mais elegante e intuitivo, você pode consultá-la.

Embora todas as informações básicas tenham sido incluídas, o conteúdo do formato de e-mail pode ser mais elegante e intuitivo. O AlertManager também suporta a modificação de configurações personalizadas de modelos de e-mail.

Precisamos criar um novo arquivo de modelo, chamadoemail.tmpl

$ vim /usr/local/prometheus/alertmanager-0.26.0.linux-amd64/email.tmp

Escreva o seguinte

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

O arquivo de modelo acima configura três variáveis ​​de modelo email.from, email.to, e , que podem ser referenciadas diretamente no arquivo.email.to.htmlalertmanager.yml

Aqui email.to.htmlestá o conteúdo do e-mail a ser enviado, que suporta os formatos HTML e Texto. Para exibi-lo de maneira bonita, o formato HTML é usado para simplesmente exibir as informações. A seguir {{ range .Alerts }}está uma sintaxe de loop, que é usada para obter informações de alerta correspondentes em um loop. As informações de alerta abaixo são iguais às informações de exibição de e-mail padrão acima, exceto que alguns valores principais são extraídos para exibição. Então, você precisa adicionar alertmanager.ymla templatesconfiguração do arquivo da seguinte forma:

$ 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']

Em seguida, simulamos a interrupção do GreatSQL, acionamos a regra de alarme e verificamos se um e-mail de alarme é enviado.

arquivo

Não tem problema. Recebi o e-mail de alerta com sucesso.

Ok, esse é o fim do guia de construção do sistema de monitoramento de desempenho Prometheus + Grafana + GreatSQL, vamos começar ~


Aproveite o GreatSQL :)

Sobre GreatSQL

GreatSQL é um banco de dados doméstico independente de código aberto adequado para aplicativos de nível financeiro. Possui muitos recursos básicos, como alto desempenho, alta confiabilidade, alta facilidade de uso e alta segurança. Ele pode ser usado como um substituto opcional para MySQL ou Percona Server para ambientes de produção online., totalmente gratuito e compatível com MySQL ou Percona Server.

Links relacionados: Guia da comunidade GreatSQL GitHub Bilibili

Comunidade GreatSQL:

imagem

Sugestões e feedback de recompensas da comunidade: https://greatsql.cn/thread-54-1-1.html

Detalhes do envio do prêmio do blog da comunidade: https://greatsql.cn/thread-100-1-1.html

(Se você tiver alguma dúvida sobre o artigo ou tiver ideias exclusivas, você pode acessar o site oficial da comunidade para perguntar ou compartilhá-las ~)

Grupo de intercâmbio técnico:

Grupo WeChat e QQ:

Grupo QQ: 533341697

Grupo WeChat: Adicione o GreatSQL Community Assistant (WeChat ID:) wanlidbccomo amigo e espere que o assistente da comunidade adicione você ao grupo.

Lei Jun: A versão oficial do novo sistema operacional da Xiaomi, ThePaper OS, foi empacotada. A janela pop-up na página de loteria do Gome App insulta seu fundador. O Ubuntu 23.10 foi lançado oficialmente. Você também pode aproveitar a sexta-feira para atualizar! Episódio de lançamento do Ubuntu 23.10: A imagem ISO foi "recuperada" com urgência devido a conter discurso de ódio. Um estudante de doutorado de 23 anos corrigiu o "bug fantasma" de 22 anos no Firefox. O desktop remoto RustDesk 1.2.3 foi lançado, Wayland aprimorado para suportar a versão TiDB 7.4: Oficial compatível com MySQL 8.0. Depois de desconectar o receptor USB da Logitech, o kernel do Linux travou. O mestre usou o Scratch para esfregar o simulador RISC-V e executou com sucesso o kernel do Linux. JetBrains lançou o Writerside, uma ferramenta para criação de documentos técnicos.
{{o.nome}}
{{m.nome}}

Acho que você gosta

Origin my.oschina.net/GreatSQL/blog/10120061
Recomendado
Clasificación