SpringBoot + Prometheus + Grafana realiza monitoramento de aplicativos e alarme

Clique na fonte azul acima e selecione "Conta oficial da estrela"

Artigos de alta qualidade, entregues imediatamente

Siga a conta oficial nos bastidores para responder a pagar ou shopping para obter informações reais do projeto + vídeo

Autor: eu fumo

cnblogs.com/2YSP/p/12827487.html 

1. Fundo

SpringBoot tem muitas soluções de monitoramento de aplicativos, e SpringBoot + Prometheus + Grafana é atualmente uma das soluções mais comumente usadas. A relação entre os três é a seguinte:

gráfico de relação

Dois, desenvolva o aplicativo SpringBoot

Primeiro, crie um projeto SpringBoot, o arquivo pom é o seguinte:

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

<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!-- https://mvnrepository.com/artifact/io.prometheus/simpleclient_spring_boot -->
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_spring_boot</artifactId>
    <version>0.8.1</version>
</dependency>

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

Nota:  A versão SpringBoot aqui é 1.5.7.RELEASE. A razão pela qual o 2.X mais recente não é usado é porque o simpleclient_spring_boot mais recente suporta apenas 1.5.X, não tenho certeza se a versão 2.X pode ser compatível.

Adicionadas anotações à classe de inicialização MonitorDemoApplication

package cn.sp; 
 
import io.prometheus.client.spring.boot.EnablePrometheusEndpoint; 
import io.prometheus.client.spring.boot.EnableSpringBootMetricsCollector; 
import org.springframework.boot.SpringApplication; 
import org.springframework.boot.autoconfigure.SpringBootApplication; 
@EnablePrometheusEndpoint 
@EnableSpringBootMetricsCollector 
@SpringBootApplication 
public class MonitorDemoApplication { 
 
    public static void main(String[] args) { 
        SpringApplication.run(MonitorDemoApplication.class, args); 
    } 
 
} 

Arquivo de configuração application.yml

server: 
  port: 8848 
spring: 
  application: 
    name: monitor-demo 
 
security: 
  user: 
    name: admin 
    password: 1234 
  basic: 
    enabled: true 
    # 安全路径列表,逗号分隔,此处只针对/admin路径进行认证 
    path: /admin 
 
# actuator暴露接口的前缀 
management: 
  context-path: /admin 
  # actuator暴露接口使用的端口,为了和api接口使用的端口进行分离 
  port: 8888 
  security: 
    enabled: true 
    roles: SUPERUSER 

Código de teste TestController

@RequestMapping("/heap/test")
@RestController
public class TestController {
 
    public static final Map<String, Object> map = new ConcurrentHashMap<>();
 
    @RequestMapping("")
    public String testHeapUsed() {
        for (int i = 0; i < 10000000; i++) {
            map.put(i + "", new Object());
        }
        return "ok";
    }
}

A lógica aqui é criar um grande número de objetos e salvá-los no mapa para aumentar o uso da memória heap após solicitar essa interface, o que é conveniente para testar alarmes de e-mail posteriormente.

Depois de iniciar o projeto, você pode ver muitos Endpoints no IDEA, conforme mostrado na figura:

No início, meu IDEA não exibia este Endpoints, mas depois descobri que a versão da ideia que eu estava usando era muito antiga, ou 2017.1,
e isso requer idea2017.2 ou superior para ser capaz de vê-la.

Mais tarde, tive que fazer o download e instalá-lo novamente, o que demorou muito. . . .

Após a inicialização, visite http: // localhost: 8888 / admin / prometheus para ver os indicadores de monitoramento expostos pelo serviço. Nota:

Como a autenticação de segurança está ativada, você precisa solicitar a inserção da conta / senha para acessar este URL. Se ele solicitar 404, verifique se o endereço solicitado está correto. Se você não definir o caminho de gerenciamento.contexto, o padrão o endereço é http: // ip: port / prometheus

Três, instale o Prometheus

Link para Download

https://prometheus.io/download/

Este artigo baixa a versão Windows de prometheus-2.17.2.windows-amd64.tar.gz.

Após a descompactação, modifique o arquivo prometheus.yml para configurar as informações de destino para a coleta de dados.

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'] 
  - job_name: 'monitor-demo' 
    scrape_interval: 5s # 刮取的时间间隔 
    scrape_timeout: 5s  
    metrics_path: /admin/prometheus 
    scheme: http  
    basic_auth: #认证信息 
      username: admin 
      password: 1234 
    static_configs: 
      - targets: 
        - 127.0.0.1:8888  #此处填写 Spring Boot 应用的 IP + 端口号

Para obter mais informações de configuração, verifique a documentação oficial.

Agora você pode iniciar o Prometheus. Digite a linha de comando: prometheus.exe --config.file = prometheus.yml para
visitar http: // localhost: 9090 / targets para verificar se o status da coleção Spring Boot está normal.

Quarto, instale o Grafana

Link para Download

https://grafana.com/grafana/download

Este artigo usa a versão do Windows grafana-6.3.3.windows-amd64.zip.

Após a descompactação, execute grafana-server.exe no diretório bin para iniciar e o navegador pode acessar http: // localhost: 3000 para ver a página de login.A senha padrão da conta é admin / admin.

Agora comece a criar seu próprio painel de monitoramento visual.

1. Configure a fonte de dados

2. Crie um painel

3. Preencha os pontos de índice coletados

Nota:  Os pontos indicadores aqui não podem ser preenchidos casualmente, eles devem existir e podem ser vistos no Prometheus. 4. Selecione o estilo do gráfico
5. Preencha a descrição do título

Por fim, clique em Salvar no canto superior direito e digite o nome do Dashboad.

Dicas:  O layout do gráfico aqui pode ser arrastado com o mouse

Cinco, adicionar alarme de e-mail

Em um projeto real, quando um indicador monitorado excede um limite (por exemplo, o uso da CPU é muito alto), espera-se que o sistema de monitoramento alerte automaticamente o pessoal de operação e manutenção por SMS, DingTalk e e-mail. Grafana oferece suporte a esta função .

Etapa 1:  Clique em [Alerta] ——> [Canais de notificação] para adicionar canais de notificação

Criar canal
editar

Existem muitas opções de Tipo aqui, incluindo webhook, Dingding, etc. Aqui, tomamos o e-mail como exemplo.

Etapa 2:  configuração de e-mail

O Grafana é executado por padrão usando defaults.ini no diretório conf como arquivo de configuração.De acordo com as recomendações oficiais, não devemos alterar defaults.ini, mas criar um novo arquivo de configuração custom.ini no mesmo diretório.

Pegue a caixa de correio corporativa da Tencent como exemplo, a configuração é a seguinte:

#################################### SMTP / Emailing #####################
[smtp]
enabled = true
host = smtp.exmail.qq.com:465
user = [email protected]
# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""
password = XXX
cert_file =
key_file =
skip_verify = true
from_address = [email protected]
from_name = Grafana
ehlo_identity = ininin.com

Depois disso, exija pesado 启 Grafana, instrução grafana-server.exe -config = E: \ file \ grafana-6.3.3 \ conf \ custom.ini

Etapa 3:  adicionar alerta ao indicador

Configurar regras de alerta
Configure o método de notificação e as informações

Avalie cada

Indica a taxa de detecção, aqui para testar o efeito, mude para 1 segundo

Para

Se a regra de alerta for configurada com For e a consulta violar o limite configurado, ela mudará primeiro de OK para Pendente. Nenhuma notificação será enviada de OK para Grafana Pendente. Assim que o tempo de disparo da regra de alerta exceder a duração, ele mudará para Alerta e enviará uma notificação de alerta.

Condições

Quando representa o tempo, de representa a condição, está acima representa o valor de disparo
ao mesmo tempo, haverá uma linha vermelha após a configuração estar acima.

Se nenhum dado ou todos os valores forem nulos

Se não houver dados ou todos os valores estiverem vazios, selecione disparar alarme aqui

Se erro de execução ou tempo limite

Se a execução estiver errada ou com hora extra, opte por acionar o alarme aqui

Observação: na  próxima vez que for disparado, por exemplo, 10 segundos depois, não disparará novamente para evitar a ocorrência de tempestades de alarme!

Etapa 4: após a
solicitação de  teste http: // localhost: 8848 / heap / interface de teste, a memória sobe acima do limite definido e, em seguida, um e-mail de alarme é recebido.

Correio de alarme

A foto aqui não aparece, não entendo por quê.

Seis, resumo

Este conjunto de funções de monitoramento é bastante poderoso, mas o Prometheus tem muitas expressões.

Anexe alguns links:

  • https://prometheus.io/docs/introduction/first_steps/

  • https://grafana.com/docs/grafana/latest/

  • https://github.com/2YSP/monitor-demo

}



有热门推荐????
10个解放双手实用在线工具,有些代码真的不用手写!微信小程序练手实战:前端+后端(Java)
又一神操作,SpringBoot2.x 集成百度 uidgenerator搞定全局ID为什么阿里不允许用Executors创建线程池,而是通过ThreadPoolExecutor的方式?
为什么要在2021年放弃Jenkins?我已经对他失去耐心了...
Docker + FastDFS + Spring Boot 一键式搭建分布式文件服务器

点击阅读原文,前往学习SpringCloud实战项目

Acho que você gosta

Origin blog.csdn.net/qq_17231297/article/details/114697181
Recomendado
Clasificación